REDOログ
効果
こうした取引はメモリバッファプールに(ダーティページ)を提出してきたが、サーバーが突然故障し、データを、InnoDBストレージエンジン、あなたは正確にすべてのデータが、データの永続性を確保するために提出された回復することができ、サーバ障害発生後に再起動する必要があります失われます。
この問題を解決するには、ディスクにフラッシュページを変更することができますが、それは唯一のレコードを変更可能性があるため、必要がリアルタイムで更新された時間を無駄にしないように、と変更されたレコードは、必ずしもリフレッシュするシーケンシャル、ランダムIOが遅いではありません。
録音コミットされたトランザクションは、そのテーブル内のスペースのオフセット量のページの値は、記録されたファイルは、REDOログと呼ばれている番号に更新されている、レコードを変更することができます。、ディスクへのメモリページをリフレッシュたくさん小さいの内容ディスクにフラッシュREDOログと比較すると、そのプロセスはディスクに書き込まシーケンスです。
インデックスの挿入/更新レコードや他の操作よりも多くのログレコードと同様に、このアクションは、ページ分割新しいディレクトリエントリの記録など、他のアクションを、影響実行するために、ページを変更し、データ・ページ上の任意の情報を変更する複数の操作を行いやり直し。
そして、binlogの違い:binlogの記録は公式ページがディスクなしで動作し、ベンの崩壊は、まだバッファプール内のシステムのための次のREDOログのInnoDBエンジンを運行しているすべてのストレージエンジン、ダーティページの回復が含まれています。
ジャーナル
ログフォーマット
-
タイプ:タイプ
- MLOG_1BYTE:1:1バイトは、ページ内のオフセットを示す
redo
ログタイプ。 - MLOG_2BYTE:2
- MLOG_4BYTE:4
- MLOG_8BYTE:8
- MLOG_WRITE_STRING:30
- MLOG_REC_INSERT:9:インサートタイプの使用は、未記録コンパクト行フォーマット(例えば、冗長)の再実行ログを示し
- MLOG_COMP_REC_INSERT:38:インサートを使用してREDOログの種類を示す(例えば、コンパクト/動的/圧縮)の記録ラインの非コンパクトフォーマット中
- MLOG_COMP_REC_DELETE:42:に記録されたコンパクトな形式使用して削除線を示す
redo
ログの種類を - MLOG_COMP_LIST_START_DELETEとMLOG_COMP_LIST_END_DELETE:一括削除、あなたは主にREDOログの数を減らすことができます
- MLOG_1BYTE:1:1バイトは、ページ内のオフセットを示す
-
空間ID:表領域
-
ページ番号:ページ番号
-
データ:(MLOG_COMP_REC_INSERTに例えば)実際のデータ
- n_fileds:現在のレコード内のフィールド数
- n_uniquesは:主キーが主キー番号である場合に一意のフィールドの数は、列を記録決定、二次インデックスは固有の番号+プライマリ・キー列欄、同じ一般的な二次インデックスの数であり、このフィールドに基づいてソートすることができるが挿入され
- field1_len-fieldn_len:いくつかのフィールドによって占められるストレージスペースのサイズ
-
オフセット:レコードをページ上の位置を記録する前に、簡単なレコードリストのページを修正するために、前のレコードのメンテナンスnext_recordプロパティ
- end_seg_len:このフィールドは、ストレージスペースを取る、現在のレコードによって学習することができます
-
LEN:いくつかのタイプMLOG_WRITE_STRING、特定のデータが占めるバイト数であれば
メモリ操作内のREDOログを
ミニ取引
ミニトランザクション(MTR)底ページであるアトミックアクセス手順(例えば、MAX_ROW_ID
生成/挿入インデックスレコード)。トランザクションは複数のMTRを含むことができ、MTRは、REDOログの数が含まれています。
グループ内のログに書き込ま
保証するために、アトミック操作しなければならない設定記録の形式でページ分割が発生した場合、例えば、レコードを挿入するために、アプリケーションログデータシートを伴うやり直し、システムは、ページを変更し、さまざまな統計セクション/エリアを変更、フリーリストやその他の情報、新しいカタログレコードなどの操作または全か無実行の完全な実装。
特殊なログタイプを追加するためのアクションのこのシリーズにログインした後、最後のログ:グループ区分をログMLOG_MULTI_REC_END:31
エンドとして。
アトミック操作は唯一のログレコードがある場合、ログの種類この記事与えるビットが 1に設定され、または他のログのシリーズを制作します。
書き込み処理をREDOログ
MySQLは512バイトのページレコードをREDOログにするには、このページが呼び出されblock
、、およびページ管理情報に保存されている構図、ヘッダとトレーラ。block
log block header
log block trailer
log block body
システムは、最初の要求サーバがログバッファ、二つのトランザクションは、トランザクションT1とT2が交互に行われる一例としての連続REDOログ・バッファ・メモリを開始し、それは、代替的に、ログバッファに格納することができるであろう。彼らはそれぞれが2つのMTR、動作中の各MTRが含まれているが、このMTRの実行が終了するまで、これはすべてのログがMTR生成やり直します、場所は最初のREDOログがあるでしょう、すべてコピーされた一定期間の後に、ログバッファにこれは、ディスクにフラッシュされます。
するためにlog buffer
ログを書き込むと、ブロックは、スペースデブリとすることがないように、InnoDBはグローバル変数提供し、連続的であるbuf_free
開始位置が空いているの背後から、後続書き込まREDOログを示すためには、どの位置でブロックに書き込まなければなりません。
ブラシディスクREDOログ
ブラシは準備ができてパン
ときに変更buffer pool
:ページは、制御ブロックは、制御ブロック記憶2つの変数、フラッシュダーティページリストに挿入されるときoldest_modification
にロードされるbuffer pool
最初の変性MTRの開始に対応するLSN値をnewest_modification
各修飾MTR 端ときに、対応するLSN値、に応じて、制御ブロックoldest_modification
降順ストレージ。
MTRは、制御ブロックの複数ページの複数を変更することができるoldest_modification
/ newest_modification
同じであってもよいです。
ブラシパンタイミング
- 不十分なログバッファ・スペース、空き容量が半分未満であります
- トランザクションがコミットすると、ダーティページのバッファー・プールは、第1のブラシプレートではないかもしれないが、ログバッファは、損失を防ぐために、ディスクを磨く必要があります
- タイミングバックグラウンドスレッドブラシディスク
- ときに優雅なサーバのシャットダウン
- チェックポイントのとき:フラッシュリストアウトダーティページから一括ブラシ:あなたが頻繁にページを変更し、ダーティページブラシことができない場合は、あなたがタイムリーにチェックポイントすることはできません、ダーティページのブラシのフラッシュリストから最も初期の変化のユーザスレッドの同期を指示することができます。プレート、無用REDOログ・対応するダーティページとなるよう、チェックポイントをすることができ
REDOログ・ファイルが保存されています
MySQLデータディレクトリ(内のinnodb_log_group_home_dir
記憶場所が見つかったファイルの名前によって決定されたロググループの形で格納されている)という名前ib_logfile0
... Nファイル、システム・パラメータによって決定されるファイル名の接尾辞のファイル番号がinnodb_log_files_in_group
それぞれ、ファイルの数を決定しますファイルのサイズがinnodb_log_file_size
指定されました。
各ib_logfile
書かれたオーダーサイクルlog buffer
ブロックには、ファイルの現象が上書きされます。
ファイル形式をログに記録
-
2048バイト(4ブロック)の前に:管理情報を格納します
-
ファイルヘッダをログに記録:現在のバージョンで保存されたREDOログ・ファイル、ファイルのLSN値の始まりなど
-
checkpoint1:マーク・ログ・ファイルには、情報をカバーすることができます
- LOG_CHECKPOINT_NO:チェックポイントの頻度、インクリメンタル記録
- LOG_CHECKPOINT_LSN:REDOログ・ファイルLSNの最大値を上書きすることができます
- LOG_CHECKPOINT_OFFSET:オフセットに対応するLSNのログファイル
- LOG_CHECKPOINT_LOG_BUF_SIZE
-
役に立ちません
-
checkpoint2
-
-
次のバイト:ストレージ・ブロックのコンテンツは、再利用されます
いくつかのグローバル変数
-
ログSequeue番号(LSN):やり直しInnoDBのグローバル変数量が書かれていたレコードをログは、ログログバッファ、8704の初期値を書き込むことを含む、ログファイルのオフセットが2048バイトです。
- ログMTRのセットは、+ブロックヘッダをログLSN = 8704 +ログ書き込み量を生成し、ログバッファに追加初めて
- 再びログのセットの生産、同じブロック内で、かつ収容することができますが、あなただけの書き込みログの量を追加する必要があります。
- ターンは、ログのセットを生成するが、大量に取るとき、現在のブロック内の残りの空間は、次のブロックを取るために、受信されなかったLSN = LSN +書き込み量+2ログ・ブロック・ヘッダ+ 2 *ログブロックトレーラーログ;
-
flushed_to_disk_lsn:にフラッシュディスクのグローバル変数のREDOログ・量
-
buf_next_to_write:マーカー持つログバッファグローバル変数には、ブラシディスクのログです
-
innodb_flush_log_at_trx_commit =?ユーザスレッドを提出する際にブラシディスク(1)すべての必要が発生したトランザクション中にREDOログを示し、またはバックグラウンドスレッドの操作(0)または第一のバッファ(2)に書き込まれます。
チェックポイント
いくつかは、それがディスクにフラッシュされているダーティページに該当するかどうか、すなわち、ディスクスペースの量をカバーすることができるかどうかを判断するためにREDOログ
checkpoint_lsn
:システム(ブラシプレートがダーティページされている)、8074の初期値によって覆われていてもよいREDOログの現在の総量を表します。
チェックポイントのステップ:
- REDOログの計算(最小フラッシュリスト対応LSN最大で覆うことができる
oldest_modification
に割り当てられた値のLSNに対応する全てのログが上書きされる前にリストがダーティページをフラッシュされていないため、ブラシプレートに記憶されています、)checkpoint_lsn
。 checkpoint_lsn
オフセット対応のREDOログ・ファイル・グループcheckpoint_offset
とcheckpoint
数(チェックポイント、インクリメントを行う回数の合計)checkpoint_no
ログファイルヘッダにcheckpoint1/2
で
ベンの崩壊の回復
回復が発生したときに、リストをフラッシュベンの崩壊は、ダーティページが変更ディスクに書き込まれていません。
-
ログファイルの比較:出発点決定の回復
checkpoint1
およびcheckpoint2
最大checkpoint_no、及び、対応するからcheckpoint_lsn
(以前に覆われた記述は、ブラシディスクされている、利用可能である)を起動回復 -
エンドポイント決意の回復:各ログファイルの比較
log block header
のLOG_BLOCK_HDR_DATA_LEN
性質、ノートが512でない場合、最後のログファイルを埋めます -
復旧方法
- ハッシュテーブル:計算されたREDOログ
hash(表空间id+页号)
、同じスロット内の値と修復が不要なランダムIOを避けるために、ページのことができるように、生成された時間順にリンクされたリストに基づいて接続されています - ベン崩壊スキップページが復元されています、それはダーティページ、すなわち、プロパティに従って制御FIL_PAGE_LSNファイルヘッダになってブラシ板ブロックされたリスト内のフラッシュダーティページがあるかもしれない
newest_modification
よりも大きいcheckpoint_lsn
、実行する必要がある場合未満newest_modification
でFIL_PAGE_LSN
のREDOログ
- ハッシュテーブル:計算されたREDOログ