背景
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




