MySQLは8.0.19を使っています。
LSN
LSNとは Log Sequence Number
の略で、単調増加する値で、redoログに書き込まれたバイト数分だけLSNが増えます。
MySQLでは SHOW ENGINE INNODB STATUS
でLSNを確認できます。
--- LOG --- Log sequence number 137326682480 Log buffer assigned up to 137326682480 Log buffer completed up to 137326682480 Log written up to 137326682480 Log flushed up to 137326682480 Added dirty pages up to 137326682480 Pages flushed up to 137326682480 Last checkpoint at 137326682480 13 log i/o's done, 0.00 log i/o's/second
これらの値は、下記で定義されています。
INSERTするときのLSNが増える様子を示します。
SQL | LSN | comments |
---|---|---|
--- LOG --- Log sequence number 137326682480 Log buffer assigned up to 137326682480 Log buffer completed up to 137326682480 Log written up to 137326682480 Log flushed up to 137326682480 Added dirty pages up to 137326682480 Pages flushed up to 137326682480 Last checkpoint at 137326682480 13 log i/o's done, 0.00 log i/o's/second |
||
BEGIN; | --- LOG --- Log sequence number 137326682480 Log buffer assigned up to 137326682480 Log buffer completed up to 137326682480 Log written up to 137326682480 Log flushed up to 137326682480 Added dirty pages up to 137326682480 Pages flushed up to 137326682480 Last checkpoint at 137326682480 13 log i/o's done, 0.00 log i/o's/second |
BEGINではLSNは増えない |
INSERT INTO innodb_auto_increment_small VALUES(); | --- LOG --- Log sequence number 137326682671 Log buffer assigned up to 137326682671 Log buffer completed up to 137326682671 Log written up to 137326682671 Log flushed up to 137326682671 Added dirty pages up to 137326682671 Pages flushed up to 137326682671 Last checkpoint at 137326682671 17 log i/o's done, 0.36 log i/o's/second |
|
COMMIT; | --- LOG --- Log sequence number 137326682878 Log buffer assigned up to 137326682878 Log buffer completed up to 137326682878 Log written up to 137326682878 Log flushed up to 137326682878 Added dirty pages up to 137326682878 Pages flushed up to 137326682878 Last checkpoint at 137326682878 19 log i/o's done, 0.13 log i/o's/second |
トランザクション中でもLSNは増加します。
このあたりはredoログの実装周りを見ればよいかなと思います。
MTR
ごく僅かな一連のデータベージへの変更を記録したもの。
redoログは512バイトのブロックの連続で、個々のMTRはブロックをまたいで記録されることもある。
(詳解 MySQL5.7 p 126)
AuroraのLSN関連の概念
Name | Full Name | description |
---|---|---|
VCL | Volume Complete LSN | すべてのログレコードの可用性を保証できる一番大きいLSN |
SCL | Segment Complete LSN | セグメントの中の最大のLSN、セグメントの穴を探すのに使われる |
PGCL | Protection Group Complete LSN | PG内の最大のLSN |
CPLs | Consistency Point LSNs | 一つのMTRのなかの最後のログレコードのLSN |
VDL | Volume Durable LSN | VCLより小さいが最も大きいCPL、MTRが完了したことを示している |
PGMRPL | Protection Group Min Read Point LSN | データ読み込済みのPGごとの最小のLSN |
ストレージの一貫性のポイントの例
書き込み、Commitをする場合
最後は、最新のVDLがトランザクションのコミットLSN以上になったのでクライアントにackを送る。
読み込み
read replica
Recovery