前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >innodb_flush_log_at_trx_commit参数对插入性能的影响测试方法

innodb_flush_log_at_trx_commit参数对插入性能的影响测试方法

作者头像
AsiaYe
发布2021-07-14 13:24:34
7890
发布2021-07-14 13:24:34
举报
文章被收录于专栏:DBA随笔DBA随笔

//

innodb_flush_log_at_trx_commit参数对插入性能的影响测试方法

//

最近工作上的事情比较繁琐,回到家就想休息,今天介绍一个简单的测试innodb_flush_log_at_trx_commit参数对插入性能影响的方法吧。

其实这个很好测试,现在的MySQL服务器,大多数都是SSD了,早期的时候,机械的磁盘比较多,我们在上MySQL服务的时候,总是习惯性的测试一下innodb_flush_log_at_trx_commit参数对性能的影响,这个参数的意义大家可能也都知道,它和sync_binlog这2个参数是MySQL DBA必须知道的参数,之前针对这两个参数也做过介绍:

MySQL数据安全的双1模式简介

测试方法如下,利用一个存储过程来进行测试:

代码语言:javascript
复制
CREATE TABLE `flush_1` (
  `id` int(11) NOT NULL,
  `a` int(11) DEFAULT NULL,
  `b` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `a` (`a`)
) ENGINE=InnoDB;

创建一个存储过程
drop procedure idata;
delimiter ;;
create procedure idata()
begin
  declare i int;
  set i=1;
  while(i<=1000) do
    insert into flush_1 values(i, i, i);
    set i=i+1;
  end while;
end;;
delimiter ;

调用这个存储过程
call idata();

其中,flush_1就是指参数innodb_flush_log_at_trx_commit的值变成1,这里我简单在Docker环境中测试了一下:

代码语言:javascript
复制
mysql> show variables like '%flush_log_at_trx_commit%';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 1     |
+--------------------------------+-------+
1 row in set (0.00 sec)

---------------默认值是1,开始测试(8.05s)---------

mysql> CREATE TABLE `flush_1` (
    ->   `id` int(11) NOT NULL,
    ->   `a` int(11) DEFAULT NULL,
    ->   `b` int(11) DEFAULT NULL,
    ->   PRIMARY KEY (`id`),
    ->   KEY `a` (`a`)
    -> ) ENGINE=InnoDB;
Query OK, 0 rows affected, 3 warnings (0.22 sec)

mysql> 
mysql> drop procedure idata;
Query OK, 0 rows affected (0.07 sec)

mysql> delimiter ;;
mysql> create procedure idata()
    -> begin
    ->   declare i int;
    ->   set i=1;
    ->   while(i<=1000) do
    ->     insert into flush_1 values(i, i, i);
    ->     set i=i+1;
    ->   end while;
    -> end;;
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;
mysql> call idata();
Query OK, 1 row affected (8.05 sec)


---------------第一次修改,改为2,开始测试(5.76s)-----------
mysql> set global innodb_flush_log_at_trx_commit=2;
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE TABLE `flush_2` (
    ->   `id` int(11) NOT NULL,
    ->   `a` int(11) DEFAULT NULL,
    ->   `b` int(11) DEFAULT NULL,
    ->   PRIMARY KEY (`id`),
    ->   KEY `a` (`a`)
    -> ) ENGINE=InnoDB;

drop procedure idata;
Query OK, 0 rows affected, 3 warnings (0.04 sec)

mysql> drop procedure idata;
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;;
mysql> create procedure idata()
    -> begin
    ->   declare i int;
    ->   set i=1;
    ->   while(i<=1000) do
    ->     insert into flush_2 values(i, i, i);
    ->     set i=i+1;
    ->   end while;
    -> end;;
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;
mysql> call idata();
Query OK, 1 row affected (5.76 sec)

---------------第二次修改,改为0,开始测试(3.88 s)---------
mysql> set global innodb_flush_log_at_trx_commit=0;
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE TABLE `flush_0` (
    ->   `id` int(11) NOT NULL,
    ->   `a` int(11) DEFAULT NULL,
    ->   `b` int(11) DEFAULT NULL,
    ->   PRIMARY KEY (`id`),
    ->   KEY `a` (`a`)
    -> ) ENGINE=InnoDB;
Query OK, 0 rows affected, 3 warnings (0.04 sec)

mysql> drop procedure idata;
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;;
mysql> create procedure idata()
    -> begin
    ->   declare i int;
    ->   set i=1;
    ->   while(i<=1000) do
    ->     insert into flush_0 values(i, i, i);
    ->     set i=i+1;
    ->   end while;
    -> end;;
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;
mysql> call idata();
Query OK, 1 row affected (3.88 sec)

可以看到:

该参数设置为1,最安全,需要8.05s才能将1000条数据写到磁盘;

设置为2,总计需要5.76 s

设置为0,只需要3.88s

如果是SSD的话,这个差距可能会缩小,具体的情况,大家可以将插入的数据条数增多之后(例如50000条),自行测试,这样的结果会更加明显。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-06-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • innodb_flush_log_at_trx_commit参数对插入性能的影响测试方法
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档