本文记录是京东双11前夕一次线上系统问题,从问题这方面入手,引发的对系统稳定性因素的思考及总结。“千里之堤毁于蚁穴“,如何发现系统中”蚁穴“是我们系统开发者不断追求的目标。
夜幕降临
方法异常线上报警,定位日志,空指针异常,查询数据库结果为空,定位此业务线查询从库,数据库正常,查询结果正常,初步确定是主从延迟。问题在几秒钟恢复,影响次数个位数,接下来几个月数次出现此问题,直到双11备战第一天延迟更加严重了。
长夜慢慢
定位主从同步延迟问题了,查看从库的机器情况及慢日志。从库执行大量的删除某表记录操作,性能非常差。在看其执行语句,发现没有索引,在看下主库这张表上有这个索引。这种情况下为什么出现主从延迟高呢?在这里简单介绍下mysql主从同步原理。
mysql主从复制需要三个线程,master(binlog dump thread)、slave(I/O thread 、SQL thread)。
master
(1)binlog dump线程:当主库中有数据更新时,那么主库就会根据按照设置的binlog格式,将此次更新的事件类型写入到主库的binlog文件中,此时主库会创建log dump线程通知slave有数据更新,当I/O线程请求日志内容时,会将此时的binlog名称和当前更新的位置同时传给slave