暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL参数学习-innodb_doublewrite_pages

济南小老虎 2025-05-05
171

背景

innodb_doublewrite_pages 是 MySQL 8.0.20 引入的一个参数,
用于控制每个线程双写页的最大数量。
如果未指定该参数的值,则其值默认等于 innodb_write_io_threads


参数确认与第一次测试

show variables like "%doublewrite%";
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| innodb_doublewrite            | ON    |
| innodb_doublewrite_batch_size | 0     |
| innodb_doublewrite_dir        |       |
| innodb_doublewrite_files      | 2     |
| innodb_doublewrite_pages      | 4     |
+-------------------------------+-------+

进行验证:
使用两个1G大小的表: 
表名   大小     行数
A   1005.88M   383万
B   1031.86M   1万
进行第一轮验证: 
create table table_3b01 as select * from A
4pages: 32.479秒 

create table table_10k01 as select * from B
4pages:  8.584秒


需改参数后进行第二轮测试验证

在 my.cnf中增加下面的值: 
innodb_doublewrite_pages=128

然后重启数据库 
需要说明,这个参数是只读参数,无法在线修改:
set global innodb_doublewrite_pages=128 ;
1238 - Variable 'innodb_doublewrite_pages' is a read only variable

修改重启之后: 

create table table_3b03 as select * from A
4pages:   32.479秒 
128pages: 32.614秒


create table table_10k03 as select * from B
4pages:    8.584秒
128pages:  5.283秒


load验证

使用navicat等工具将A和B导出成为 csv文件
然后使用laod语法进行处理
配置文件可以增加: secure_file_priv =
附加权限: 
grant file on *.* to user@'%' ;
这样可以适合导入

使用如下SQL执行导入: 
LOAD DATA INFILE '/var/lib/mysql-files/A.csv' REPLACE
into table table_3b
FIELDS TERMINATED BY ',' ENCLOSED by "" lines terminated by '\n'
IGNORE 2 LINES;

发现参数影响不大. 跟网上的很多资料不太一样
初步怀疑是 SSD 的影响比较小
HDD的影响会大一些. 


简单结论

修改了pages参数的确对每行比较大的表的 CTAS 性能有优化
但是如果行列数很小, 那么提升并不是很大
SSD的确能够减少IO的影响, 机械磁盘的性能真不行.


文章转载自济南小老虎,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论