python con = _mysql.connect('localhost', 'Dell-pc', '', 'test')
を使用してmysqlデータベースに接続しました。作成したプログラムは、完全な実行に多くの時間、つまり約10時間かかります。実際、コーパスから明確な単語を読み込もうとしています。読み取りが終了した後、タイムアウトエラーが発生しました。
次のMysqlのデフォルトタイムアウトをチェックしました。
+----------------------------+----------+
| Variable_name | Value |
+----------------------------+----------+
| connect_timeout | 10 |
| delayed_insert_timeout | 300 |
| innodb_lock_wait_timeout | 50 |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 28800 |
| lock_wait_timeout | 31536000 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| slave_net_timeout | 3600 |
| wait_timeout | 28800 |
+----------------------------+----------+
デフォルトのタイムアウトを変更するにはどうすればよいですか?
行う:
con.query('SET GLOBAL connect_timeout=28800')
con.query('SET GLOBAL wait_timeout=28800')
con.query('SET GLOBAL interactive_timeout=28800')
パラメーターの意味(ナビゲーターのMySQL Workbenchから取得:インスタンス>オプションファイル>タブ「ネットワーク」>セクション「タイムアウト設定」)
ところで:28800秒は8時間であるため、10時間の実行時間では、これらの値は実際に高くなります。
MySQL設定ファイルのデフォルト値を変更します(オプションconnect_timeout inmysqldセクション)-
[mysqld]
connect_timeout=100
このファイルにアクセスできない場合、このステートメントを使用してこの値を設定できます-
SET GLOBAL connect_timeout=100;
これは古い質問であることは知っていますが、記録のためだけに、適切な接続オプションを引数として_mysql.connect
呼び出しに渡すことでも可能です。例えば、
con = _mysql.connect(Host='localhost', user='Dell-pc', passwd='', db='test',
connect_timeout=1000)
キーワードパラメータ(Host、passwdなど)の使用に注意してください。コードの可読性が向上します。
_mysql.connect
に渡すことができるさまざまな引数の詳細については、 MySQLdb API documentation を参照してください
MAX_EXECUTION_TIMEは、長時間実行されるクエリの重要なパラメーターでもあります。MySQL5.7以降で機能します。
現在の値を確認する
SELECT @@GLOBAL.MAX_EXECUTION_TIME, @@SESSION.MAX_EXECUTION_TIME;
次に、必要に応じて設定します。
SET SESSION MAX_EXECUTION_TIME=2000;
SET GLOBAL MAX_EXECUTION_TIME=2000;