繁体   English   中英

通过DriverManager.getConnection连接到Informix很慢

[英]Connecting to Informix via DriverManager.getConnection is slow

我正在使用JDBC通过DriverManager.getConnection method连接到Informix实例,但是我遇到了问题。

DriverManager.getConnection需要很长时间才能与Informix建立连接。 我正在尝试解决此问题,但到目前为止尚未成功。

如何解决这个问题呢?

您可以编写简单的测试,以显示连接数据库需要多长时间。 对于这些事情,我喜欢可以与JDBC一起使用的Jython,它可以与本机JDBC驱动程序一起使用,并且通过JDBC-ODBC桥可以与ODBC驱动程序一起使用。 当然,您必须首先配置这种ODBC连接。

这是显示此类时间的测试程序:

import sys
import traceback
import time

from java.sql import DriverManager
from java.lang import Class

Class.forName("com.informix.jdbc.IfxDriver")

def test_conn(db_url, usr, passwd):
    try:
        t0 = time.time()
        try:
            db = DriverManager.getConnection(db_url, usr, passwd)
            t2 = time.time()
            print('%s' % (db_url))
            print('%s, connection time %.03f [s]\n' % (db, (t2-t0)))
        finally:
            db.close()
    except:
        print("there were errors!")
        s = traceback.format_exc()
        sys.stderr.write("%s\n" % (s))


def main():
    for _ in range(5):
        test_conn('jdbc:informix-sqli://169.0.5.10:9088/test:informixserver=ol_t1;', 'user', 'passwd')
        test_conn('jdbc:odbc:ifx_test', 'user', 'passwd')

main()

我的机器上的结果表明,JDBC的连接速度比JDBC-ODBC桥更快(您必须知道,桥会增加一些本机应用程序不必要的时间)。 我的测试也在Windows上运行,其中time.time()最小分辨率约为15毫秒。 我的结果:

jdbc:informix-sqli://169.0.5.10...
com.informix.jdbc.IfxSqliConnect@1658cfb, connection time 0.015 [s]

jdbc:odbc:test
sun.jdbc.odbc.JdbcOdbcConnection@ad75b, connection time 0.047 [s]

当然,使用此程序,您可以测试相同的驱动程序,但可以在不同服务器上测试数据库。

问题可能是您的主机文件不包含127.0.0.1 localhost的映射。

同样,使用IPv6地址进行端口侦听可能是Informix的一种奇怪行为,我在另一篇SO文章中对此进行了介绍: notifyix jdbc卡住了连接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM