4、mysql性能优化总结

一、优化从何入手?
(一)连接数
1、客户端(jdbc连接池)、服务端(调大连接数)
a、druid的连接池默认为8个。hikari的连接池默认为10个
b、建议个数:连接池个数:cpu*2+1

(二)主从复制
1、原理:通过binlog,如图:

4、mysql性能优化总结

a、relay log:中继日志
2、如何让写操作去master执行,读操作去slave执行
   切面判断读写+spring提供的动态数据源:abstractRountingDataSource
3、通信规则
a、异步复制:master写入binlog就会给client返回success,不会关心slave是否同步成功。默认是异步复制
b、全同步复制:所有slave从master复制完毕,master才给client返回success
c、半同步复制:只要有一个slave将master的binlog写入到relaylog中,master就给client返回success。mysql需要安装插件:semisync_master.so(master安装)、semisync_slave.so(slave安装)
注:参数查看:show variables like '%semi_sync%';  默认是off,需要手动开启
4、使用gtid(global transaction id)复制  --->从库可以并行的执行sql语句,提高slave同步master的效率
a、参数:show global varibales like 'gtid_mode';   默认是off,需要手动开启

(三)主从复制高可用
1、主从 haproxy+keepalived(zookeeper)
2、NDB cluster
3、Galera Cluster for Mysql
4、MHA(Master-Master replication manager for Mysql)
   MMM(Mysql Master High Available)
5、MGR(Mysql Group Replication)

(四)分库分表
1、垂直分库分表:不容的表放在不同的库中
2、水平分库分表:将同一张表的数通过取模分别放在table_1、table_2表中

(五)调整慢日志
1、慢日志:show variables like 'slow_query%';  
a、slow_query_log:慢日志,默认开启,会消耗性能
b、slow_query_log_file:慢日志位置
2、慢日志阈值:show varibales like '%long_query';
a、long_query_time:默认10s会记录到慢日志
3、统计慢sql:whereis mysqldumpslow--->mysqldumpslow -s t -t 20 -g 'select' /var/lib/mysql/localhost-slow.log.bak
4、统计慢sql:select @@profiling;--->set @@profiling=1--->执行sql--->show profiles;