MySQL 知识合集
-
脏页
-
脏页的来历
- 一言蔽之,脏页就是插入和更新后数据所在的对应的内存(缓存)页 / 内存文件页(内存管理)
-
脏页的刷新
- 脏页的刷新采用定时+阈值触发+关闭前
- 相关参数
- innodb_page_cleaners
- innodb_buffer_pool_instances
- innodb_lru_scan_depth
- innodb_nax_dirty_pages_pct
- innodb_io_capacity 数据库IO吞吐量参数 刷新脏页的数量/每秒
- innodb_io_capacity_max 压力模式下最大I/O吞吐量
- Redo Log 的刷盘策略:
- 0: 每隔1S写入并刷新磁盘
- 1: 每次事务提交时写入并刷新磁盘
- 2: 每次事务提交写入OS缓存, 每隔1S缓存数据刷入磁盘
- 相关参数
- 是否刷新脏页数据的邻接页: innodb_flush_neighbors
- 0: 禁用刷新邻接的功能
- 1: 以相同的态度刷新其邻接的脏页
- 2: 以相同的程度刷新脏页 SSD磁盘建议禁用此参数 HD磁盘建议开启
- MySQL 可以通过手动方式进行刷新数据表
- flush tables;
- flush tables tableName;
- 脏页的刷新采用定时+阈值触发+关闭前
-
脏页的影响
- MySQL关闭时,存在大量的脏页会导致关机计划延迟(停机时间过长)
- MySQL崩溃时影响恢复时间
- 脏页在缓存中保持的时间中接收到对数据的再次修改的情况,可以有效减少写入负载,减少对应的I/O的消耗(热点数据)
- 脏页数据的存在有效减少I/O的消耗,在某些查询模式或者其他场景,能有效增加效率
-
扩展
- 文件页(操作系统内存管理的数据页,存在于缓存和缓冲区,可直接回收)
- 匿名页(应用程序动态分配的堆内存,可能被重复访问,不可直接回收释放)
- 脏页(被应用程序修改过的还没有被刷新写入到磁盘中的数据)
- 系统调用 fsync ,把脏页同步到磁盘中
- fsync函数则是对指定文件的操作,而且必须等到写队列中的内容都写到磁盘后才返回,并且更新文件inode结点里的内容
- sync负责把缓存区上的东西排到写队列中(缓冲区->写队列),在由守护进程负责把队列里的东西写到磁盘上,而sync函数在把缓存区上的东西排到写队列后不管写队列中的内容是否写到磁盘上都立即返回。
- 由内核线程 pdflush 负责这些脏页的刷新
- 脏页占用时间到达设计上限,需要刷新内存保持和磁盘一致
- 脏页占用内存空间不足
- 外界命令强制刷新
- write写磁盘时检查状态刷新
- 系统调用 fsync ,把脏页同步到磁盘中
- SWAP机制
- 把不常用的内存写入到磁盘文件中,然后将对应的内存释放.当再次需要这些内存时再次把磁盘中的内容读取到内存中,供使用
- 使用场景
- Windows的休眠和快速开机加快开机速度
- 内存分配不足是低频重要线程不能被OOM,需要保持内存,等待继续人工唤醒或者系统调度
- Notepad++未保存的文件关闭后再次打开上次的内容仍然存在(或许是实时热备份)
- 操作系统内存回收
- 回收场景
- 剩余内存空间不够大块内存的分配
- 操作系统内核定期回收内存(kswapd0: 虚拟内存管理程序)
- pages_min 页最小阈值, pages_low 页低阈值, pages_high 页高阈值, pages_free 剩余内存
- 根据 pages_free 剩余内存和 其他三个参数之间对比来决定是否触发内存回收
- 页低阈值,其实可以通过内核选项 /proc/sys/vm/min_free_kbytes 来间接设置。min_free_kbytes 设置了页最小阈值,而其他两个阈值,都是根据页最小阈值计算生成的 pages_low = pages_min * 1.25 pages_high = pages_min * 1.5
- cat /proc/zoneinfo|more 查看CPU各个核心的内存阈值控制
- 某个 Node 内存不足时,系统可以从其他 Node 寻找空闲内存,也可以从本地内存中回收内存。具体选哪种模式,你可以通过 /proc/sys/vm/zone_reclaim_mode来调整
-
默认的 0 ,表示既可以从其他 Node 寻找空闲内存,也可以从本地回收内存。
-
1、2、4 都表示只回收本地内存
-
2 表示可以回写脏数据回收内存
-
4 表示可以用Swap 方式回收内存
-
- /proc/sys/vm/swappiness
- 权重范围 0-100 -> 数字越大越倾向于使用SWAP机制处理内存页,反之则倾向于回收内存页
- 回收方法
- LRU算法
- SWAP机制(LRU算法)
- OOM机制(内存溢出, 按照内存占用大小,越大的进程越容易被Kill )
- 回收场景
-
-
other
- https://blog.csdn.net/qq_44793993/article/details/120284793
- https://blog.csdn.net/Edwin_Hu/article/details/124897224
血肉苦弱机械飞升 :痛苦预示着超脱
本文来自博客园,作者:血肉苦弱机械飞升,转载请注明原文链接:https://www.cnblogs.com/supperlhg/p/17517412.html