my.cnf参数配置实现InnoDB引擎性能优化

 更新时间:2017年05月21日 10:28:13   作者:linux_c_coding_man  
目前来说:InnoDB是为Mysql处理巨大数据量时的最大性能设计。它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。在数据量大的网站或是应用中Innodb是倍受青睐的。另一方面,在数据库的复制操作中Innodb也是能保证master和slave数据一致有一定的作用。

在网上看了无数的my.cnf的配置,大多数提到的配置无外乎这几个:

1. innodb_buffer_pool_size
2. innodb_log_file_size
3. innodb_log_buffer_size
4. innodb_flush_log_at_trx_commit

然后自己写了两个例子,一个单线程的,一个多线程的来通过改变配置参数来测试是否提高了性能。结果是只有innodb_flush_log_at_trx_commit可以提高性能,对于1,2,3参数无论是开其中某一个,还是三个同时调节都没有影响到测试性能。我想了下,可能是我的测试数据量还不够大造成的,后续有条件了再更大的数据量测试一下这3个参数。

这里详细说一下innodb_flush_log_at_trx_commit:

如果innodb_flush_log_at_trx_commit设置为0,log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行。该模式下,在事务提交的时候,不会主动触发写入磁盘的操作。
如果innodb_flush_log_at_trx_commit设置为1,每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去。
如果innodb_flush_log_at_trx_commit设置为2,每次事务提交时MySQL都会把log buffer的数据写入log file。但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。

结果

当设置为0,该模式速度最快,但不太安全,mysqld进程的崩溃会导致上一秒钟所有事务数据的丢失。
当设置为1,该模式是最安全的,但也是最慢的一种方式。在mysqld 服务崩溃或者服务器主机crash的情况下,binary log 只有可能丢失最多一个语句或者一个事务。
当设置为2,该模式速度较快,也比0安全,只有在操作系统崩溃或者系统断电的情况下,上一秒钟所有事务数据才可能丢失。

注意:由于进程调度策略问题,这个“每秒执行一次 flush(刷到磁盘)操作”并不是保证100%的“每秒”。

结论:innodb_flush_log_at_trx_commit设置为0或者2的时候速度差不多,两者都比设置为1的时候快很多。

这里又让我想到了InnoDB和MyISAM引擎的区别,InnoDB的优势在于并发处理情况下比MyISAM快。而我的线程池数量是根据cpu的线程数来设定的,然后我把线程池的数量设置比cpu线程数大,更大,再大,结果我的测试程序性能又提高了,我醉了,原来是我对线程池的理解太浅薄了。线程池的最优大小

相关文章

  • 详解MySQL中default的使用

    详解MySQL中default的使用

    这篇文章主要介绍了MySQL中default的使用,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-05-05
  • MySQL配置SSL主从复制

    MySQL配置SSL主从复制

    本文给大家分享的是如何给mysql配置SSL主从复制的具体方法,分别给出了5.6和5.7两个版本的实例,希望大家能够喜欢
    2019-01-01
  • windows下重启mysql的方法

    windows下重启mysql的方法

    这篇文章主要介绍了windows下重启mysql的方法,需要的朋友可以参考下
    2014-12-12
  • 详解Mysql case then使用

    详解Mysql case then使用

    mysql case then在程序开发中经常用到,通过本文给大家介绍mysql case then使用相关知识,对mysql case then相关知识感兴趣的朋友一起学习吧
    2015-12-12
  • MySQL预编译功能详解

    MySQL预编译功能详解

    这篇文章主要为大家详细介绍了MySQL预编译功能的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Linux下如何实现Mysql定时任务

    Linux下如何实现Mysql定时任务

    这篇文章主要介绍了Linux下如何实现Mysql定时任务,需要的朋友可以参考下
    2018-04-04
  • MySQL5.7.31 64位免安装版使用教程图解

    MySQL5.7.31 64位免安装版使用教程图解

    这篇文章主要介绍了MySQL5.7.31 64位免安装版使用教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • MySQL索引最左匹配原则实例详解

    MySQL索引最左匹配原则实例详解

    最左匹配原则就是指在联合索引中,如果你的SQL语句中用到了联合索引中的最左边的索引,那么这条SQL语句就可以利用这个联合索引去进行匹配,下面这篇文章主要给大家介绍了关于MySQL索引最左匹配原则的相关资料,需要的朋友可以参考下
    2022-09-09
  • MySQL插入emoji表情失败问题的解决方法

    MySQL插入emoji表情失败问题的解决方法

    emoji表情在我们日常开发中经常会遇到,但是最近在mysql中插入emoji表情遇到了问题,通过查找相关的资料终于解决了,所以将这次解决的过程分享出来,这篇文章主要就给大家介绍了MySQL插入emoji表情失败问题的解决方法,需要的朋友可以参考。
    2017-05-05
  • MySQL禁用InnoDB引擎的方法

    MySQL禁用InnoDB引擎的方法

    这篇文章主要介绍了MySQL禁用InnoDB引擎的方法,针对的Mysql版本是5.5和5.6,使用了两种不同的配置文件,需要的朋友可以参考下
    2014-05-05

最新评论