MySql 性能调优

1. 引擎选择,myisam & innodb
如果不确定使用哪个数据库引擎,就使用innodb,因为他是支持事务的,支持行级锁的,或者参考
我的另一篇博文 《mysql原理及部分优化》
2.innodb_buffer_pool_size 缓冲池大小,可用内容的80%,内存总做是最快的。
3.innodb_log_file_size 重做日志或者事务日志文件,不能太小,最好是系统繁忙时1-2小时的写入量,不想算就设置1G。
innodb_log_buffer_size,如果没有大的事务,默认值就可以,如果有较大的事务,就变大这个值吧
4.innodb_flush_log_at_trx_commit
事务提交时刷新同步数据到硬盘,默认是1,每次事务都同步到硬盘,这个性能牵涉到磁盘读写
但是对于银行等行业,需要这么做,不能丢失数据,那就换更好的硬盘来提高iops吧。
0代表刷新到硬盘但是不同步,不同步就没有硬盘io操作。
2代表不刷新也不同步
设置成0或2,同步会每秒进行一次。缺点就是断电会丢1秒的数据
这种问题对于很多行业应该可以接受,毕竟以前myisam引擎是30秒同步一次,尽量不要设置成2,0再mysql崩溃的时候还是可以存到硬盘的
0刷新到操作系统缓存,很快
5.sync_binlog
a) 如果你的服务器没有设置从服务器,而且你不做备份,那么设置sync_binlog=0将对性能有好处。
b) 如果你有从服务器并且做备份,但你不介意当主服务器崩溃时在二进制日志丢失一些事件,那么为了更好的性能还是设置为sync_binlog=0.
c) 如果你有从服务器并且备份,你非常在意从服务器的一致性,以及能及时恢复到一个时间点(通过使用最新的一致性备份和二进制日志将数据库恢复到特定时间点的能力),
那么你应该设置innodb_flush_log_at_trx_commit=1,并且需要认真考虑使用sync_binlog=1。问题是sync_binlog=1代价比较高 – 现在每个事务也要同步一次到硬盘。
你可能会想为什么不把两次同步合并成一次,想法正确 – 新版本的MySQL(5.6和5.7,MariaDB和Percona Server)已经能合并提交,那么在这种情况下sync_binlog=1的操作也不是这么昂贵了,
但在旧的mysql版本中仍然会对性能有很大影响。
3. innodb_flush_method 尽量使用O_DIRECT来避免双重缓冲
4. innodb_buffer_pool_instances 增加缓冲实例来减少内部锁竞争来提高吞吐量。
5. innodb_thread_concurrency 并发控制机制 再低负载的实力设置为0就可以,如果是
高负载的,先设置为8,查看资源使用率,如果使用率不足,再慢慢增加
6. skip_name_resolve 添加这个来避免DNS解析,正常情况下没有什么区别,如果出现dNS解析失败,会导致所有
请求都慢下来。
7. innodb_buffer_pool_dump_at_shutdown & innodb_buffer_pool_load_at_startup
这与性能无关,不过再重启mysql服务的时候会提高预热速度
8. innodb_adaptive_hash_index_parts 5.7以前的版本,没有ahi分区数量控制,会有一个全局互斥锁来保护ahi,可能会导致查询变慢
5.7以后的版本就有这个变量了
9. query_cache_type & query_cache_size, 低负载可以设置 query_cache_type=ON和query_cache_size=256M,别设置太高,否则查询缓存失效会导致服务器卡顿。
高负载的时候就关闭好了 query_cache_type=OFF和query_cache_size=0
10. table_open_cache_instances 表缓存分割到多个分区,mysql 5.7以后的版本就用默认值了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值