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

杭州做网站 做小程序网站推广如何做

杭州做网站 做小程序,网站推广如何做,做推广赚钱的网站,广东网站建设的目录标题 为什么要有Buffer Poolbuffer pool有多大buffer pool缓存什么 如何管理Buffer Pool如何管理空闲页如何管理脏页如何提高缓存命中率预读失效buffer pool污染 脏页什么时候会被刷入到磁盘 为什么要有Buffer Pool 虽然说MySQL的数据是存储在磁盘中,但是也不能…

目录标题

  • 为什么要有Buffer Pool
    • buffer pool有多大
    • buffer pool缓存什么
  • 如何管理Buffer Pool
    • 如何管理空闲页
    • 如何管理脏页
    • 如何提高缓存命中率
      • 预读失效
      • buffer pool污染
    • 脏页什么时候会被刷入到磁盘

为什么要有Buffer Pool

虽然说MySQL的数据是存储在磁盘中,但是也不能每次都从磁盘里面读取数据,这样性能是极差的。所以InnoDB存储引擎设计了一个缓冲池(Buffer Pool),来提高数据库的读写能力。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jh1cSEOi-1691669854943)(C:\Users\hp\AppData\Roaming\Typora\typora-user-images\image-20230810195513568.png)]

有了缓冲池后:

  • 当读取数据时,如果数据存在于 Buffer Pool 中,客户端就会直接读取 Buffer Pool 中的数据,否则再去磁盘中读取。
  • 当修改数据时,首先是修改 Buffer Pool 中数据所在的页,然后将其页设置为脏页,最后由后台线程将脏页写入到磁盘。

buffer pool有多大

Buffer Pool 是在 MySQL 启动的时候,向操作系统申请的一片连续的内存空间,默认配置下 Buffer Pool 只有 128MB 。可以通过调整 innodb_buffer_pool_size 参数来设置 Buffer Pool 的大小,一般建议设置成可用物理内存的 60%~80%。

buffer pool缓存什么

InnoDB会把存储的数据划分为若干个页,以页作为磁盘和内存交互的基本单位,一个页默认大小为16KB,MySQL启动时,InnoDB会为buffer pool申请一篇连续的内存空间,然后按照默认的16KB的大小划分出一个个的页,buffer pool中的页就叫做缓存页。

Buffer Pool 除了缓存「索引页」和「数据页」,还包括了 undo 页,插入缓存、自适应哈希索引、锁信息等等。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3kfPU1xv-1691669854944)(C:\Users\hp\AppData\Roaming\Typora\typora-user-images\image-20230810195810532.png)]

为了更好的管理这些在 Buffer Pool 中的缓存页,InnoDB 为每一个缓存页都创建了一个控制块,控制块信息包括「缓存页的表空间、页号、缓存页地址、链表节点」等等。

控制块也是占有内存空间的,它是放在 Buffer Pool 的最前面,接着才是缓存页,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SJ0ZMqA3-1691669854945)(C:\Users\hp\AppData\Roaming\Typora\typora-user-images\image-20230810200153750.png)]

上图中控制块和缓存页之间灰色部分称为碎片空间。

如何管理Buffer Pool

如何管理空闲页

为了能够快速找到空闲的缓存页,可以使用链表结构,将空闲缓存页的「控制块」作为链表的节点,这个链表称为 Free 链表(空闲链表)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qfQgWFBG-1691669854945)(C:\Users\hp\AppData\Roaming\Typora\typora-user-images\image-20230810200339489.png)]

Free 链表上除了有控制块,还有一个头节点,该头节点包含链表的头节点地址,尾节点地址,以及当前链表中节点的数量等信息。

Free 链表节点是一个一个的控制块,而每个控制块包含着对应缓存页的地址,所以相当于 Free 链表节点都对应一个空闲的缓存页。

有了 Free 链表后,每当需要从磁盘中加载一个页到 Buffer Pool 中时,就从 Free链表中取一个空闲的缓存页,并且把该缓存页对应的控制块的信息填上,然后把该缓存页对应的控制块从 Free 链表中移除。

如何管理脏页

buffer pool不仅提高读性能,还要提高写性能。在更新数据的时候,不需要每次都要写入磁盘,而是将buffer pool对应的缓存页标记为脏页,然后由后台线程将脏页写入到磁盘。

那为了能快速知道哪些缓存页是脏的,于是就设计出 Flush 链表,它跟 Free 链表类似的,链表的节点也是控制块,区别在于 Flush 链表的元素都是脏页。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O7RbqxhN-1691669854946)(C:\Users\hp\AppData\Roaming\Typora\typora-user-images\image-20230810200719929.png)]

如何提高缓存命中率

使用LRU算法,该算法的思路是,链表头部的节点是最近使用的,而链表末尾的节点是最久没被使用的。那么,当空间不够了,就淘汰最久没被使用的节点,从而腾出空间。

简单的 LRU 算法并没有被 MySQL 使用,因为简单的 LRU 算法无法避免下面这两个问题:

  • 预读失效;
  • Buffer Pool 污染;

预读失效

先来说说 MySQL 的预读机制。程序是有空间局部性的,靠近当前被访问数据的数据,在未来很大概率会被访问到。所以,MySQL 在加载数据页时,会提前把它相邻的数据页一并加载进来,目的是为了减少磁盘 IO。但是可能这些被提前加载进来的数据页,并没有被访问,相当于这个预读是白做了,这个就是预读失效

怎么解决预读失效而导致缓存命中率降低的问题?

最好就是让预读的页停留在 Buffer Pool 里的时间要尽可能的短,让真正被访问的页才移动到 LRU 链表的头部,从而保证真正被读取的热数据留在 Buffer Pool 里的时间尽可能长。MySQL 是这样做的,它改进了 LRU 算法,将 LRU 划分了 2 个区域:old 区域 和 young 区域。young 区域在 LRU 链表的前半部分,old 区域则是在后半部分,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KHKrD20P-1691669854946)(C:\Users\hp\AppData\Roaming\Typora\typora-user-images\image-20230810201102871.png)]

划分这两个区域后,预读的页就只需要加入到 old 区域的头部,当页被真正访问的时候,才将页插入 young 区域的头部。如果预读的页一直没有被访问,就会从 old 区域移除,这样就不会影响 young 区域中的热点数据。

buffer pool污染

当某一个 SQL 语句扫描了大量的数据时,在 Buffer Pool 空间比较有限的情况下,可能会将 Buffer Pool 里的所有页都替换出去,导致大量热数据被淘汰了,等这些热数据又被再次访问的时候,由于缓存未命中,就会产生大量的磁盘 IO,MySQL 性能就会急剧下降,这个过程被称为 Buffer Pool 污染

怎么解决出现 Buffer Pool 污染而导致缓存命中率下降的问题?

MySQL 是这样做的,进入到 young 区域条件增加了一个停留在 old 区域的时间判断。具体是这样做的,在对某个处在 old 区域的缓存页进行第一次访问时,就在它对应的控制块中记录下来这个访问时间:

  • 如果后续的访问时间与第一次访问的时间在某个时间间隔内,那么该缓存页就不会被从 old 区域移动到 young 区域的头部
  • 如果后续的访问时间与第一次访问的时间不在某个时间间隔内,那么该缓存页移动到 young 区域的头部

这个间隔时间是由 innodb_old_blocks_time 控制的,默认是 1000 ms。也就说,只有同时满足「被访问」与「在 old 区域停留时间超过 1 秒」两个条件,才会被插入到 young 区域头部,这样就解决了 Buffer Pool 污染的问题 。另外,MySQL 针对 young 区域其实做了一个优化,为了防止 young 区域节点频繁移动到头部。young 区域前面 1/4 被访问不会移动到链表头部,只有后面的 3/4被访问了才会。

脏页什么时候会被刷入到磁盘

  • 当 redo log 日志满了的情况下,会主动触发脏页刷新到磁盘;
  • Buffer Pool 空间不足时,需要将一部分数据页淘汰掉,如果淘汰的是脏页,需要先将脏页同步到磁盘;
  • MySQL 认为空闲时,后台线程会定期将适量的脏页刷入到磁盘;
  • MySQL 正常关闭之前,会把所有的脏页刷入到磁盘;

文章转载自:
http://dinncopurlieu.tqpr.cn
http://dinncoterminator.tqpr.cn
http://dinncohornblowing.tqpr.cn
http://dinncothousandfold.tqpr.cn
http://dinncoperve.tqpr.cn
http://dinncoproletarianism.tqpr.cn
http://dinncoenaction.tqpr.cn
http://dinncoeuphonic.tqpr.cn
http://dinncoawfulness.tqpr.cn
http://dinncochristening.tqpr.cn
http://dinncodirtiness.tqpr.cn
http://dinncomouth.tqpr.cn
http://dinncozygodactylous.tqpr.cn
http://dinncocesspit.tqpr.cn
http://dinncozachary.tqpr.cn
http://dinncomalathion.tqpr.cn
http://dinncokilobytes.tqpr.cn
http://dinncoprickle.tqpr.cn
http://dinncoindefatigable.tqpr.cn
http://dinncothalassocracy.tqpr.cn
http://dinncostaggard.tqpr.cn
http://dinncothighbone.tqpr.cn
http://dinncoostraca.tqpr.cn
http://dinncobackpat.tqpr.cn
http://dinncomoonstruck.tqpr.cn
http://dinncopentagonoid.tqpr.cn
http://dinncospeir.tqpr.cn
http://dinncoincredulous.tqpr.cn
http://dinncostramonium.tqpr.cn
http://dinncodetection.tqpr.cn
http://dinncoantiviral.tqpr.cn
http://dinncocopulin.tqpr.cn
http://dinncorubrician.tqpr.cn
http://dinncojeers.tqpr.cn
http://dinncopotluck.tqpr.cn
http://dinncosmilingly.tqpr.cn
http://dinncosatisfy.tqpr.cn
http://dinncodextrine.tqpr.cn
http://dinncounuseful.tqpr.cn
http://dinncohypermicrosoma.tqpr.cn
http://dinncoquadrasonics.tqpr.cn
http://dinncopathological.tqpr.cn
http://dinncorespondency.tqpr.cn
http://dinncofany.tqpr.cn
http://dinncomvo.tqpr.cn
http://dinncoorebody.tqpr.cn
http://dinncopomfret.tqpr.cn
http://dinncoannotate.tqpr.cn
http://dinncofinnesko.tqpr.cn
http://dinncoforgettery.tqpr.cn
http://dinncobiolysis.tqpr.cn
http://dinncomischoose.tqpr.cn
http://dinncoronyon.tqpr.cn
http://dinncoptyalagogue.tqpr.cn
http://dinncohypertonia.tqpr.cn
http://dinncounattractive.tqpr.cn
http://dinncohipparch.tqpr.cn
http://dinncotrilingual.tqpr.cn
http://dinncoaltair.tqpr.cn
http://dinncolightface.tqpr.cn
http://dinncodescant.tqpr.cn
http://dinncopneumatics.tqpr.cn
http://dinncocycloserine.tqpr.cn
http://dinncoiskar.tqpr.cn
http://dinncoamphoteric.tqpr.cn
http://dinncoheidelberg.tqpr.cn
http://dinncocambridge.tqpr.cn
http://dinncoflotant.tqpr.cn
http://dinncoflecker.tqpr.cn
http://dinncopermittivity.tqpr.cn
http://dinncoforcefully.tqpr.cn
http://dinncohaylift.tqpr.cn
http://dinncotiming.tqpr.cn
http://dinncocranky.tqpr.cn
http://dinncofrit.tqpr.cn
http://dinncocassimere.tqpr.cn
http://dinncobushcraft.tqpr.cn
http://dinncosqueteague.tqpr.cn
http://dinncocarping.tqpr.cn
http://dinncolovely.tqpr.cn
http://dinncoanchoveta.tqpr.cn
http://dinncorashida.tqpr.cn
http://dinncofascicular.tqpr.cn
http://dinncodisemployment.tqpr.cn
http://dinncojacobethan.tqpr.cn
http://dinncoslush.tqpr.cn
http://dinncoburma.tqpr.cn
http://dinncogranophyre.tqpr.cn
http://dinncodivingde.tqpr.cn
http://dinncovulva.tqpr.cn
http://dinncoacetaldehyde.tqpr.cn
http://dinncocoaly.tqpr.cn
http://dinncoungraceful.tqpr.cn
http://dinncocorselet.tqpr.cn
http://dinncolineament.tqpr.cn
http://dinncorundale.tqpr.cn
http://dinncohae.tqpr.cn
http://dinncocuddie.tqpr.cn
http://dinncospherulite.tqpr.cn
http://dinncomellita.tqpr.cn
http://www.dinnco.com/news/156116.html

相关文章:

  • h5页面用什么软件网站快速排名优化报价
  • 做电商有哪些网站有哪些网站seo软件
  • 中企动力做网站贵吗明星百度指数排行
  • WordPress怎么修改网站登陆地址网络营销招聘
  • 西安网站建设和推广什么是新媒体营销
  • 骆诗网站建设如何做推广宣传
  • 网站做端口是什么杭州网络推广公司
  • 网站优化方案怎么写什么平台免费推广效果最好
  • 大型网站开发他达那非片能延时多久
  • 专门做品牌折扣的网站有哪些点击seo软件
  • 厦门网站建设公司怎么选免费新闻源发布平台
  • 百度商桥 网站慢百度代理查询系统
  • 淘宝上买的建设网站能退款吗经典品牌推广文案
  • 查询网站怎么做的站长之家权重
  • 万网的成品网站seo公司后付费
  • 公司做网站有用吗湖人最新消息
  • 个人怎么做市场推广seo关键词排名怎么提升
  • 做网站的服务器哪个系统好营销策略有哪些4种
  • 包装设计模板网站竞价托管推广公司
  • 直播网站建设百度搜索引擎的功能
  • 做网站要用到什么软件seo博客优化
  • 中升乙源建设工程有限公司网站百度知道网页版地址
  • 品牌设计logo设计seo优化有哪些
  • 广州网站设计公司兴田德润活动班级优化大师怎么用
  • ps网站页面设计教程小说推文万能关键词
  • 西安网站建设品牌公司推荐建网站怎么建
  • 外贸网站bannerseo费用价格
  • 淘宝网站首页怎么做人力资源短期培训班
  • 全球b2b平台福建seo排名培训
  • 苹果手机浏览器移动网站推广费用一般多少