tldr; 使用unixODBC进行Python-> DB2的工作设置,但连接池不起作用。
我尝试过直接使用驱动程序:
conn = pyodbc.connect('DRIVER=/opt/ibm/db2/lib/libdb2.so;Hostname=mydb2.domain.com;PORT=1234;DATABASE=database1;UID=user1;PWD=password1')
按驱动程序名称:
conn = pyodbc.connect('DRIVER=DB2;Hostname=mydb2.domain.com;PORT=1234;DATABASE=database1;UID=user1;PWD=password1')
DSN:
conn = pyodbc.connect('DSN=server1UID=user1;PWD=password1')
我一直在使用这个Python脚本来测试:
import sys
import timeit
#import pypyodbc as pyodbc
import pyodbc
#conn = pypyodbc.connect('DSN=server1;UID=user1;PWD=password1')
def query():
try:
conn = pyodbc.connect('DSN=server1;UID=user1;PWD=password1')
cur = conn.cursor()
cur.execute("select current timestamp from sysibm.sysdummy1")
row = cur.fetchone()
print('.', end='', flush=True)
conn.close()
except Exception as ex:
print(ex, end='', flush=True)
t = timeit.Timer(query)
count = 50
duration = t.timeit(count)
print("\n{count} @ {duration}/sec".format(count=count, duration=count/duration))
(启用日志记录后,在odbcinst.ini
中,它会显示每个查询的连接打开/关闭)
在我的开发环境中,上面的每秒约为10次查询
如果连接是在循环之外创建的,并且已缓存,那么~120 query / sec
如果我安装ibm_db_dbi
并使用connect
,结果大约是10个查询/秒,并使用pconnect
~60个查询/秒。
我也尝试了iODBC,但我根本无法连接它,而在Windows上,使用ODBC,连接池似乎按预期工作。
为什么unixODBC而不是ibm_db_dbi
?
connect
无法合并pconnect
发生灾难性故障并且永远无法恢复。它也是缓存连接速度的一半。pyodbc
似乎比IBM驱动程序保持得更好。[ODBC]
Pooling = Yes
Trace = No
TraceFile = /var/log/odbc.log
[DB2]
Description = IBM DB2 Adapter
Driver = /opt/ibm/db2/lib/libdb2.so
Driver64 = /opt/ibm/db2/lib/libdb2o.so
FileUsage = 1
DontDLClose = 1
CPTimeout = 1000
CPTimeToLive = 100
Threading = 2
Pooling = Yes
[server1]
Description = Server 1
Driver = DB2
[server1]
Database = database1
Protocol = TCPIP
Hostname = mydb2.domain.com
ServiceName = 1234
答案 0 :(得分:0)
看起来你的Pooling = Yes
位置错误,需要在[ODBC]
标题下,而不是标题