问题及解决
线上抛出部分功能页面加载不出来,查看k8s的POD,以及服务器,发现服务器CPU在该时间段飙升,没降下来,经排查是慢sql查询数据库时,将tidb所在服务器的cpu打满,此时首先做的是恢复业务。先连接上tidb,查出慢sql,kill掉,等待业务恢复。此时只是暂时了解决问题,根本上还是要从sql本身出发,将问题反馈给对应负责人,对应开发对代码进行优化处理慢sql,保证后续不会再出现
全库查询阻塞慢sql,并kill掉
select concat('kill ', id, ';') from information_schema.processlist where Command != 'Sleep' and Time > 10 order by Time desc;
按dbname查询单个库的慢sql,kill
show processlist
select concat('kill ', id, ';') from information_schema.processlist where Command != 'Sleep' and db = 'saas'
将查出来的SQL ID拷贝出来,用root用户在对应的库下执行
mysql> kill id;
mysql行锁
#找出所有处于锁等待状态的事务
mysql> SELECT * FROM information_schema.innodb_trx WHERE trx_state = 'LOCK WAIT';