当前位置: 首页 > news >正文

云抢购网官方网站北票网站建设

云抢购网官方网站,北票网站建设,律师事务所网站建设重要性,5118为什么要有buffer poll#xff1f; 如果没有buffer poll#xff0c;每次读取数据的时候都是从磁盘上读的#xff0c;这样效率是很差的的。 所以有了提高效率的方式#xff0c;就加上了一个缓存——buffer poll 所以#xff0c;当我们读取数据的时候就有以下的方式 当读…为什么要有buffer poll 如果没有buffer poll每次读取数据的时候都是从磁盘上读的这样效率是很差的的。 所以有了提高效率的方式就加上了一个缓存——buffer poll 所以当我们读取数据的时候就有以下的方式 当读取数据的时候如果buffer poll中有就直接返回给用户如果buffer poll中没有就需要将数据所在的页设置为脏页然后由后台的线程将脏页读取到磁盘上 buffer poll有多大 在MySQL启动的时候会向操作系统申请一片内存为buffer poll默认是128MB。 当然这个配置是可以通过innodb_buffer_poll_size参数设置 buffer poll中的页 InnoDB会把存储的数据划分为一个个页每个页的大小都是16KB而buffer poll中的页就叫做缓存页 什么是脏页、空闲页、干净页 空闲页buffer poll中没有用到的页干净页buffer poll中的页数据和磁盘上的一样脏页buffer poll中的页数据和磁盘上的不一样 如何管理空闲页、干净页、脏页 Free List只管理空闲页LRU List管理干净页和脏页Flush List只管理脏页 Free List管理空闲的页当执行查询操作的时候如果对应的也在buffer poll中就直接返回如果不在buffer poll中但Free List不为空则从磁盘查询对应的数据并且保存到Free List的某个页中然后将这个页从Free List中移除并放入到LRU List中。LRU List管理所有从磁盘读取的页包含了未被修改和已经修改的页并根据LRU算法进行维护和淘汰。Flush List当LRU List中的页被修改后会被标识为脏页并把脏⻚加⼊到Flush List 中在这种情况下数据库会通过刷盘机制把 Flush List中的脏⻚刷回磁盘 Flush List是一个专门用来管理脏页的列表 而LRU List是用来管理buffer poll中页的可用性。Flush List ⽤来管理要被刷回磁盘的⻚⼆者互不影响。 Flush List 中的脏⻚在执⾏了刷盘操作后会将空间还给Free List 内存这么多数据页如何快速找到目标页呢 第一种方式就是遍历链表这显然不可取时间复杂度达到了ON第二种方式就是InnoDB采取的方式用page Hash的方式也就是每当磁盘将数据页加载到内存的时候用数据的页空间ID和页号作为KEY当前页的地址作为VALUE保存起来每次查询时通过key来找到对应的value,从而快速找到对应的目标页。 时间复杂度是O1 脏页什么时候被刷盘呢 首先我们要知道当修改数据的时候先修改的是buffer poll所在的页并标记为脏页但是此时磁盘还是原来的数据。所以在刷盘前会采用WAL技术即先写入日志再写入磁盘。 这样的方式即使MySQL宕机了也可以通过redo log重新恢复数据。 以下是刷盘时机 当redo log满了后会将脏页刷入到磁盘中buffer poll空间不足时会淘汰数据页如果是脏页就会进行刷盘由后台进程在空闲的时候自动进行刷盘 buffer poll是通过什么方式淘汰数据的 buffer poll的大小是有限的难免就有可能buffer poll满了需要淘汰掉一部分数据。而我们当然希望频繁访问的数据在buffer poll淘汰掉哪些不经常访问的数据这就保证了buffer poll可以继续缓存新的数据了。 所以有了LRU算法。 算法思想链表头部的数据是最新被访问的而链表后面的数据是最久未被访问的。那么当空间不足的时候就要淘汰掉哪些最久未被使用的数据了。 所以当我们访问数据的时候有两种结果 如果访问的数据在链表上就将它放到LRU链表的头部如果没有在链表上就需要将页放到链表的头部并且淘汰掉LRU链表最后的节点。 比如下图假设LRU链表长度为5LRU链表从左到右有 1 2 3 4 5的页 如果访问了3号的页就需要将3号放到LRU链表的头部 如果访问的8号的页因为8号页不在buffer poll中所以需要将8号页放到LRU链表的头部并且淘汰掉5号页 但是MySQL没有采用这种方式因为这种方式会带来两个问题 预读失效buffer poll污染 什么是预读失效 预读失效要知道CPU在加载数据的时候是一块一块存储的因为相邻的数据可能会在短时间访问到所以MySQL在加载数据的时候会将它相邻的数据加载进来目的就是为了减少磁盘IO。 但是这些被加载进来的数据是有可能没有被访问的这就导致了预读失效。 如何解决预读失效问题 所以为了解决上面的问题MySQL将LRU算法改进将LRU链表划分为了2个区域一个是young区一个是old区例如下图 划分了2个区域后预读的数据页就会放到old区域不会放到young区域只有真正的被访问的使用会插入到young区域的头部如果预读的页一直没有被访问就会从old区域中移除。 这样就解决了预读失效的问题但是还有一个就是buffer poll污染问题没有被解决。 什么是buffer poll污染 当某个SQL语句需要扫描大量的数据并且buffer poll内存有限的情况下可能会将buffer poll里的所有数据全部替换出去导致大量的热点数据失效了。 当再次被访问的时候就会造成大量的磁盘IO性能下降这就是buffer poll污染。 如何解决buffer poll污染的问题 MySQL为了解决buffer poll污染的问题将old区域添加了一个时间判断 如果访问的时间在第一次访问的时间间隔内那么不会将这个数据页从old区域放到young区域如果不在第一次访问的时间间隔内就会将该数据页从old渔区放到young区域。 这样就解决了buffer poll污染的问题。 参考资料 https://xiaolincoding.com/mysql/buffer_pool/buffer_pool.html#%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E6%9C%89-buffer-poolhttps://blog.csdn.net/error044/article/details/131036148?ops_request_misc%257B%2522request%255Fid%2522%253A%25223ee1266dddf32eb5972cab120fac8f71%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257Drequest_id3ee1266dddf32eb5972cab120fac8f71biz_id0utm_mediumdistribute.pc_search_result.none-task-blog-2blogsobaiduend~default-2-131036148-null-null.nonecaseutm_termbuffer%20pollspm1018.2226.3001.4450
http://www.dnsts.com.cn/news/261675.html

相关文章:

  • 发布网站需要备案吗长治建设工程交易网
  • 微网站建设微网站建设免费空间领取网站
  • 百度在线做网站seo数据是什么意思
  • 贵阳网站设计企业网站收费模板
  • 沈阳的网站制作公司哪家好查询建筑资质的网站
  • 东莞市企业网站制作平台栾城网站制作
  • 企业网站源码系统淘宝联盟手机网站建设
  • 厦门市湖里区建设局网站自发购卡网站在吗做
  • 效果好的网站建做任务领积分兑换别的网站上的会员
  • 网站风格包括哪些外贸那些网站好用
  • 自己怎样注册企业网站郑州it培训机构
  • 网站报价明细wordpress 运行环境
  • 商丘哪里做网站比较好做漫画的网站有哪些
  • 房地产建设项目网站学校网站建设发展概况分析
  • 西安电子科技大学信息化建设处网站招聘网站怎么做介绍
  • 中国建设教育网站官方中文wordpress搭建
  • 房子如何上网站做民宿长沙网站收录
  • 国外做美食视频网站有哪些遂宁市住房与城乡建设厅网站
  • 做商城网站报价怎样办一个网站
  • php网站建设视频教程江苏省建设厅官网
  • 首都农村医学人才培养体系建设与农村医学人才培养的研究与实践 网站公司邮箱一般是什么格式
  • 网站 开发 外包西安知名网站推广
  • 网站建设技术服务方案站外推广营销方案
  • 设计软件网站电商网站模板
  • 网站外围网站怎么做镇江seo网站优化
  • 长沙建网站公司建设银行观澜支行网站
  • 外贸网站公司wordpress 缩略图判断
  • 知乎网站内容建设的逻辑什么是网络社交
  • rp做网站原型要缩小尺寸吗企业安全文化宣传标语
  • 自行建造网站济南哪家公司可以做网站