使用mysql开发过程中可能会发现,很简答的表,没有过多约束和依赖,数据也很少。查询速度很快,但是增删改操作耗时较长,30ms左右。
我们对sql进行profile分析,可以发现耗时主要集中在“query end” 这个阶段。
网上有很多文章供参考,这里直接给出可能得原因:
查看系统 innodb_flush_log_at_trx_commit 配置的值:
,如果是1,那么很有可能就是这个配置的原因了。
innodb_flush_log_at_trx_commit 有三个可选项:
0. 事务直接返回,系统定时将缓存更新到磁盘
1.事务提交时,数据更新到磁盘完成才返回成功
2.事务提交时,数据刷到操作系统缓存才返回成功
耗时 0<2<1 ,网上有很多介绍,这里不赘述,实测耗时对比如下(表简单,数据量少的场景):
···
CREATE TABLE `test_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4
···
innodb_flush_log_at_trx_commit 配置项的性能测试
参考:
https://www.cnblogs.com/xiaoit/p/4554048.html