硬件和操作系统层面的优化(DBA)
硬件方面
CPU、内存大小、磁盘读写速度、网络带宽
操作系统
文件句柄数、操作系统的网络配置
架构设计层面的优化
MySQL是一个磁盘访问量非常频繁的关系型数据库,在高并发和高性能的场景中,MySQL承受着非常大的并发压力。
搭建集群
单个MySQL服务容易出现单点故障,一旦服务宕机,将会导致依赖MySQL数据库的应用全部无法响应。主从集群或者主主集群可以保证MySQL的高可用。
分库分表
通过分库分表可以减少对于单个MySQL节点的访问压力,通过降低单个表数据量来提高查询速度。
读写分离
读多写少的场景中,采用读写分离,避免读操作对写操作造成的性能影响
热点数据缓存
比如redis缓存数据,降低对数据库的访问压力
MySQL程序配置优化
my.cnf配置文件
MySQL5.7默认的版本连接数为151个
binlog日志,默认是不开启的
缓存池大小的默认配置等
关于配置项的修改,关注两方面
配置的作用域:分为会话级别和全局
是否支持热加载
针对上述这两点,需要注意
全局参数的设定对于已经存在的会话不生效
会话参数的设定随着会话的销毁而失效
全局类的配置建议配置在默认配置文件中,否则重启服务会导致配置失效
SQL优化
(三步)
慢SQL的定位和排查
通过慢查询日志和慢查询日志分析工具得到有问题的SQL列表
执行计划分析
explain关键字
key\possible key \rows\ref等
show profile 工具
SQL优化常用规则
SQL尽量用到索引,一般主键索引是必须的,其次是普通索引、唯一索引、联合索引等这些辅助索引
最左前缀原则,使用like劲量把%放在后面,但是注意放在前面也不一定不会使用索引,有一些特殊情况
使用索引扫描的时候,从左到右命中越多越好
小表驱动大表,select嵌套的情况
使用有效的列,尽量不用select *
尽可能用到索引,避免最后没用索引或者索引失效的情况下走文件索引file sort
本人才疏学浅,如有错误,烦请指出!