innodb_flusn_log_at_trx_commitとrsync_binlogパラメータの詳細


innodb_flush_log_at_trx_commitパラメータ解析
innodb_flush_log_at_trx_commit=0|1|2    
#「0」は、トランザクションがコミットされるたびにlog bufferに書き込まれるが、1秒ごとにlog buffer内のすべての更新がlog fileに書き込まれ、log fileがディスクにブラシされる(同時に行われる).トランザクションがコミットされるたびにディスク書き込みはアクティブにトリガーされず、1秒あたりのタイミングでのみブラシされます.
#「1」は、mysqlがトランザクションをコミットするたびにlog bufferのデータをlog fileに書き込み、flush dataが更新したデータをディスクに書き込むことを示します(セキュリティが最も高く、効率が最も低く、毎回ディスクの読み書きを呼び出し、トランザクションのブラシが完了すると次のエントリを実行します.通常、cpuの使用が高くなく、IOリクエストが待機します)(システムデフォルトモード)
#「2」は、トランザクションが更新されるたびにlog bufferのデータがlog fileに書き込まれるが、1秒ごとにflush data(ディスクにデータを書き込む)が実行されることを示す.
注:プロセススケジューリングポリシーの問題のため、この「1秒に1回flush(ディスクにブラシをかける)操作」は100%の「1秒」を保証するものではありません.
「0」の速度が最も速く、効率が最も高く、cpuリソースを十分に利用し、IOを待つ必要がなく、セキュリティが最も低い(mysqldプロセスのクラッシュは、前の秒のすべてのトランザクションが失われ、log bufferキャッシュに格納されたデータが失われる)
「2」は、オペレーティングシステムがクラッシュしたり、crashがオフになったりした場合にのみ、前の秒のすべてのトランザクションが失われる可能性があります.
「1」の最も安全なモードですが、最も効率的です.OSがクラッシュしたり、電源が切れたりしてcrashでは、文やトランザクションが1つだけ失われる可能性があります.
               innodb_flush_log_at_trx_commit         :
innodb_flush_log_at_trx_commit=0 (   、   ):log_buffer --  1 --> log_file --  -----> disk
innodb_flush_log_at_trx_commit=1 (   、   ):log_buffer --  -----> log_file --  -----> disk
innodb_flush_log_at_trx_commit=2 (   、   ):log_buffer --  -----> log_file --  1 --> disk
1、   0 ,log buffer    1        (log file),   log file     .    ,     ,             ;
2、   1 ,        ,MySQL  log buffer          (log file),   log file     ;
3、   2 ,        ,MySQL  log buffer          (log file).                .    ,MySQL       log file        .

------------------------------------------------------------------------------------------
rsync_binlogパラメータ解析
rsync_binlog = 0|N
This makes MySQL synchronize the binary log’s contents to disk each time it commits a transaction 
sync_binlogはMySQLのバイナリログ(binlog)がディスクに同期する頻度である.
sync_binlogのデフォルト値は0です.binlogはディスクに同期し、オペレーティングシステムに依存してbinlogをディスクにリフレッシュします.
sync_binlog=N(N>0)、MySQLはN回binlogを書くたびに、fdatasync()関数を使用してbinlogをディスクに同期.
innodb_flush_log_at_trx_commitとrsync_binlogの2つのパラメータはmysqlディスクの書き込みポリシーとデータセキュリティを制御する重要なパラメータであり、2つのパラメータが質問1を設定すると、性能が最も悪く、設定を推奨します.
innodb_flush_log_at_trx_commit = 2;
rsync_binlog=500または1000;
2つのパラメータで異なる値を設定した場合のパフォーマンステストの結果:
テストシーン1
  innodb_flush_log_at_trx_commit=2 
  sync_binlog=1000
テストシーン2
  innodb_flush_log_at_trx_commit=1 
  sync_binlog=1000
テストシーン3
  innodb_flush_log_at_trx_commit=1 
  sync_binlog=1
テストシーン4
  innodb_flush_log_at_trx_commit=1
  sync_binlog=1000
テストシーン5
  innodb_flush_log_at_trx_commit=2 
  sync_binlog=1000 
 
シーン
TPS
シーン1
41000
シーン2
33000
シーン3
26000
シーン4
33000
このように、2つのパラメータが2つの1に設定されている場合、書き込み性能が最も悪いsync_binlog=N (N>1) innodb_flush_log_at_trx_commit=2の場合、(現在のモードで)MySQLの書き込み操作が最高のパフォーマンスになります.