MYSQL双一配置对对写入性能影响
innodb_flush_log_at_trx_commit介绍
通过以下命令可以查询/设置innodb_flush_log_at_trx_commit的值:
- #select @@innodb_flush_log_at_trx_commit;
- #set global innodb_flush_log_at_trx_commit=2;
首先需要大致了解一下mysql日志操作步骤:
log_buff —mysql写 (write)—> log_file —OS刷新 (flush)—> disk
innodb_flush_log_at_trx_commit 参数解释:
0(延迟写): log_buff –每隔1秒–> log_file —实时—> disk
1(实时写,实时刷): log_buff —实时—> log_file —实时—> disk
2(实时写,延迟刷): log_buff —实时—> log_file –每隔1秒–> disk
脚本准备
create table t1(id int primary key, a int, b int, index(a));
create table t2 like t1;
drop procedure idata;
delimiter ;;
create procedure idata()
begin
declare i int;
set i=1;
while(i<=1000)do
insert into t1 values(i, 1001-i, i);
set i=i+1;
end while;
set i=1;
while(i<=1000000)do
insert into t2 values(i, i, i);
set i=i+1;
end while;
end;;
delimiter ;
call idata();
MYSQL磁盘写入监控
通过~/perf-tools-master/iosnoop |grep mysql命令监控磁盘写入延迟,最后两列为写入字节数,以及写入延迟ms。

测试结果
innodb_flush_log_at_trx_commit=0;
磁盘写入情况如下:

总耗时:

innodb_flush_log_at_trx_commit=2;
磁盘写入情况:

总耗时:

innodb_flush_log_at_trx_commit=1;
磁盘写入情况:

总耗时:

总结:
通过从以上磁盘监控可以印证0、1、2三个取值对磁盘写入的影响(1:每一个事务写入一次磁盘,每次写入较少4KB,延迟0.5ms左右,0/2:每次写入数据量根据操作系统或则MYSQL后台任务每秒执行一次刷新到磁盘),设置为1的耗时是0/2的耗时25倍
当需要大批量写入数据时,可以确定写入期间MYSQL不会停止/系统不会重启,可以提前将innodb_flush_log_at_trx_commit设置为0或则2,待写入完成后,再将配置改为1。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗