• 售前

  • 售后

热门帖子
入门百科

mysql脏页是什么

[复制链接]
风来时狂放 显示全部楼层 发表于 2021-8-14 14:49:57 |阅读模式 打印 上一主题 下一主题
目次


  • 脏页(内存页)
  • 为什么会出现 脏页

    • 内存管理机制简述
    • 数据修改和读取只依靠缓冲区行不行

  • 为什么脏页一定要刷新
  • 刷脏页有下面4种场景
  • 会造成的影响

脏页(内存页)

干净页:内存和磁盘中的数据一致
脏页:内存和磁盘中的数据不一致

为什么会出现 脏页


平时很快的更新操作,都是在写内存和日志。
他并不会马上同步到磁盘数据页,这时内存数据页跟磁盘数据页内容不一致,我们称之为脏页。
这内里就涉及 mysql 的内存管理机制


内存管理机制简述


缓冲区中包罗这三大类列表。分别为:LRUList、FreeList、FlushList。
在数据库刚启动时,LRUlist中没有数据页。FreeList存放空闲页。
       
  • 当须要读取某个页时,会从FreeList中获取一个空闲页,读入数据后,放入LRUlist中   
  • 如果FreeList中没有空闲页了,那么根据LRU算法镌汰Lru列表中末位的页   
  • 当LRUlist中的页被修改后,页就酿成了脏页,这个页也会被加入FlushList中
注意:这时这个页既在LRUlist中,又在FlushList中。
总结:LRUList(管理已经被读取的页)和FreeList(管理空闲的页)用来管理页的可用性;FlushList(管理脏页)用来管理脏页的刷新

在脏页数据同步到磁盘过程中,如果对该磁盘数据页执行 SQL 语句。执行速度就会变慢


数据修改和读取只依靠缓冲区行不行


如果数据修改和读取只依靠内存的缓冲区,那么一旦数据库宕机,内存中的数据都会丢失。以是MySQL利用之前讲过的redo log来实现非常重启的数据规复,redolog相干介绍可以看篇文章:MySQL-redo log 和 binlog

简朴来说,就是在更新缓冲区之前,先写入redo log,包管非常重启之后可以正常规复缓冲区中的数据。


为什么脏页一定要刷新

       
  • 上面说了 数据只放在缓冲区,会出现数据库宕机,内存数据丢失。以是须要刷新到磁盘。   
  • redo log如果无限大大概有很多个文件的话,体系中有大量的修改操作,一旦宕机,规复的时间也会非常长。
以是自然而然,我们就一定须要把内存中的脏页按照某种规则刷新到磁盘中,有了刷新这个操作,缓冲区的巨细问题和redo log的巨细问题都可以办理。
       
  • 缓冲区不须要无限大了,由于可以持久化到磁盘   
  • redo log也不须要无限大了,由于一旦持久化到磁盘,redo log中对应的那部门数据就可以释放。

刷脏页有下面4种场景

       
  • 当 redo log 写满,mysql就会停息全部更新操作,将同步这部门日志对应的脏页同步到磁盘。   
  • 体系内存不敷时,须要镌汰一部门数据页,如果镌汰的是脏页,就要先将脏页同步到磁盘。   
  • MySQL 以为体系空闲的时间,有时机就同步内存数据到磁盘,这种没有性能问题。   
  • MySQL 正常关闭,MySQL 会把内存的脏页都同步到磁盘上,这样下次 MySQL 启动的时间,就可以直接从磁盘上读数据,启动速度会很快。这种没有性能问题。

会造成的影响


1 如果是 redo log 写满了
要只管避免redo log 写满。否则整个体系的更新都会克制。此时写的性能变为 0,必须等候该日志对应脏页同步完成后才气更新,这时就会导致 sql 语句 执行的很慢。
到此这篇关于mysql脏页是什么的文章就介绍到这了,更多相干mysql脏页内容请搜索草根技术分享从前的文章或继续欣赏下面的相干文章盼望大家以后多多支持草根技术分享!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作