У нас есть приложение C ++, которое использует ODBC для подключения к MS SQL Server и Oracle. Мы заметили, что извлечение больших объемов данных становится действительно медленным, когда задержка между клиентом, в которой работает программа, и база данных высока. < /P>
Отказ от ответственности: если я не говорю об этом, я говорю о драйвере ODBC 18 для SQL Server. Измерение времени, которое каждый выберет, приводит меня к выводу, что у драйвера ODBC есть внутренний буфер сборов, и всякий раз, когда этот буфер используется, драйвер получит следующую партию данных из базы данных. Так, например, для одной таблицы я измерил, что примерно каждые 30 -й выборки занимали много времени (задержка + еще больше), в то время как между ними были близки. Поэтому я ищу способ ускорить извлечение больших объемов данных. В целях тестирования я использовал таблицу с 3 столбцами, 1 int и 2 струнами длины 100 и добавил в нее 100 000 рядов. В этой таблице примерно каждые 650 -й выборки вызывали задержку задержки при использовании отдельных избранных. Основные выборки выполняются с использованием SQLFetchScroll с SQL_FETCH_NEXT, поскольку драйвер не соблюдает спецификацию и не выполняет объемные извлечения с SQLFETCH, даже если SQL_ATTR_ROW_BIND_TYPE и SQL_ATTR_ROW_ARRAY_SIZE установлены (драйвер ORACLE Profectly Fetches с множеством Rows с SQLETCH). /> Это заставляет меня поверить, что объемное извлечение по -прежнему использует тот же самый внутренний буфер избирателей и не меняет своего размера для объемного извлечения. Таким образом, объемное извлечение с этим драйвером - это всего лишь какой -то синтаксический сахар, чтобы заполнить несколько переменных одновременно, но ничего не меняет в том, как работает подтяжка под капюшоном. Есть ли способ увеличить размер буфера для выбора и, таким образом, уменьшить количество раз, когда драйвер должен связаться с базой данных по сети? Или что -нибудь еще я могу сделать? И хотя существует уменьшающаяся доходность, увеличение размера с 64 тыс. До 640 тыс. Или 6,4 м снижает время, чтобы получить эти 100 тыс. Рекордов с 28 секунд до 4 соответствующих. 2 секунды в сценарии с примерно 50 мс задержки.
Подробнее здесь: https://stackoverflow.com/questions/795 ... c-driver-1
Как я могу улучшить производительность SQLFETCH/SQLFETCHSCROLL Использование Driver 18 ODBC для SQL Server в сценариях в ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Невозможно открыть библиотеку «ODBC Driver 17 для SQL Server»: файл не найден
Anonymous » » в форуме Python - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-