3

次の問題があります。

私は MySQLdb と SSDictCursor で Python を使用して、かなり大きなデータベース (250M 行) を反復処理しています。すべてを RAM にロードできないため、ストリーミング API を使用しています。MySQL サーバーでは、max_allowed_pa​​cket サイズはすでに 512M に設定されています。

別のコンピューター (サーバー マシン自体からも) からスクリプトを実行しましたが、ランダムな数の行が処理された後、次のエラーでランダムにクラッシュし続けます。

_mysql_exceptions.OperationalError: (2013, 'Lost connection to MySQL server during query')
Exception _mysql_exceptions.OperationalError: (2013, 'Lost connection to MySQL server during query') in <bound method SSDictCursor.__del__ of <MySQLdb.cursors.SSDictCursor object at 0x7fa360e1a690>> ignored

私はスレッドや派手なものを使用していません。なぜこれが起こるのか、私は完全に途方に暮れています。それ以外の方法でこれを解決する方法を知っている人はいますか?

編集:あなたのためのいくつかのサンプルコード。

mysql = MySQLdb.connect("host", "user", "pass", "db")

cursor = mysql.cursor(MySQLdb.cursors.SSDictCursor)
cursor.execute("select stuff from database order by date asc")
for row in cursor:
     # just repacking all the information in the cursor row into some dict

cursor.close()

うまくいけば、そのコードが役に立ちました。for ループでは、ローカルの defaultdict でいくつかのルックアップを行っているだけです。

約 80M エントリ (または 40M など) のどこかで、上記のエラーが原因でプログラムが停止します。データは順番に転送する必要があります。また、処理された行の数がランダムであるため、データベース内の行に問題があるためではないと確信しています。私が確認した限り、サーバー自体ではサーバーインスタンスのみが実行されており、他のプログラムはありません。

4

0 に答える 0