Python2.7とpyodbc3.0.6を使用して、コンピューターと同じネットワーク上で実行されているdb2(9.7)サーバーにアクセスしています。
以下は、私がやろうとしていることに似たものの非常に簡略化された例です。
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 DB2ODBCDRIVERとIBMDATASERVER DRIVER FOR ODBCの両方を使用しても、問題は解決しません。
なぜこれがとても遅いのかについての提案はありますか?
cur.fetchmany()などを認識していますが、これを使用しなくても、このコードの方がはるかに高速であると期待しています。
更新:
トレースがオンになっているため、ODBCが遅いことがわかりました。トレースを無効にすると、パフォーマンスは期待どおりに戻りました。(トレースは、Windows 7および8のODBCデータソースにあります。)