第十四章 mysql性能优化

一。应用优化的口诀,解决大部分问题

1.缓存  :redis, guava cache, openresty lua

2.异步  :  支付宝微信的支付会提供异步回调接口,返回支付结果。支付链路很复杂,耗时长

3.批处理:写操作

二。mysql 单机性能提升 配置

mysql执行变更sql时首先写undo/redo buffer->(write flush) ->undo/redo log,然后再修改文件data buffer->(flush)->data file

1.max_connection=1000  mysql支持的socket 连接,因为有连接池固定会有连接,连接池5个连接最小,四台应用,第五台应用就连不上了,如果为20的话

2.innodb_file_per_table=1 mysql默认是每个database一个file,这样所有表在一个文件,查询的时候寻址就会比较慢。一个表一个文件,寻址就会快

3.innodb_buffer_pool_size=1G 扩大缓存的大小,这样写和度都快

4.innodb_log_buffer_size=16M    write ahead log 写日志的缓冲区大小,当日志文件大小达到最大时,需要重命名再写一个新的文件,这个间隙是不能flush日志的,所以buffer不能太小,不然client端不能执行sql

5.innodb_log_file_size=256M  写的日志大小

三。mysql分布式性能优化

主从分布式扩展

1.打开bin log: 修改数据,事务提交时都会写bin log,从机根据bin log版本号来判断是否变化,然后同步过来

2.主从同步账号配置,配置主从同步

可以只读从机,写主机,做到分担压力

问题:

(1)主从机同步不是实时的会慢,比如新建了一个用户,读取时可能没同步过来,读不到。解决方法:可以jdbc驱动强制去读主库

(2)主库内部,undo/redo log与bin log是分布式的事务,undo/redo log成功了但是bin log失败了(磁盘坏了或网络原因),这样mysql也认为事务成功了,所以

bin log不能真正反应主库的实际情况

原文地址:https://www.cnblogs.com/t96fxi/p/12122177.html