Название: QODBC + MSSQ. Медленно работает Отправлено: smirnoff от Май 23, 2011, 08:06 Подскажите почему медленно работает выполнение транзакций в связке QT + QODBC + MSSQL?
Подключение происходит так: Код: QSqlDatabase db = QSqlDatabase::addDatabase( "QODBC3" ); В цикле организуется добавление записей (INSERT). Цикл порядка 400.000 итераций и более. В среднем за секунду добавляется ~1000 записей. Как ускорить процесс? В этом виноват ODBC? Название: Re: QODBC + MSSQ. Медленно работает Отправлено: Disaron от Май 23, 2011, 08:17 Да, бо ODBC тормоз by design. Он не предназначен для нагруженных баз, только для поделок и тестов.
Название: Re: QODBC + MSSQ. Медленно работает Отправлено: TukiNov от Май 23, 2011, 08:22 Низкая скорость может быть из-за включенной трассировки, смотрим odbcinst.ini
Код: TraceFile=/tmp/odbctrace.log Название: Re: QODBC + MSSQ. Медленно работает Отправлено: LisandreL от Май 23, 2011, 08:24 Да, ODBC тормознут.
Кроме того, если у вас на каждый инсерт открывается и закрывается транзакция, то это тоже небыстрая вещь. Для ускорения можно все инсерты производить в одной транзакции, но при этом надо понимать, что если неудастся один из инсертов, то откатятся все. Название: Re: QODBC + MSSQ. Медленно работает Отправлено: smirnoff от Май 23, 2011, 18:51 Инсерты происходят так:
Код: for(int i = 0; i < (file.size() / 128); i++) Как свести вся в одну транзакцию? Название: Re: QODBC + MSSQ. Медленно работает Отправлено: Пантер от Май 23, 2011, 19:31 Код
Название: Re: QODBC + MSSQ. Медленно работает Отправлено: smirnoff от Май 23, 2011, 20:17 Спасибо. Время работы сократилось в 4 раза. С 40 минут до 10 при 2,500,000 записей.
Название: Re: QODBC + MSSQ. Медленно работает Отправлено: LisandreL от Май 24, 2011, 02:25 Попробуйте ещё execBatch, хотя и н уверен, что это даст прирост.
Ну и, конечно не все сразу значения в батч. Попробуйте по 10, 100, 1024... |