読者です 読者をやめる 読者になる 読者になる

kenken0807_DBメモ

つば九郎が好きなDBAです。Oracle Standard Editionでの運用やツールとかとかの備忘録。特に記載がない場合はoracle11gR2です。時々MySQL

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でずっと待たされてしまって、その他テーブルへの更新がブロックされてしまうので注意。

なるほど、こんな場合もあるのかー。