2014-09-11 3 views
0

Я испытываю чрезвычайно медленные соединения с локальной базой данных DB2 (v9.7 Express-C) через ODBC в системе Windows 7 (x64). Я написал несколько тестовых программ, каждый из которых подключается к локальной базе данных 100 раз подряд (без запроса) и измеряет время. Результаты: C приложение 32bit ++, подключение к локальной базе данных DB2 с помощью CDatabase
C++ x86/ODBC DB2::Соединение с DB2 через ODBC чрезвычайно медленное

Average time for connection to a local database using different methods C++ x86/ODBC DB2 же, как и выше, но приложение x64
PHP DB2/ODBC: Подключение к локальной базе данных DB2 через odbc_connect.
PHP MySQL/ODBC: Подключение к локальной базе данных MySQL через odbc_connect.
JDBC DB2: Приложение Java, подключающееся к локальной базе данных DB2 с использованием драйвера JDBC DB2.
JDBC MySQL: Приложение Java, подключающееся к локальной базе данных MySQL с использованием драйвера JDBC MySQL.

Моя первая мысль заключалась в том, что что-то не так с моей конфигурацией ODBC, но поскольку вы можете видеть, что подключение к базе данных MySQL через ODBC работает как шарм. С другой стороны, соединение с DB2 с драйвером JDBC вместо ODBC отлично работает (хотя оно все еще намного медленнее, чем MySQL).

Я нашел this related question, но это не относится ко мне. Любые подсказки о том, что может вызвать это и как решить, было бы здорово!


Дополнительный вопрос: Что общие раз соединения при подключении к базе данных DB2 через ODBC? Нормально ли для драйвера DB2 ODBC быть настолько медленным ?!

+0

С этими небольшими деталями невозможно дать вам сколько-нибудь значимый ответ, но одна вещь, на которую вы должны обратить внимание, - это активация базы данных. DB2 активирует базу данных по первому соединению и деактивирует ее, когда последнее соединение закрыто. Попробуйте выполнить 'ACTIVATE DB ' перед вашими испытаниями. – mustaccio

+0

Это помогло! Вау, спасибо, я боролся с этим в течение нескольких дней! Отправьте это как ответ, и я соглашусь. Не могли бы вы также рассказать мне, как я могу настроить свой экземпляр DB2, чтобы он всегда активировал этот db после запуска? Кроме того, почему соединение через JDBC так быстро? Драйвер JDBC не может активировать саму базу, поскольку пользователь, который подключается к базе данных, имеет недостаточно привилегий. –

+0

Можете ли вы указать значения времени соединения с активированной базой данных – AngocA

ответ

2

Одна вещь, на которую вы должны обратить внимание - это активация базы данных. DB2 активирует базу данных по первому соединению и деактивирует ее, когда последнее соединение закрыто. Во время активации DB2 выделяет файлы журнала транзакций, пулы памяти и выполняет ряд других задач, требующих времени.

Данное поведение не зависит от типа соединения (ODBC или JDBC); разница, которую вы наблюдаете, может быть объяснена дополнительным соединением, которое поддерживает базу данных во время тестов JDBC.

Попробуйте ввести ACTIVATE DB <YOURDB> перед вашими испытаниями, которые будут поддерживать базу данных даже при отсутствии соединений. Невозможно активировать базы данных по умолчанию, кроме выдачи этой команды при запуске системы, например. из командного файла.

Смежные вопросы