目标:什么是脏页,怎么刷脏。
什么是脏页
当内存数据页跟磁盘数据页内容不一致的时候,我们称这个不一致的内存页为“脏页”。
刷脏配置
临时设置方式
SET [SESSION | GLOBAL] innodb_io_capacity = value;
脏页IO配置
查看返回结果的read和write下面的iops avg=xxx
根据avg来决定innodb_io_capacity参数的大小
# 简单的查看磁盘IO语句
fio -filename=io_test -direct=1 -iodepth 1 -thread -rw=randrw -ioengine=psync -bs=16K -size=500M -numjobs=10 -runtime=10 -group_reporting -name=mytest
通过innodb_io_capacity设置,修改刷脏的速度
[mysqld]
innodb_io_capacity = 2000
配置合理的脏页比例上限
通过innodb_max_dirty_pages_pct设置脏页比例上限
当脏页比例接近此值,会加速刷脏页
建议保持默认值75%
[mysqld]
innodb_max_dirty_pages_pct = 75
邻近刷脏配置
innodb_flush_negihbors是一个MySQL数据库的InnoDB存储引擎的配置参数,用于设置在刷新脏页时是否同时刷新相邻的脏页。这个参数对于减少磁盘随机写操作,提高磁盘利用率,特别是在机械硬盘(HDD)上效果明显。
SSD建议设置为0,Mysql8.0已经默认为0
- 0:禁用邻居刷新。InnoDB仅刷新请求的脏页,而不刷新相邻的脏页。
- 1:启用邻居刷新。在刷新脏页时,InnoDB会同时刷新相邻的脏页,以减少随机写操作。这在使用机械硬盘(HDD)时效果较好。
- 2:始终刷新邻居。不仅在刷新脏页时刷新相邻的脏页,还会在任何时候都尝试刷新邻居。这种设置可能会导致更多的写操作,但在某些情况下可能会提高性能。
[mysqld]
innodb_flush_neighbors = 0
总结
- 刷脏可能会导致Mysql卡住,造成性能的问题。
- 通过告知Mysql服务器IO的性能,可以控制合理的刷脏IO
- 合理的脏页比例上限,建议保持默认值
- “邻近刷脏页”功能在SSD硬盘下需要禁用
Comments NOTHING