2014-09-11 2 views
0

Je rencontre des connexions extrêmement lentes à une base de données DB2 (v9.7 Express-C) locale via ODBC sur un système Windows 7 (x64). J'ai écrit plusieurs programmes de test, chacun se connectant à une base de données locale pendant 100 fois d'affilée (sans interroger) et mesurant l'heure. Les résultats sont les suivants:La connexion à DB2 via ODBC est extrêmement lente

Average time for connection to a local database using different methods C++ x86 DB2/ODBC: 32bit application C++, la connexion à une base de données DB2 locale via CDatabase
C++ x86 DB2/ODBC: comme ci-dessus, mais l'application x64
PHP DB2/ODBC: Connexion à une base de données DB2 locale via odbc_connect.
PHP MySQL/ODBC: Connexion à une base de données MySQL locale via odbc_connect.
JDBC DB2: Application Java, connexion à une base de données DB2 locale à l'aide du pilote DB2 JDBC.
JDBC MySQL: Application Java, connexion à une base de données MySQL locale à l'aide du pilote MySQL JDBC. Ma première pensée était que quelque chose ne va pas avec ma configuration ODBC, mais comme vous pouvez le voir se connecter à une base de données MySQL via ODBC fonctionne comme charme. D'autre part, se connecter à DB2 avec le pilote JDBC au lieu de ODBC fonctionne bien aussi (même si c'est beaucoup plus lent que MySQL). J'ai trouvé this related question, mais cela ne s'applique pas à moi. Tous les conseils sur ce qui pourrait causer cela et comment résoudre serait génial!


question supplémentaire: Quels sont les délais de connexion communes lors de la connexion à une base de données DB2 via ODBC? Est-il normal que le pilote DB2 ODBC soit si lent ?!

+0

Avec ces quelques détails, il est impossible de vous donner une réponse significative, mais une chose que vous devriez regarder est l'activation de la base de données. DB2 active la base de données lors de la première connexion et la désactive lorsque la dernière connexion est fermée. Essayez d'émettre 'DB ACTIVATE ' avant vos tests. – mustaccio

+0

Cela a aidé! Wow, merci, j'ai lutté avec ça pendant des jours! Postez cela comme une réponse et je vais accepter. Pourriez-vous également me dire comment je peux configurer mon instance DB2 pour qu'elle active toujours cette base de données après le démarrage? Aussi, pourquoi la connexion via JDBC est-elle si rapide? Le pilote JDBC ne peut pas activer la base de données elle-même, car l'utilisateur qui se connecte à la base de données a des privilèges insuffisants. –

+0

Pouvez-vous fournir les valeurs de temps de connexion avec une base de données activée? – AngocA

Répondre

2

Une chose que vous devriez regarder est l'activation de la base de données. DB2 active la base de données lors de la première connexion et la désactive lorsque la dernière connexion est fermée. Pendant l'activation, DB2 alloue les fichiers du journal des transactions, les pools de mémoire et exécute un certain nombre d'autres tâches qui prennent du temps.

Ce comportement ne dépend pas du type de connexion (ODBC ou JDBC); La différence que vous observez peut s'expliquer par une connexion supplémentaire qui maintient la base de données active pendant vos tests JDBC.

Essayez d'émettre ACTIVATE DB <YOURDB> avant vos tests, ce qui maintiendra la base de données active même en l'absence de connexions. Il n'y a aucun moyen d'activer les bases de données par défaut, en dehors de l'émission de cette commande lors du démarrage du système, par ex. à partir d'un fichier batch.

Questions connexes