回答:
最大1秒のトランザクションを失う可能性があります。デフォルト値は1で、InnoDB ACID Compliantを維持するのに役立ちます。
innodb_flush_log_at_trx_commitのMySQLドキュメントによると
innodb_flush_log_at_trx_commitの値が0の場合、ログバッファーは1秒に1回ログファイルに書き込まれ、ログファイルに対してディスクへのフラッシュ操作が実行されますが、トランザクションのコミットでは何も実行されません。値が1(デフォルト)の場合、トランザクションがコミットされるたびにログバッファーがログファイルに書き込まれ、ログファイルに対してディスクへのフラッシュ操作が実行されます。値が2の場合、ログバッファはコミットごとにファイルに書き出されますが、ディスクへのフラッシュ操作は実行されません。ただし、ログファイルのフラッシュは、値が2の場合にも1秒に1回行われます。1秒に1回のフラッシュは、プロセススケジューリングの問題により毎秒100%発生するとは限りません。
ACIDに完全に準拠するには、デフォルト値の1が必要です。1以外の値を設定することでパフォーマンスを向上させることができますが、クラッシュすると最大1秒のトランザクションを失う可能性があります。値が0の場合、mysqldプロセスがクラッシュすると、トランザクションの最後の1秒が消去されます。値を2にすると、トランザクションの最後の1秒を消去できるのは、オペレーティングシステムのクラッシュまたは停電のみです。InnoDBのクラッシュリカバリは、値に関係なく機能します。
トランザクションでInnoDBを使用するレプリケーションセットアップで最大限の耐久性と一貫性を得るには、マスターサーバーmy.cnfファイルでinnodb_flush_log_at_trx_commit = 1およびsync_binlog = 1を使用します。
あぶない
多くのオペレーティングシステムと一部のディスクハードウェアは、ディスクへのフラッシュ操作をだます。mysqldに、フラッシュが行われたにもかかわらず、フラッシュが行われたことを伝える場合があります。設定1でもトランザクションの耐久性は保証されず、最悪の場合、停電によってInnoDBデータベースが破損する可能性もあります。SCSIディスクコントローラまたはディスク自体でバッテリバックアップディスクキャッシュを使用すると、ファイルのフラッシュが高速化され、操作が安全になります。Unixコマンドhdparmを使用して、ハードウェアキャッシュでのディスク書き込みのキャッシュを無効にするか、ハードウェアベンダーに固有のその他のコマンドを使用することもできます。
これに基づいて、1以外の値はInnoDBに1秒間のトランザクション、またはトランザクションのコミットに相当するデータを失うリスクがあります。
ドキュメントにはuseも記載されていますsync_binlog=1
。
sync_binlogのMySQLドキュメントによると
1の値が最も安全な選択です。クラッシュが発生した場合、最大で1つのステートメントまたはトランザクションがバイナリログから失われるためです。ただし、これは最も遅い選択でもあります(ディスクにバッテリバックアップキャッシュがあるため、同期が非常に高速になります)。
最も安全な選択は
[mysqld]
innodb_flush_log_at_trx_commit=1
sync_binlog=1
データ損失の可能性(1秒まで)を気にしない場合、報酬(書き込み速度が速い)に値する場合は、自己の責任において0または2を使用できます。
commit
が実際に失われる可能性があるということですか?
innodb_flush_log_at_trx_commit
ような目的で使用します。..
値innodb_flush_log_at_trx_commit
が0の場合、ログバッファは1秒に1回ログファイルに書き込まれ、ログファイルに対してディスクへのフラッシュ操作が実行されますが、トランザクションのコミットでは何も実行されません。
値が1(デフォルト)の場合、トランザクションがコミットされるたびにログバッファーがログファイルに書き込まれ、ログファイルに対してディスクへのフラッシュ操作が実行されます。
値が2の場合、ログバッファはコミットごとにファイルに書き出されますが、ディスクへのフラッシュ操作は実行されません。ただし、ログファイルのフラッシュは、値が2の場合にも1秒に1回行われます。1秒に1回のフラッシュは、プロセススケジューリングの問題により毎秒100%発生するとは限りません。
ACIDに完全に準拠するには、デフォルト値の1が必要です。1以外の値を設定することでパフォーマンスを向上させることができますが、クラッシュすると最大1秒のトランザクションを失う可能性があります。値が0の場合、mysqldプロセスがクラッシュすると、トランザクションの最後の1秒が消去されます。値を2にすると、トランザクションの最後の1秒を消去できるのは、オペレーティングシステムのクラッシュまたは停電のみです。InnoDBのクラッシュリカバリは、値に関係なく機能します。
私の意見ではinnodb_flush_log_at_trx_commit
、2を使用することは問題ではありませんが、1を使用することが最も安全です。
私の意見は他とは異なります。innodb_flush_log_at_trx_commit = 0次の場合:機密データがないのは開発コンピューターまたはホームミニデータベースです。
innodb_flush_log_at_trx_commit = 2の場合:ブログ/統計/ eコマース(1日に最大100倍のショップがある)など。
innodb_flush_log_at_trx_commit = 1の場合:顧客が多い場合、または銀行などの金銭取引を処理する必要がある場合。今回は、速度と安全性を確保するために、データフローを複数のサーバーに分割する必要があります。
書き込み速度が最大で75倍速く、ハードウェアに障害が発生した場合にのみ失敗するため、2をお勧めします。
とにかく、より多くの書き込み速度または最大1秒の情報が必要なものを知っている必要がありますか?
75x faster write speed and it fails ONLY if hardware fails.
UPDATE
with innodb_flush_log_at_trx_commit = 1
:179秒。ありinnodb_flush_log_at_trx_commit = 2
:1.12秒。私の場合、書き込み速度は160倍高速です。
crash
私は答えようとしています、何の目的ですか innodb_flush_log_at_trx_commit?
InnoDBはほとんどの操作をメモリで実行します(InnoDB Buffer Pool
)。変更されたデータはInnoDB transaction log file
すべて、永続ストレージ(ハードディスク)に書き込まれ、フラッシュ(書き込み)されます。
データの安全性のために(Durability from ACID
)、InnoDBは各トランザクションの変更されたデータを永続的なストレージに保存する必要があります。同時に、各トランザクションのディスクへのコミットはコストのかかるプロセスです。
ディスクI / Oはブロッキングプロセスであり、非常に低速です。低速のディスクであり、さらにInnoDB transaction per seconds
(ディスクスループット)の数が減少します。
InnoDBは、innodb_flush_log_at_trx_commit
このフラッシュ操作の頻度を制御する変数を提供します。値に基づいて、InnoDBフラッシュ操作の動作は異なります。
(すでに他の回答で説明されています)
0-1秒ごとにログファイルに書き込み、ディスクにフラッシュします(パフォーマンス向上のため、データはログファイルに書き込まれないバッファプールにあります)。1-トランザクションのコミット時にディスクにフラッシュ-デフォルト(データの安全性-ACID準拠)2-すべてのトランザクションのログファイルに書き込み、毎秒ディスクにフラッシュ (パフォーマンス向上のため)
アプリケーション要件(Performance Vs data safety
)に応じて、この変数を設定できます。0と2の違い-両方ともパフォーマンスが向上します。値2はデータをトランザクションファイルに保存し、クラッシュまたは障害の場合に回復可能ですが、0では回復できません。
多くの場合、ディスクへのフラッシュとは、データがInnoDB buffer pool (memory) to Operating systems cache
実際にストレージディスク(永続ストレージ)に書き込まれないことを意味します。障害が発生した場合、最悪の場合、最大1秒間データを失う可能性があります)
パフォーマンスの向上は環境によって異なり、ベンチマークと特定が可能です。レプリケーション環境では、データの安全性と一貫性のために、とを設定innodb_flush_log_trx_commit = 1
しsync_binlog=1
ます。
パフォーマンスは、アプリケーションの主な目的であるならば、InnoDBは紅潮ログの周波数を制御する変数を提供- innodb_flush_log_at_timeout
-あなたからフラッシング周波数範囲のログを設定することができますされ1 to 2700 seconds
、デフォルトでは1です。
フラッシュ間隔を最大N秒まで増やすと、データの安全性が最大N秒まで低下し、パフォーマンスが向上することに注意してください。たとえば、5秒ごとにフラッシュが発生するように設定した場合、スループットの向上は非常に高くなりますが、電源障害やシステムクラッシュが発生した場合、5秒分のデータが失われます。
この記事では、InnoDBのフラッシュとトランザクションのコミット操作について説明します。
aws rdsでモード2を実行した後に変更できます。
レプリケーションマルチazがある場合など、場合によっては変更不可:
ハードウェアに障害が発生した場合、すべてのデータを失う可能性があるため、心配なしにparam = 2を使用します。とにかく、2つのdbサーバー間で機密データ(注文、仮想通貨、...)と通常のデータ(統計、カート、...)を分割し、それらを安全かつ高速に保つことができます。データベース間のトランザクションには、http://dev.mysql.com/doc/refman/5.7/en/xa.htmlを使用できます