问题
- 最近出现页面访问非常慢,经过排查,发现数据库服务器负载非常高,cpu占用99%左右
- 数据库慢查询日志中的sql语句在正常负载下执行并不慢,但是在那一个时刻确是非常慢的
- 日志中,有大量的table lock,sleep等日志信息
- 数据库使用的mysql,使用的是MyIsam存储引擎
解决思路
- 最近出现页面访问非常慢,经过排查,发现数据库服务器负载非常高,cpu占用99%左右
- 数据库慢查询日志中的sql语句在正常负载下执行并不慢,但是在那一个时刻确是非常慢的
- 日志中,有大量的table lock,sleep等日志信息
- 数据库使用的mysql,使用的是MyIsam存储引擎
根据上述情况,明显为数据库压力过大,当然有很大可能是由于程序代码造成的问题,但是修改程序代价高昂,时间成本也很高
- 增加数据库服务器的台数
- 因为我们的服务的添加修改和删除接口不多,写入的需求较小,但是查询的需求非常大,基本都是浏览和查询,所以使用了读写分离,读写分离后数据库存储引擎就不需要调整了
- 写入使用一台服务器作为master,查询使用三台slave服务器分载数据库的读
数据库读写分离实现
- 所有的数据库接口都继承于BaseDao,
- BaseDao封装了两个数据源,一个是读库的数据源,一个是写库的数据源
- BaseDao所有对读封装的接口都使用读库的数据源
- BaseDao所有对写封装的接口使用写库的数据源