REDOログ(問題、修正予定)

REDOログ(物理ログ)

InnoDBストレージエンジンは、ページ単位でストレージスペースを管理します。追加、削除、変更、および取得の操作は、ページのデータをメモリにロードし、操作を実行してから、データをハードディスクにフラッシュバックすることです。

その後、問題が発生します。100元をZhang Sanに転送したい場合、トランザクションは送信されました。現時点では、InnoDBがデータをメモリにロードしています。現時点では、データをハードディスクにフラッシュする時間がありませんでした。突然の電源障害が発生し、データベースが壊れました。再起動後、送金がうまくいかなかったのですが、恥ずかしくないですか?

解決策は明らかです。ハードディスクがメモリに読み込まれた後、一連の操作を実行します。操作は以前と同じように激しくなっています。ハードディスクに更新される前に、最初に記録してください。私のレコードの量は、XXXの位置で100減少します。 3つのレコードの量に100を追加し、追加、削除、変更、およびチェックして、ハードディスクにフラッシュします。ハードディスクがフラッシュされていない場合、再起動後、前のレコードが最初にロードされ、次にデータが返されます。

このレコードは、REDOログまたはREDOログと呼ばれます。彼の目的は、コミットされたトランザクションのデータ変更を永続的にすることです。彼が再起動しても、データを回復できます。

ログバッファ

ディスクの速度が遅すぎるという問題を解決するために、REDOログをディスクに直接書き込むことはできません。最初に、彼がデータを書き込むための大きな連続メモリスペースを置きます。この大容量のメモリは、ログバッファまたはログバッファと呼ばれます。適切なタイミングになったら、ハードドライブを再度フラッシュします。それが適切な場合については、この次の章で述べています。

show VARIABLES like 'innodb_log_buffer_size'コマンド使用して現在のログキャッシュサイズ確認できます下の図は、オンラインサイズを示しています。

REDOログのタイミング

REDOログは常に増加しており、メモリ領域が限られているため、データを常にキャッシュに保持することはできないため、ハードディスクに更新する必要があります。 

いつハードディスクに更新されますか?

  •  ログバッファに十分なスペースがありません。指定されたバッファーメモリサイズがあり、MySQLはログボリュームが全容量の約半分を占めていると考えているため、これらのログをディスクに更新する必要があります。 
  • トランザクションがコミットされたとき。REDOログの目的は、更新されていないレコードをディスクに保存して、損失を防ぐことです。データが送信された場合、データをディスクに送信できませんが、耐久性を確保するために、これらのページをやり直す必要がありますログはディスクにフラッシュされます。 
  • 異なるバックグラウンドスレッドの更新バックグラウンドにはスレッドがあり、ログバッファ内のREDOログを毎秒ハードディスクに更新します。
  •  次のセクションのチェックポイント

REDOログファイルグループ

show variables like 'datadir'次の図に示すように、コマンドを使用して関連するディレクトリ見つけることができます。その下には、ib_logfile0とib_logfile1の2つのファイルがあります。

 

 

バッファーログバッファーのREDOログをこれら2つのファイルに更新します。書き込み方法は循環的に書き込まれます。最初にib_logfile0を書き込み、次にib_logfile1を書き込み、ib_logfile1がいっぱいになるまで待ってから、ib_logfile0を書き込みます。ib_logfile1がいっぱいの場合は、ib_logfile0を書き込んでください。ib_logfile0の内容が上書きされて失われていませんか?これがチェックポイントの仕事です。

チェックポイント

REDOログは、システムクラッシュ後にダーティページを復元するためのものです。ダーティページをディスクにフラッシュできる場合は、リタイアすることができ、上書きしても問題ありません。

 紛争のチュートリアル 

システム操作の開始から、ページは継続的に変更され、REDOログが継続的に生成されます。REDOログは絶えず増加しており、MySQLはその名前、Log Sequence Number、または略してlsnを採用しています。彼の初期値は8704で、現在生成されているREDOログの数を記録するために使用されます。

 REDOログは最初にログバッファーに書き込まれ、次にディスク上のREDOログファイルにフラッシュされます。MySQLでは、flush_to_disk_lsnという名前を付けていました。キャッシュ領域のダーティページデータがディスクにフラッシュされる量を示すために使用されます。彼の初期値はlsnと同じで、後でギャップが生じます。

 チェックポイントを実行するには2つのステップがあります 

  • 現在のシステムで上書きできるREDOログに対応する最大lsnを計算します。REDOログは上書きできます。これは、それに対応するダーティ・ページがディスクにフラッシュされることを意味します。現在のシステムで変更されたoldest_modificationを最も早く計算する限り、システムのlsnがノードのoldest_modification値よりも小さい限り、ディスクのREDOログは覆われています。
  •  lsnの処理中の一部のデータの統計。

著者:妹学習のJava
リンクします。https://juejin.im/post/5dfc846051882512327a63b6
出典:ナゲッツの
著作権は著者が保有。営利目的の複製については、作者に連絡して承認を得てください。非営利目的の複製については、出典を明記してください。

おすすめ

転載: www.cnblogs.com/cjjjj/p/12749309.html