我正在使用Python 2.7和Pyodbc 3.0.6访问一个运行在与我的计算机相同网络上的DB2(9.7)服务器。以下是一个非常简化的示例,类似于我尝试做的事情。
这段代码在我的Windows 8电脑上运行非常缓慢(10秒内处理100行)。然而,在我同事的Windows 7电脑上运行速度非常快。他的计算机与我的配置相似,并且使用的是相同版本的pyodbc和Python,因此我不认为这是一个问题。
当我同时使用IBM DB2 ODBC DRIVER和IBM DATA SERVER DRIVER FOR ODBC时,问题仍然存在。
有什么建议可以解释这个缓慢的原因吗?
我知道像cur.fetchmany()这样的东西,但是我仍然期望这个代码能够更快,而不用使用它。
更新:
事实证明,ODBC之所以慢,是因为跟踪被打开了。我关闭了跟踪功能,性能恢复到了我所期望的水平。(跟踪功能可以在Windows 7和8的ODBC数据源中找到。)
import pyodbc as db
def dbcur(connectname):
con = db.connect(connectname)
cur = con.cursor()
return cur,con
def main():
print 'a'
cur,con = dbcur('DSN=MYODBCCON')
print 'b'
# X.name is a short varchar
qry = """
select
X.name as N
from schema.table as X
"""
print 'c'
cur.execute(qry)
print 'd'
c = 0
for row in cur:
c+=1
if not c%100:
print c, row
return
if __name__ == '__main__': main()
这段代码在我的Windows 8电脑上运行非常缓慢(10秒内处理100行)。然而,在我同事的Windows 7电脑上运行速度非常快。他的计算机与我的配置相似,并且使用的是相同版本的pyodbc和Python,因此我不认为这是一个问题。
当我同时使用IBM DB2 ODBC DRIVER和IBM DATA SERVER DRIVER FOR ODBC时,问题仍然存在。
有什么建议可以解释这个缓慢的原因吗?
我知道像cur.fetchmany()这样的东西,但是我仍然期望这个代码能够更快,而不用使用它。
更新:
事实证明,ODBC之所以慢,是因为跟踪被打开了。我关闭了跟踪功能,性能恢复到了我所期望的水平。(跟踪功能可以在Windows 7和8的ODBC数据源中找到。)