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线程数大,更大,再大,结果我的测试程序性能又提高了,我醉了,原来是我对线程池的理解太浅薄了。线程池的最优大小

相关文章

  • 使用Jmeter连接Mysql图文教程

    使用Jmeter连接Mysql图文教程

    Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。今天我们来看看如何使用Jmeter连接Mysql
    2016-12-12
  • Mysql中json类型查询方法示例

    Mysql中json类型查询方法示例

    这篇文章主要给大家介绍了关于Mysql中json类型查询的相关资料,在MySQL中可以使用一些函数和操作符来查询JSON字段,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • mysql 导入导出数据库、数据表的方法

    mysql 导入导出数据库、数据表的方法

    这篇文章主要介绍了mysql 导入导出数据库、数据表的方法,有需要的朋友可以参考一下
    2013-11-11
  • Mysql事务隔离级别之读提交详解

    Mysql事务隔离级别之读提交详解

    这篇文章主要介绍了Mysql事务隔离级别之读提交详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • MySQL如何修改字段的默认值和空值

    MySQL如何修改字段的默认值和空值

    这篇文章主要介绍了MySQL如何修改字段的默认值和空值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • MySQL  外键(foreign key)约束的作用和使用

    MySQL  外键(foreign key)约束的作用和使用

    外键约束是用于建立两个表之间关系的一种约束,本文主要介绍了MySQL外键约束详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Windows8下mysql 5.6.15 安装配置方法图文教程

    Windows8下mysql 5.6.15 安装配置方法图文教程

    这篇文章主要为大家详细介绍了Windows8下mysql 5.6.15 安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • MySql5.6使用validate password 插件加强密码强度的安装及使用方法

    MySql5.6使用validate password 插件加强密码强度的安装及使用方法

    在mysql5.6中使用validate password插件加强密码强度,支持密码的强度要求,是一款非常好用的密码加强插件,下面小编通过本文给大家介绍MySql5.6使用validate password 插件加强密码强度的安装及使用方法,小伙伴们一起学习吧
    2016-07-07
  • MySQL使用触发器如何实现CHECK检查约束的功能

    MySQL使用触发器如何实现CHECK检查约束的功能

    这篇文章主要介绍了MySQL使用触发器如何实现CHECK检查约束的功能,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 使用MySQL实现高效的用户昵称模糊搜索

    使用MySQL实现高效的用户昵称模糊搜索

    在大型系统中,用户表中的昵称字段需要支持高效的模糊搜索,并且必须处理包含特殊字符的查询,本文将介绍一种在MySQL中实现高效模糊搜索的解决方案,能够支持特殊字符,并且利用MySQL自身的全文索引机制来优化搜索性能,需要的朋友可以参考下
    2024-05-05

最新评论