mysql dba系统学习(10)innodb引擎的redo log日志的原理

简介:
+关注继续查看

在InnoDB中,bufferpool里面的dirtypage一方面可以加快数据处理速度,同时也会造成数据的不一致(RAMvsDISK)。本文介绍了dirtypage是如何产生,以及InnoDB如何利用redolog如何消除dirtypage产生的数据不一致。

  1. 当事务(Transaction)需要修改某条记录(row)时,InnoDB需要将该数据所在的page从disk读到bufferpool中,事务提交后,InnoDB修改page中的记录(row)。这时bufferpool中的page就已经和disk中的不一样了,我们称bufferpool中的page为dirtypage。Dirtypage等待flush到disk上。

    000538447.jpg

  2. dirtypage既然是在Bufferpool中,那么如果系统突然断电Dirtypage中的数据修改是否会丢失?这个担心是很有必要的,例如如果一个用户完成一个操作(数据库完成了一个事务,page已经在bufferpool中修改,但dirtypage尚未flush),这时系统断电,bufferpool数据全部消失。那么,这个用户完成的操作(导致的数据库修改)是否会丢失呢?答案是不会(innodb_flush_log_at_trx_commit=1)。这就是redolog要做的事情,在disk上记录更新。

  3. redolog在每次事务commit的时候,就立刻将事务更改操作记录到redolog。所以即使bufferpool中的dirtypage在断电时丢失,InnoDB在启动时,仍然会根据redolog中的记录完成数据恢复。

  4. redolog的另一个作用是,通过延迟dirtypage的flush最小化磁盘的randomwrites。(redolog会合并一段时间内TRX对某个page的修改)

    000723674.jpg

  5. 正常情况下,dirtypage什么时候flush到disk上?
    1).redolog是一个环(ring)结构,当redo空间占满时,将会将部分dirtypageflush到disk上,然后释放部分redolog。这种情况可以通过Innodb_log_wait(SHOWGLOBALSTATUS)观察,情况发生该计数器会自增一次。
    2).当需要在Bufferpool分配一个page,但是已经满了,并且所有的page都是dirty的(否则可以释放不dirty的page),通常是不会发生的。这时候必须flushdirtypagestodisk。这种情况将会记录到Innodb_buffer_pool_wait_free中。一般地,可以可以通过启动参数innodb_max_dirty_pages_pct控制这种情况,当bufferpool中的dirtypage到达这个比例的时候,将会强制设定一个checkpoint,并把dirtypageflush到disk中。
    3).检测到系统空闲的时候,会flush,每次64pages。

  6. 涉及的InnoDB配置参数:innodb_flush_log_at_trx_commit、innodb_max_dirty_pages_pct;状态参数:Innodb_log_wait、Innodb_buffer_pool_wait_free。


本文转自陈仲阳0 51CTO博客,原文链接:http://blog.51cto.com/wolfword/1288383
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
关系型数据库 MySQL 程序员
卷?阿里DBA首次公开MySQL调优笔记,竟让GitHub的程序员集体叫好
对于工作了两三年的技术人员来说,在实践上已经有了比较多的积累,解决过很多问题——可能通过sys schema查询事务锁等待解决了系统的并发问题;通过设计读写分离架构扩展了应用的读性能线性扩展问题 但是作为求知欲强的技术人员,我们急切地希望知其所以然,了解MySQL到底是怎么设计的,以及为什么这样设计,读写分离架构适应的场景有哪些?什么时候建议用分库分表?等等。
27 0
|
2月前
|
SQL 运维 NoSQL
阿里大牛撰写"星耀级"MySQL DBA工作笔记!颠覆我对数据库的认知
MySQL是开源数据库方向的典型代表,它拥有成熟的生态体系,同时在可靠性、性能、易用性方面表现出色,它的发展历程见证了互联网的兴衰与成长。 在 DeveloperWeek 上曾发起一个调查,超过 3/5 的受访者使用 SQL,其中MySQL 以 38.9% 的使用率高居榜首,其后依次是 MongoDB(24.6%)、PostgreSQL(17.4%)、Redis(8.4%)和 Cassandra(3.0%)。毫无疑问,以MySQL为主的开源技术生态正变得越来越流行。同样的,对我们掌握MySQL也迫在眉睫。那么,接下来,就让小轩带领大家来深入了解MySQL吧!
|
3月前
|
存储 人工智能 缓存
ChatGPT会取代MySQL DBA吗?(译自Percona,文末投票)
ChatGPT是目前科技界最热门的话题,有人甚至说ChatGPT已经通过了谷歌的3级编程面试。我想知道,这是否意味着ChatGPT也准备好取代MySQL DBA?答案是否定的,让我来告诉你为什么。
|
4月前
|
SQL 关系型数据库 MySQL
一个奇怪的MySQL慢查询,打懵了不懂业务的DBA!
最近,开发人员需要定期的删除表里一定时间以前的数据,SQL如下: mysql > delete from testtable WHERE biz_date <= '2017-08-21 00:00:00' AND status = 2 limit 500\G 前段时间在优化的时候,我们已经在相应的查询条件上加上了索引,如下: KEY `idx_bizdate_st` (`biz_date`,`status`) 但是实际执行的SQL依然非常慢,为什么呢,我们来一步步分析验证下。
|
9月前
|
SQL 存储 运维
FAQ系列 | MySQL DBA修炼秘籍
FAQ系列 | MySQL DBA修炼秘籍
|
SQL 缓存 NoSQL
MySQL DBA如何"土土"地利用源码解决没有遇到过的错误?(1615错误)
MySQL DBA如何"土土"地利用源码解决没有遇到过的错误?(1615错误)
319 0
|
SQL 存储 运维
FAQ系列 | MySQL DBA修炼秘籍
FAQ系列 | MySQL DBA修炼秘籍
|
SQL 架构师 关系型数据库
一个奇怪的MySQL慢查询,打懵了一群不懂业务的DBA!
表上的字段既然都有索引,那么按照之前的文章分析,是两个字段都可以走上索引的。既然能够利用索引,表的总大小也就是200M左右,那么为什么形成了慢查呢?我们查看执行计划,去掉limit 后,发现他选择了走全表扫描。
|
SQL 关系型数据库 MySQL
DBA大牛告诉你,如何让MySQL语句执行加速?
DBA大牛告诉你,如何让MySQL语句执行加速?
|
监控 算法 关系型数据库
DBA很忙—MySQL的性能优化及自动化运维实践
作者:王辰 来自:高效运维(ID:greatops) DBA的日常工作 首先,我们来看看DBA的具体工作,我觉得 DBA 真的很忙:备份和恢复、监控状态、集群搭建与扩容、数据迁移和高可用,这是我们 DBA 的功能。
4968 0
推荐文章
更多