MySQL配置性能优化

下面配置的优化,可能影响比较大,可能可以显著提高读写性能。

1、mysql一些主要配置项介绍:

innodb_buffer_pool_size

这是你安装完InnoDB后第一个应该设置的选项。缓冲池是数据和索引缓存的地方:这个值越大越好,这能保证你在大多数的读取操作时使用的是内存而不是硬盘。如果是纯数据库,可以设置到机器内存80%(官网建议)

innodb_log_file_size

这是redo日志的大小。redo日志被用于确保写操作快速而可靠并且在崩溃时恢复。一直到MySQL 5.1,它都难于调整,因为一方面你想让它更大来提高性能,另一方面你想让它更小来使得崩溃后更快恢复。

max_connections

如果你经常看到‘Too many connections’错 误,是因为max_connections的值太低了。这非常常见因为应用程序没有正确的关闭数据库连接,你需要比默认的151连接数更大的值。 max_connection值被设高了(例如1000或更高)之后一个主要缺陷是当服务器运行1000个或更高的活动事务时会变的没有响应。在应用程序 里使用连接池或者在MySQL里使用进程池有助于解决这一问题。

innodb_flush_log_at_trx_commit

默认值为1,表示InnoDB完全支持ACID特性。当你的主要关注点是数据安全的时候这个值是最合适的,比如在一个主节点上。但是对于磁盘(读写)速度 较慢的系统,它会带来很巨大的开销,因为每次将改变flush到redo日志都需要额外的fsyncs。将它的值设置为2会导致不太可靠 (unreliable)因为提交的事务仅仅每秒才flush一次到redo日志,但对于一些场景是可以接受的,比如对于主节点的备份节点这个值是可以接 受的。如果值为0速度就更快了,但在系统崩溃时可能丢失一些数据:只适用于备份节点。

innodb_log_buffer_size

这项配置决定了为尚未执行的事务分配的缓存。其默认值(1MB)一般来说已经够用了,但是如果你的事务中包含有二进制大对象或者大文本字段的话,这点缓存 很快就会被填满并触发额外的I/O操作。看看Innodb_log_waits状态变量,如果它不是0,增加 innodb_log_buffer_size。

query_cache_size/query_cache_type

query cache(查询缓存)是一个众所周知的瓶颈,甚至在并发并不多的时候也是如此。 最佳选项是将其从一开始就停用,设置query_cache_size = 0(现在MySQL 5.6的默认值)并利用其他方法加速查询:优化索引、增加拷贝分散负载或者启用额外的缓存(比如memcache或redis)。如果你已经为你的应用启 用了query cache并且还没有发现任何问题,query cache可能对你有用。这是如果你想停用它,那就得小心了。

innodb_lock_wait_timeout

innodb引擎,当存在锁竞争时等待的时间

2、配置上做一些优化:

当然下面是我们服务器的优化,因服务器配置不同,读写等进行不同配置优化。

1.innodb_flush_log_at_trx_commit 设置为0,提升mysql写性能,但是如果出现宕机,存在丢失数据的风险,如果可以,最好修改为2,然后使用读写分离等手段来提升mysql整体性能。

2.调整了mysql的事务隔离级别,由默认的Repeatable read调整到Read committed

3.修改了innodb_lock_wait_timeout,由默认的50->30

4.修改innodb_log_file_size,5M->512M,对于写入负载高的场景,参考值:64~512MB

5.修改innodb_buffer_pool_size,原先是8G,换新服务器后修改为24G,可以通过缓存命中率来判断这个值是否够

6.修改query_cache_type为2,默认情况下不使用mysql缓存,除非显示指定

    原文作者:冰封
    原文地址: https://zhuanlan.zhihu.com/p/30075280
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞