INNODB之LSN——日志序列号以及应用

本文介绍了InnoDB引擎中的LSN(日志序列号),它是保证数据一致性的关键。LSN包含数据页版本、日志总量、检查点位置等信息。在MySQL中,LSN用于记录redo log、页面到磁盘的序列位置,并作为检查点的依据。LSN的几个关键参数如Log sequence number、Log flushed up to、Pages flushed up to和Last checkpoint at在数据库操作中扮演重要角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

log sequence number


LSN即日志序列号(log sequence number,在InnoDb引擎中,该序列号占8个字节长度,且会随着日志的写入而逐渐增大。LSN是该引擎中用于解决数据一致性的一个部分。

一.LSN的内容

由于LSN可以获取如下等几个信息:

  • 数据页的版本信息
  • 日志的总量
  • CheckPoint的位置

首先从一个命令引入: show engine innodb status\G,可以得到如下结果:

---
LOG
---
Log sequence number 1030047354
Log flushed up to   1030047354
Pages flushed up to 1030047354
Last checkpoint at  1030047345
#这些参数自上而下的大小关系为>=

对以上几个参数做一个说明:

  • Log sequence number是redo log (in buffer)中的lsn
  • Log flushed up to 是从redo log in buffer 刷新到redo log in file的lsn
  • Pages flushed up to 是表示写入磁盘的dirty page 上的lsn
  • Last checkpoint at 是上一次检查点的lsn

这里要注意:Pages flushed up to与Last checkpoint at不一定一致,首先刷新脏页,就会更新checkpoint,但是通过上述内容,我们发现这里存在9的差值,通过查看源码,原来:

oldest_lsn <= log_sys->last_checkpoint_lsn + SIZE_OF_MLOG_CHECKPOINT 
/** Size of a MLOG_CHECKPOINT record in bytes.
The record consists of a MLOG_CHECKPOINT byte followed by
mach_write_to_8(checkpoint_lsn). */
#define SIZE_OF_MLOG_CHECKPOINT 9

以上参数在源码中体现为:

 fprintf(file,
        "Log sequence number " LSN_PF "\n"
        "Log flushed up to   " LSN_PF "\n"
        "Pages flushed up to " LSN_PF "\n"
        "Last checkpoint at  " LSN_PF "\n",
        log_sys->lsn,
        log_sys->flushed_to_disk_lsn,
        log_buf_pool_get_oldest_modification(),
        log_sys->last_checkpoint_lsn);

二.LSN的应用

LSN的应用总结如下:

  • 充当一个位置标志,用于记录数据在redolog in buffer、redolog in file、page to disk的序列位置
  • 充当Checkout point的序列位置

总结

  • LSN的几个参数的定义
  • LSN在引擎中的应用:每个页都有LSN、重做日志有LSN、检查点也有LSN
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值