2014-09-11 301 views
0

我在Windows 7系统(x64)上通过ODBC连接本地DB2(v9.7 Express-C)数据库的速度非常慢。我编写了几个测试程序,每个程序连接到本地数据库连续100次(不查询)并测量时间。结果是:通过ODBC连接到DB2非常慢

Average time for connection to a local database using different methods C++ 86 DB2/ODBC: 32位C++应用程序,经由CDatabase
C++ 86 DB2/ODBC连接到本地DB2数据库:与上面相同,但64位应用
PHP DB2/ODBC:通过odbc_connect连接到本地DB2数据库。
PHP MySQL/ODBC:通过odbc_connect连接到本地MySQL数据库。
JDBC DB2: Java应用程序,使用DB2 JDBC驱动程序连接到本地DB2数据库。
JDBC MySQL: Java应用程序,使用MySQL JDBC驱动程序连接到本地MySQL数据库。

我的第一个想法是,我的ODBC配置出了问题,但正如您可以看到通过ODBC连接到MySQL数据库的工作方式,如魅力。另一方面,使用JDBC驱动程序而不是ODBC连接到DB2也可以正常工作(尽管它仍然比MySQL慢很多)。我发现this related question,但它不适用于我。 任何可能导致这种情况以及如何解决的提示都会很棒!


问题补充:什么是通过ODBC连接到DB2数据库时常见的连接时间? DB2 ODBC驱动程序如此之慢是否正常?!

+0

有了这几个细节,不可能给你任何有意义的答案,但有一点你应该看看是数据库激活。 DB2在第一次连接时激活数据库,并在上次连接关闭时将其停用。在测试之前尝试发出'ACTIVATE DB '。 – mustaccio 2014-09-11 13:52:43

+0

这有帮助!哇,谢谢,我一直在为此奋斗!发布作为答案,我会接受。你能否告诉我如何配置我的DB2实例,以便在启动后始终激活该数据库?另外,为什么通过JDBC连接速度如此之快? JDBC驱动程序不能激活数据库本身,因为连接到数据库的用户没有足够的权限。 – 2014-09-11 14:18:18

+0

您可以提供连接时间值与激活的数据库吗? – AngocA 2014-09-11 18:24:58

回答

2

你应该看看的一件事是数据库激活。 DB2在第一次连接时激活数据库,并在上次连接关闭时将其停用。在激活期间,DB2分配事务日志文件,内存池,并执行一些需要时间的其他任务。

此行为不依赖于连接类型(ODBC或JDBC);您观察到的差异可能由额外的连接来解释,该连接在JDBC测试期间保持数据库处于活动状态。

在测试之前尝试发出ACTIVATE DB <YOURDB>,即使在没有连接的情况下也会使数据库保持活动状态。除了在系统启动时发出这个命令,例如,除了默认情况下,没有办法激活数据库。从一个批处理文件。