MySQLでは、
今回は、
SHOW GLOBAL VARIABLES
からtimeout
で部分一致検索すると、
mysql > > show global variables like '%timeout%'; +-----------------------------+----------+ | Variable_name | Value | +-----------------------------+----------+ | connect_timeout | 10 | | delayed_insert_timeout | 300 | | have_statement_timeout | YES | | innodb_flush_log_at_timeout | 1 | | innodb_lock_wait_timeout | 5 | | innodb_rollback_on_timeout | OFF | | interactive_timeout | 28800 | | lock_wait_timeout | 31536000 | | net_read_timeout | 30 | | net_write_timeout | 60 | | rpl_stop_slave_timeout | 31536000 | | slave_net_timeout | 60 | | wait_timeout | 28800 | +-----------------------------+----------+
コネクション関連のタイムアウトオプション
connect_timeout
MySQLがクライアントからの接続パケットを待機する時間set global
句を使用したオンラインでの変更可能です。
wait_timeout
アプリケーションなどから接続された非対話型の接続に対してのアイドルタイムアウト時間
interactive_timeout
mysqlクライアントでログインした時などの対話型の接続に対してのアイドルタイムアウト時間wait_
オプションと同様です。
注意として、interactive_
のグローバル値でwait_
のグローバル値を上書きします。wait_
を10秒、interactive_
を100秒に設定していた場合、wait_
の値を確認すると100と表示されます。
。
また、performance_
.variables_
テーブルから他のスレッドのオプション値がわかります。たとえば、wait_
のグローバル値ではなくセッションスコープで値を設定された場合、
mysql> show global variables like 'wait_timeout'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | wait_timeout | 28000 | +---------------+-------+ mysql> SELECT * FROM variables_by_thread WHERE thread_id=48 AND variable_name='wait_timeout'; +-----------+---------------+----------------+ | THREAD_ID | VARIABLE_NAME | VARIABLE_VALUE | +-----------+---------------+----------------+ | 48 | wait_timeout | 1 | +-----------+---------------+----------------+
スレッドIDの特定方法は第38回 performance_
InnoDBやSQLの操作関連のタイムアウトオプション
innodb_lock_wait_timeout
InnoDBにおける行ロックの待機時間innodb_
をONにしてMySQLを起動する必要があります。
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
lock_wait_timeout
メタデータロックを取得するための待機時間
メタデータロックとはデータの一貫性を確保するために使用されます。トランザクションが使用しているテーブルに対してメタデータロックを取得し、
待機時間を経過するとinnodb_
のタイムアウトと同じく以下エラーが発生します。
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
レプリケーション関連のタイムアウトオプション
slave_net_timeout
スレーブがマスターからの後続のデータを待機する時間
デフォルトでは60秒の間にマスターからの更新情報を受け取れていない状態であれば、
ただし、CHANGE MASTER TO
ステートメントの MASTER_
このハートビートに関するステータス情報はMySQL5.SHOW GLOBAL STATUS LIKE '%heartbeat%'
で確認でき、performance_
.replication_
テーブルから確認できます。
また、CHANGE MASTER TO
ステートメントの MASTER_
rpl_stop_slave_timeout
STOP SLAVE
の待機時間
これは、FLUSH TABLES WITH READ LOCK
ステートメントなど他のセッションからのステートメントのデッドロックを回避するためにMySQL5.
まとめ
MySQLにはさまざまなタイムアウトオプションが存在します。エラーメッセージやオプションの内容を把握して、