MySQL调优篇

调优金字塔:

1.硬件和OS调优:

非DBA,只做简述。硬件有CPU、RAID卡,操作系统有IO调度策略、内存、设备轮转模式等。

2.MySQL调优:

(1)配置优化

· 足够大的缓冲池(innodb_buffer_pool_size)

将热点数据尽可能多的存放到内存中,读取数据时就会尽可能少的访问磁盘。

· 最合适的redo log配置

增大redo_log的写入缓冲区大小(innodb_log_file_size)来降低redo log file的循环切换频率,一般是设置为缓冲池大小的四分之一,但是这样会增大宕机恢复时的时间消耗;

选择合适的刷盘策略(innodb_flush_log_at_trx_commit)。如果当前业务对于数据的安全性要求没有那么严格,或者基础架构足够安全,或者事务一般都很小,可以用0或2来降低刷盘频率;

避免双写入缓冲(innodb_flush_method=O_DIRECT)。如果OS和MySQL的缓冲都写入的话,对于内存的占用就翻了倍。除非操作系统不支持,不然没有任何理由打开双写入缓冲。

(2)索引优化

索引的合理性可以直接看作是索引的创建策略,然后尽可能的满足三星索引。

(3)SQL优化

SQL语句的合理性可以通过explain来分析,尽量避免一些耗性能的type或extra出现。

慢查询调优思路:

1.数据层

· 是否请求了不需要的数据,比如不需要的列、不需要的记录、重复的记录等

· 是否扫描了额外的记录,比如扫描的行数远大于返回的行数、访问类型等。

2.索引层:

主要就是看索引是否失效。

3.考虑重构

· 将一个复杂查询拆成多个简单查询会不会好一些

· 将一个大数据量大查询分批返回结果

· 将关联查询分解(缓存效率更高;减少锁的竞争;利于高性能和可扩展;减少冗余数据的查询)

· 避免使用大事务,使用短小的事务减少锁的竞争

· 延迟关联来优化分页

· 不使用存储过程,触发器

· 不使用负向查询,如not in, not like等

· sql中使用到的or改写为用in()

· 禁止使用子查询,因为子查询需要创建和销毁临时表

· join查询小表驱动大表


3.架构调优

垂直拆分、水平拆分、引入缓存系统。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值