Mysql的LSN是什么?

2024-10-09 12:02:56 浏览数 (3)

LSN的含义

​ LSN全称为 Log Sequence Number,即日志序列号。它是一个不断递增的数字,用来标识事务日志中的每个操作或事件。LSN是一个64位的数字,每一个LSN值都是唯一的,并且随时间线性增加。 ​ 通过SHOW ENGINE INNODB STATUS; 可以查看LSN

image.pngimage.png

LSN的运作机制

日志写入

当事务修改数据时,修改操作会首先记录在redo log中,并为每个日志记录分配一个LSN。然后这些修改操作才会应用到数据页(page)上。数据页上的LSN表示该页的最新修改。

检查点(Checkpoint)

检查点将内存中的所有脏页刷新到磁盘,并更新检查点LSN。这个LSN表示所有数据页的状态都一致,且在此LSN之前的所有日志记录都已经应用到数据页中,可以认为是已经完成了持久化。

崩溃恢复

在崩溃恢复过程中,InnoDB从检查点LSN开始扫描redo log,并重做此LSN之后的所有日志记录。这样可以确保所有修改都被应用到数据页中,恢复数据库到崩溃前的一致状态。

LSN的作用

  1. 日志记录
    • LSN标识每个事务日志记录的位置。每次InnoDB写入日志文件(redo log)时,都会分配一个新的LSN。
    • 通过LSN,InnoDB可以确定日志记录的顺序和位置,从而可以精确地进行日志恢复。
  2. 崩溃恢复
    • 如果MySQL服务器崩溃,InnoDB使用LSN来确定从哪里开始重做(redo)操作。它会从最后一个检查点(checkpoint)的LSN开始,重做所有之后的日志记录,以恢复数据库到一致状态。
  3. 检查点(Checkpoint)
    • 检查点是InnoDB的一种机制,用于减少崩溃恢复时间。在创建检查点时,InnoDB会将内存中的脏页(被修改但尚未写入磁盘的页面)写入磁盘,并更新检查点的LSN。
    • 这个LSN表示此检查点时数据库的状态。如果崩溃发生,InnoDB只需要重做这个LSN之后的日志记录。
  4. 数据文件
    • LSN也会被存储在数据文件中,以跟踪数据文件的最新状态。每个数据页中都有一个LSN,表示该页最后一次被修改时的日志序列号。

0 人点赞