ユーザ用ツール

サイト用ツール


01_linux:11_データベース:01_mysql:09_galera_innodb_flush_log_at_trx_commit

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

01_linux:11_データベース:01_mysql:09_galera_innodb_flush_log_at_trx_commit [2016/05/27 13:29]
matsui 作成
01_linux:11_データベース:01_mysql:09_galera_innodb_flush_log_at_trx_commit [2016/05/27 13:37] (現在)
matsui
ライン 1: ライン 1:
 +====== 09 Galera + innodb_flush_log_at_trx_commit ======
  
 +INNODBのパラメータ innodb_flush_log_at_trx_commit を変更すると、パフォーマンスが飛躍的にアップする。
 +またGaleraで冗長性が保たれている場合innodb_flush_log_at_trx_commitを変更するとどうなるかテスト
 +
 +[[http://​qiita.com/​kkyouhei/​items/​d2c40d9e3952c7049ca3|参考サイト]]
 +
 +===== パラメータについて =====
 +
 +innodb_flush_log_at_trx_commitは0,1,2の3つの値があり、1が初期値です。
 +パラメータは動的に設定可能です。
 +
 +^設定値^ ログバッファ->​ログファイル(wal)^Diskへフラッシュ^備考^
 +|0|毎秒| 毎秒|mysqldのプロセスがクラッシュすると、最後の秒のトランザクションが消される場合があります。|
 +|1 (default)|commit時|commit時|OS、あるいはハードウェアの問題によってフラッシュが行われない場合、トランザクションの耐久力が保障されない可能性があります。|
 +|2|commit時|毎秒|OSのクラッシュや停電が起こると、最後の秒のトランザクションが消されてしまいます。|
 +
 +
 +===== 1.パフォーマンス試験 =====
 +
 +[[01_linux:​11_データベース:​01_mysql:​51_mysqlslap|mysqlslap]] でベンチマークを計ってみる。
 +書き込み回数が減る分パフォーマンスが上がる
 +
 +=== innodb_flush_log_at_trx_commit=1 ===
 +
 +<​code>​
 +# mysqlslap --no-defaults --concurrency=20 --iteration=1 --engine=innodb --number-int-cols=10 --number-char-cols=10 --auto-generate-sql --auto-generate-sql-load-type=update --auto-generate-sql-write-number=1000 --number-of-queries=1000 --user=root -p
 +Enter password: ​
 +
 +Benchmark
 + Running for engine innodb
 + Average number of seconds to run all queries: 32.026 seconds
 + Minimum number of seconds to run all queries: 32.026 seconds
 + Maximum number of seconds to run all queries: 32.026 seconds
 + Number of clients running queries: 20
 + Average number of queries per client: 50
 +</​code>​
 +
 +=== innodb_flush_log_at_trx_commit=2 ===
 +
 +<​code>​
 +# mysqlslap --no-defaults --concurrency=20 --iteration=1 --engine=innodb --number-int-cols=10 --number-char-cols=10 --auto-generate-sql --auto-generate-sql-load-type=update --auto-generate-sql-write-number=1000 --number-of-queries=1000 --user=root -p
 +Enter password: ​
 +
 +Benchmark
 + Running for engine innodb
 + Average number of seconds to run all queries: 23.225 seconds
 + Minimum number of seconds to run all queries: 23.225 seconds
 + Maximum number of seconds to run all queries: 23.225 seconds
 + Number of clients running queries: 20
 + Average number of queries per client: 50
 +</​code>​
 +
 +===== 2.障害試験 =====
 +
 +[[http://​planet.mysql.com/​entry/?​id=2182281|参考:​Galera + innodb_flush_log_at_trx_commit]]
 +
 +結論から言うと、Galeraでinnodb_flush_log_at_trx_commit=2の場合
 +全ノードが同時にOSダウンする場合(電源障害など)以外ではデータロストしない。
 +innodb_flush_log_at_trx_commit=0でも、全ノード同時にmysqlで問題が発生する時以外問題ない。。。はず
 +
 +[[http://​www.nkjmkzk.net/?​p=60|参考:​innodb_flush_log_at_trx_commit検証]]
 +
 +==== 検証結果 ====
 +
 +クライアントから、数千のトランザクションを発行しながら、mysqlやOSを異常終了させてみる。
 +
 +=== 片方のノードでmysqlをシャットダウン ===
 +
 +シャットダウンの場合は、特にデータ差異は発生しない。
 +※VIPを持ってないノードをシャットダウンした場合は、
 +データ書き込みが止まる訳ではないので、PrimaryとSecondaryでデータ数の差が発生します。(正常動作)
 +
 +=== 片方のmysqlをkillしてみる。 ===
 +(OSの異常終了でも同様)
 +walからファイルへの書き込み(1秒分)が書き込まれてない状態となる。
 +これはPrimary側からデータの復旧が可能です。
 +※共にクライアントが書き込みをcommitした分までは、正常な方にデータが書き込まれている。
 +
 +== 1.Primaryのmysqlをkill ==
 +
 +<​code>​
 +-Primary
 +| 3688 | AAAA |
 +| 3689 | AAAA |
 +| 3690 | AAAA |
 ++------+------+
 +3691 rows in set (0.00 sec)
 +
 +-Secondary
 +| 3689 | AAAA |
 +| 3690 | AAAA |
 +| 3691 | AAAA |
 ++------+------+
 +3692 rows in set (0.01 sec)
 +</​code>​
 +
 +== 2.Secondaryのmysqlをkill ==
 +
 +<​code>​
 +-Primary
 +|  3889 | AAAA |
 +|  3890 | AAAA |
 +|  3891 | AAAA |
 ++-------+------+
 +17985 rows in set (0.02 sec)
 +
 +-Secondary
 +|  3881 | AAAA |
 +|  3882 | AAAA |
 +|  3883 | AAAA |
 ++-------+------+
 +17977 rows in set (0.03 sec)
 +</​code>​
 +
 +{{tag>​mysql innodb Galera}}
01_linux/11_データベース/01_mysql/09_galera_innodb_flush_log_at_trx_commit.txt · 最終更新: 2016/05/27 13:37 by matsui

Yesterday:1646 Today:1455 Total:11956