- 日本語 (ja)
- English (en)
最近の更新
Tag Cloud
このページへのアクセス
今日: 1 / 昨日: 0
総計: 1057
- Dokuwiki.fl8.jp(275)
- 13 CentOS6メール設定(15)
- 34 UnboundでHA構成(14)
- 05 rsync(14)
- FreeBSD カーネル再構築(13)
最近の更新
このページへのアクセス
今日: 1 / 昨日: 0
総計: 1057
INNODBのパラメータ innodb_flush_log_at_trx_commit を変更すると、パフォーマンスが飛躍的にアップする。
またGaleraで冗長性が保たれている場合innodb_flush_log_at_trx_commitを変更するとどうなるかテスト
innodb_flush_log_at_trx_commitは0,1,2の3つの値があり、1が初期値です。
パラメータは動的に設定可能です。
設定値 | ログバッファ→ログファイル(wal) | Diskへフラッシュ | 備考 |
---|---|---|---|
0 | 毎秒 | 毎秒 | mysqldのプロセスがクラッシュすると、最後の秒のトランザクションが消される場合があります。 |
1 (default) | commit時 | commit時 | OS、あるいはハードウェアの問題によってフラッシュが行われない場合、トランザクションの耐久力が保障されない可能性があります。 |
2 | commit時 | 毎秒 | OSのクラッシュや停電が起こると、最後の秒のトランザクションが消されてしまいます。 |
mysqlslap でベンチマークを計ってみる。
書き込み回数が減る分パフォーマンスが上がる
# 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
# 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
参考:Galera + innodb_flush_log_at_trx_commit
結論から言うと、Galeraでinnodb_flush_log_at_trx_commit=2の場合
全ノードが同時にOSダウンする場合(電源障害など)以外ではデータロストしない。
innodb_flush_log_at_trx_commit=0でも、全ノード同時にmysqlで問題が発生する時以外問題ない。。。はず
クライアントから、数千のトランザクションを発行しながら、mysqlやOSを異常終了させてみる。
シャットダウンの場合は、特にデータ差異は発生しない。
※VIPを持ってないノードをシャットダウンした場合は、
データ書き込みが止まる訳ではないので、PrimaryとSecondaryでデータ数の差が発生します。(正常動作)
(OSの異常終了でも同様)
walからファイルへの書き込み(1秒分)が書き込まれてない状態となる。
これはPrimary側からデータの復旧が可能です。
※共にクライアントが書き込みをcommitした分までは、正常な方にデータが書き込まれている。
-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)