mysql提升事务性能

      最近的项目使用了spring和mysql,但在性能上出了问题,刚开始一直不能找到瓶颈在哪里,就不断的摸索,经过一系列的测试后,确定了在使用spring的transactionnal的注解时,mysql提交事务时花费的时候几乎是用了100ms,这是让人很难接受的。

      刚开始怀疑是不是我们的在使用spring的事务管理器上有问题,后来有怀疑是不是对于@Transactional注解的使用上有问题,但是没有得到实质性的突破,终于在今天早上看到了关于mysql的事务优化方面的博客,最后经过测试发现,经过以下做法修改后,性能的提升是显而易见的。

 

使用以下命令进行修改mysql的配置

 

Java代码   收藏代码
  1. show variables like 'innodb_flush_log_at_trx_commit';  
  2. set global innodb_flush_log_at_trx_commit = 2;  
  3. show variables like 'innodb_flush_log_at_trx_commit';  

 具体解释如下:

 

innodb_flush_log_at_trx_commit属性主要控制了innodb将log buffer中的数据写入日志文件,并且刷新磁盘的时间点,取值有0、1(mysql默认值)、2。

0:事务提交时,不做日志写入操作,而是每秒钟将log buffer中的日志写入文件并且flush磁盘一次。

1:每秒钟或者事务提交时,都会引起日志写入和flush磁盘操作,这样设计也是最安全的。

2:每次事务提交时,进行日志写入,但此时没有flush磁盘操作,而是在每秒钟时进行flush磁盘操作。

 

在设置mysql的innodb_flush_log_at_trx_commit属性为2时,每次提交事务时,就没有引起flush磁盘操作,这样的话,就会节省很多时间,我们的项目中平均40ms处理完一次操作,而该操作完了以后会释放事务,如此来说,1s钟内就省去了磁盘刷新的时间。而原来的这种情况下,事务提交一般都要花费40ms的时间,在多并发的情况下,甚至达到了200ms的时间,这是非常可怕的事情,而现在,普通情况下,一次事务提交所花费的时间就基本控制在个位毫秒级别上。

 

当然查看资料后,将innodb_flush_log_at_trx_commit设置为

0:mysql进程崩溃时,会丢失数据

1:每次事务日志缓冲都会写入磁盘

2:操作系统崩溃、断电情况下,会丢失最后一秒钟内的数据

 

以上情况需要根据所处的软件环境而定,而我们项目中目前设置为2已经足够了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值