最近连续几天,mysql数据库会运行中假死,记录一下排查过程。
1、在数据库相应缓慢的时候,用client连接上去,执行show processlist 命令,
查看是哪条语句执行缓慢,或者哪些语句执行缓慢。查询结果会列出当前正在执行哪些语句,以及执行了多长时间,当前执行状态等信息。
2、检查缓慢语句设计的表和字段,判断是否表数据量过大,或者查询条件的字段需要加索引。
3、检查是否有存储过程或者函数设计到DDL语句,DDL操作会产生metadatalock,建议业务低峰期操作。
基本上按照上面三条检查排除能解决一大部分的常见问题了。
比如,我们这次是由于日志log表数据量过大,超过800W了。导致很多数据统计相关联查询语句执行缓慢,按照惯例是需要半年把历史数据迁移到历史库去,避免经常查询的表数据过大。