IT职场笔记

这篇具有很好参考价值的文章主要介绍了IT职场笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

InnoDB引擎之flush脏页

利用 WAL 技术,数据库将随机写转换成了顺序写,大大提升了数据库的性能,由此也带来了内存脏页的问题。

 脏页会被后台线程自动 flush,也会由于数据页淘汰而触发 flush,而刷脏页的过程由于会占用资源,可能会让你的更新和查询语句的响应时间长一些。

一、flush 脏页

当内存数据页跟磁盘数据页内容不一致的时候,我们成这个内存页为“脏页”;内存数据写入磁盘后,内存和磁盘上的数据页内容就一致了,称为“干净页”。

InnoDB引擎以页作为磁盘和内存之间交互的基本单位,数据库 I/O 操作的最小单位是页。也就是说,在数据库中,不论读一行,还是读多行,都是将这些行所在的页进行加载。

IT职场笔记,笔记

记录是按照行来存储的,但是数据库的读取并不以行为单位,否则一次读取(也就是一次 I/O 操作)只能处理一行数据,效率会非常低。 

Buffer Pool 中存的就是一页一页的数据,当我们要查询的数据不在 Buffer Pool 中时,InnoDB 会将记录所在的页整个加载到 Buffer Pool 中去。

同样的,将 Buffer Pool 中的脏页刷入磁盘时,也是按照页为单位刷入磁盘的。

  

1、Free List

你从磁盘中读取一个数据页,会先从Free List中找出一个空闲缓存页的描述信息,然后将你读出的数据页中加载进缓存页中。同时将缓存页的描述信息从Free List中剔除,此外该描述信息块还会被维护进LRU链表中。

数据页被加载进Buffer Pool后你就可以对其进行变更操作了。

3、Flush List

如果我们修改了Buffer Pool中某个缓冲页的数据,那么它就与磁盘上的页不一致了,这样的缓冲页也被称之为脏页(dirty page)。

为了性能问题,我们每次修改缓冲页后,并不着急立刻把修改刷新到磁盘上,而是在未来的某个时间点进行刷新操作。 

如果有了修复发生,不是立刻刷新,那之后再刷新的时,我们怎么知道Buffer Pool中哪些页是脏页,哪些页从来没有被修改过呢?

创建一个存储脏页的 Flush list,凡是被修改过的缓冲页对应的控制块都会作为节点加入到这个链表中。

4、LRU List

除了以上,Buffer Pool还有另外一种LRU List,整体结构如下:

IT职场笔记,笔记

在BufferPool中,内存管理如下:

  • 需要找 free 空闲数据块:free list
  • 需要找冷热访问的数据块:lru list
  • 需要知道哪些数据块是脏的:flush list

二、刷新方式有哪几种

1、从flush链表中刷新一部分页面到磁盘

后台线程会根据当时系统的繁忙程度确定刷新速率,定时从flush链表中刷新一部分页面到磁盘,即:BUF_FLUSH_LIST

 有时后台线程刷新脏页的进度比较慢,导致用户准备加载一个磁盘页到Buffer Pool中时没有可用的缓冲页。此时,就会尝试查看LRU链表尾部,看是否存在可以直接释放掉的未修改缓冲页。

如果没有,则不得不将LRU链表尾部的一个脏页同步刷新到磁盘(与磁盘交互是很慢的,这会降低处理用户请求的速度),即:BUF_FLUSH_SINGLE_PAGE

2、从LRU链表的冷数据中刷新一部分页面到磁盘,即:BUF_FLUSH_LRU

后台线程会定时从LRU链表的尾部开始扫描一些页面,扫描的页面数量可以通过系统变量innodb_lru_scan_depth来指定,如果在LRU链表中发现脏页,则把它们刷新到磁盘。

控制块里会存储该缓冲页是否被修改的信息,所以在扫描LRU链表时,可以很轻松地获取到某个缓冲页是否是脏页的信息。

三、flush性能问题

flush脏页虽然是常态,但是出现以下这两种情况,都是会明显影响性能的:

  1. 一个查询要淘汰的脏页个数太多,会导致查询的响应时间明显变长;
  2. 日志写满,更新全部堵住,写性能跌为 0,这种情况对敏感业务来说,是不能接受的。

InnoDB 会在后台刷脏页,而刷脏页的过程是要将内存页写入磁盘。所以,无论是你的查询语句在需要内存的时候可能要求淘汰一个脏页,还是由于刷脏页的逻辑会占用 IO 资源并可能影响到了你的更新语句,都可能是造成你从业务端感知到 MySQL“抖”了一下的原因。

要尽量避免这种情况,你就要合理地设置 innodb_io_capacity 的值,并且平时要多关注脏页比例,不要让它经常接近 75%。 

一旦一个查询请求需要在执行过程中先 flush 掉一个脏页时,这个查询就可能要比平时慢了。

而 MySQL 中的一个机制,可能让你的查询会更慢:在准备刷一个脏页的时候,如果这个数据页旁边的数据页刚好是脏页,就会把这个“邻居”也带着一起刷掉;而且这个把“邻居”拖下水的逻辑还可以继续蔓延,也就是对于每个邻居数据页,如果跟它相邻的数据页也还是脏页的话,也会被放到一起刷。

在 InnoDB 中,innodb_flush_neighbors 参数就是用来控制这个行为的,值为 1 的时候会有上述的“连坐”机制,值为 0 时表示不找邻居,自己刷自己的。

找“邻居”这个优化在机械硬盘时代是很有意义的,可以减少很多随机 IO。机械硬盘的随机 IOPS 一般只有几百,相同的逻辑操作减少随机 IO 就意味着系统性能的大幅度提升。

而如果使用的是 SSD 这类 IOPS 比较高的设备的话,建议你把 innodb_flush_neighbors 的值设置成 0。因为这时候 IOPS 往往不是瓶颈,而“只刷自己”,就能更快地执行完必要的刷脏页操作,减少 SQL 语句响应时间。

在 MySQL 8.0 中,innodb_flush_neighbors 参数的默认值已经是 0 了。 文章来源地址https://www.toymoban.com/news/detail-625555.html

到了这里,关于IT职场笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 职场新人必备的职场技巧

    尊敬的职场新人, 恭喜你踏入了职业生涯的大门!职场对于新人来说确实充满了新的挑战和机遇,但是不要担心,因为适应职场、获得成长并提升自己是可以学习和掌握的技能。在这篇文章中,我将和你分享一些我认为必备的职场技巧,帮助你在职业道路上取得成功。 建立

    2024年02月05日
    浏览(30)
  • DevOps笔记-05:IT行业中BA、SM、PO、PM、PD、Dev、Ops、QA都是什么角色

        (1)定义 BA是Business Analys缩写,即业务需求分析师。在互联网公司里,BA的角色就是产品经(PM),只是BA要承接某个很具体的业务或者领域,比如银行也有自己的IT部门,银行IT里的产品经理可能要对接专门的业务组,比如网银业务,信用卡业务,理财产品业务,基金代理

    2024年02月07日
    浏览(30)
  • [职场] 会计学专业学什么 #其他#知识分享#职场发展

    会计学专业学什么 会计学专业属于工商管理学科下的一个二级学科,本专业培养具备财务、管理、经济、法律等方面的知识和能力,具有分析和解决财务、金融问题的基本能力,能在企、事业单位及政府部门从事会计实务以及教学、科研方面工作的工商管理学科高级专门人才

    2024年02月20日
    浏览(40)
  • 职场成功的关键因素:如何成为一位优秀的职场人

    在竞争激烈的职场环境中,如何脱颖而出,成为一位优秀的职场人,成为了许多职场人士关注的焦点。本文将探讨职场成功的关键因素,帮助您在职场中取得更好的发展。 一、专业技能 专业技能是职场成功的基础。具备扎实的专业技能,才能在工作中游刃有余,赢得同事和

    2024年04月08日
    浏览(35)
  • 绩效考核,职场人的痛!

    绩效,已经成为职场人不能跳过的话题。 绩效作为提高员工和企业效率的有效手段,已经被越来越公司采用,现在,公司里几乎任何一个岗位都会被考核,特别是互联网公司。今天我们以产品经理为例,看看这个岗位的绩效是如何实现考核的。 相信即将步入或身在职场的产

    2024年02月13日
    浏览(36)
  • 职场这四年

    每每打开电脑,翻开工作记事本时,不经意间总能看到新招的几位应届毕业生谦逊而低眉的身影。有个女孩走过来替我倒水,虽然我不太习惯,但还是轻轻地说声谢谢。在一恍瞬间,我好像回到了2009年,那是我参加工作的第一年,时年21岁。 刚刚离开学校的时候,我什么都不

    2024年02月08日
    浏览(70)
  • 职场重要技能-解决问题

    今天咱们唠一个职场技能- 解决问题 。许多所谓的前辈指导别人职场技能时,总是把:向上管理、PPT汇报等,放在第一位,对此笔者不以为然。 毕竟大部人所在的企业是中小企业,中小企业没有那么多的流程管理和职级,没有那么多的汇报。其次,向上管理等技能知识“术”

    2024年02月19日
    浏览(18)
  • 职场速成记

    欢迎加入职场!你将面临新的挑战和机遇。为了帮助你更好地适应职场环境并取得成功,我们编写了以下备忘录,希望对你的职业发展有所帮助。 第一部分:职业素养与态度 保持积极的心态:职场中会遇到各种挑战和压力,要以积极的心态对待,抱有学习和成长的态度。 建

    2024年02月04日
    浏览(22)
  • Git入门(职场必备工具)

    目录 一、git在职场中的重要性 1.1git是什么? 1.2什么是版本控制 1.3学习这个工具的作用和目的 二、Git开发必备技能及其应用场景 2.1 如何用Git对一个目录进行版本控制流程? 三、Git 如何上传和提取代码 3.1 克隆远端库到本地库 3.2 将本地库推送到远端库 ​四、使用git进行协

    2024年02月11日
    浏览(28)
  • 职场工作的前提

    Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive. happy for hardess to solve denpendies. 职场工作 需求: 1.职场工作 1、目标明确,不断更新。 2、做对的事情,而不是把事情做对。 3、跟对的人。 3、提升个人

    2024年02月08日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包