Mysql 的 LSN 是什么?
LSN 的含义 LSN 全称为 Log Sequence Number,即日志序列号。它是一个不断递增的数字,用来标识事务日志中的每个操作或事件。LSN 是一个 64 位的数字,每一个 LSN 值都是唯一的,并且随时间线性增加。 通过 SHOW ENGINE INNODB STATUS; 可以查看 LSN
LSN 的运作机制日志写入当事务修改数据时,修改操作会首先记录在 redo log 中,并为每个日志记录分配一个 LSN。然后这些修改操作才会应用到数据页(page)上。数据页上的 LSN 表示该页的最新修改。检查点(Checkpoint)检查点将内存中的所有脏页刷新到磁盘,并更新检查点 LSN。这个 LSN 表示所有数据页的状态都一致,且在此 LSN 之前的所有日志记录都已经应用到数据页中,可以认为是已经完成了持久化。崩溃恢复在崩溃恢复过程中,InnoDB 从检查点 LSN 开始扫描 redo log,并重做此 LSN 之后的所有日志记录。这样可以确保所有修改都被应用到数据页中,恢复数据库到崩溃前的一致状态。
LSN 的作用
日志记录:
LSN 标识每个事务日志记录的位置。每次 InnoDB 写入日志文件(redo log)时,都会分配一个新的 LSN。通过 LSN,InnoDB 可以确定日志记录的顺序和位置,从而可以精确地进行日志恢复。
崩溃恢复:
如果 MySQL 服务器崩溃,InnoDB 使用 LSN 来确定从哪里开始重做(redo)操作。它会从最后一个检查点(checkpoint)的 LSN 开始,重做所有之后的日志记录,以恢复数据库到一致状态。
检查点(Checkpoint):
检查点是 InnoDB 的一种机制,用于减少崩溃恢复时间。在创建检查点时,InnoDB 会将内存中的脏页(被修改但尚未写入磁盘的页面)写入磁盘,并更新检查点的 LSN。这个 LSN 表示此检查点时数据库的状态。如果崩溃发生,InnoDB 只需要重做这个 LSN 之后的日志记录。
数据文件:
LSN 也会被存储在数据文件中,以跟踪数据文件的最新状态。每个数据页中都有一个 LSN,表示该页最后一次被修改时的日志序列号。
作为程序员,持续学习和充电非常重要,作为开发者,我们需要保持好奇心和学习热情,不断探索新的技术,只有这样,我们才能在这个快速发展的时代中立于不败之地。低代码也是一个值得我们深入探索的领域,让我们拭目以待,它将给前端世界带来怎样的变革,推荐一个低代码工具。
开发语言:Java/.net
这是一个基于 Flowable 引擎(支持 java、.NET),已支持 MySQL、SqlServer、Oracle、PostgreSQL、DM(达梦)、 KingbaseES(人大金仓)6 个数据库,支持私有化部署,前后端封装了上千个常用类,方便扩展,框架集成了表单、报表、图表、大屏等各种常用的 Demo 方便直接使用。
至少包含表单建模、流程设计、报表可视化、代码生成器、系统管理、前端 UI 等组件,这种情况下我们避免了重复造轮子,已内置大量的成熟组件,选择合适的组件进行集成或二次开发复杂功能,即可自主开发一个属于自己的应用系统。
评论