xtrabackupの--ftwrl-wait-timeoutと--ftwrl-wait-thresholdのメモ
xtrabackupの–ftwrl-wait-timeoutと–ftwrl-wait-thresholdをいつも忘れてしまうのでメモ。 xtrabackup2.4で試す。
–ftwrl-wait-threshold
Flush table with read lockを実行するタイミングでのクエリの実行時間。デフォルト60秒。–ftwrl-wait-timeout
–ftwrl-wait-thresholdの時間を過ぎたクエリがあった場合、Flush table with read lockを実行するために待機する時間。デフォルト0秒。よって待機しない。
xtrabackupの基本流れ
xtrabackup start | ibd file copy and innodb log copy | | ← Flush table with read lock | non-innodb file copy | ← UNLOCK TABLES xtrabackup finish
例:–ftwrl-wait-timeout=1800 and –ftwrl-wait-threshold=10
xtrabackup start | ibd file copy and innodb log copy | | ← 1.Flush table with read lockの実行前にこの時点で10秒以上経過したクエリがあるかチェック | 1-1.ない場合はFlush table with read lockを実行して、2はスキップ。 | 1-2.ある場合は Flush table with read lockを実行せずに1800秒待機。2へ。 | | 2.1800秒の間に毎秒、その10秒以上経過したクエリが終了したかチェック | 2-1. クエリが終了していた場合はFlush table with read lockを実行 | 2-2. クエリが終了せずに1800秒経過した場合はbackup失敗で終了 | non-innodb file copy | | ← UNLOCK TABLES xtrabackup finish
1のタイミングでクエリが8秒経過(10秒未満)していたとすると、1-1でFlush table with read lockがSET SESSION lock_wait_timeout=31536000で実行される。 しかし、このクエリがいつまでも終わらない場合はFlush table with read lockがwaiting flush tablesでずっと待たされてしまって、その他テーブルへの更新がブロックされてしまうので注意。
@keny_lala "2-1. クエリが終了していた場合はFlush table with read lockを実行" 単にSHOW FULL PROCESSLISTを見ているだけなので、その間に突っ込んできた新しいクエリーがthresholdに引っかかる可能性あるのですね
— yoku0825 (@yoku0825) 2017年4月11日
なるほど、こんな場合もあるのかー。