1、由于在代码找不到原因,作为运维的我提出的临时解决方案。
问题一、大量的查询sql进来,使得mysqlCPU暴增,卡死。解决方案,一般正常的mysql数据库事务不会超过20的,小于100
于是我就想当事务数量大于80 就kill 查询进程。使得系统能正常使用,否则系统直接崩溃。
然后用事件定时调度该存储过程。
DROP PROCEDURE IF EXISTS killprocess;
DELIMITER ;;
create PROCEDURE killprocess()
BEGIN
set @processnum=(SELECT count(*) FROM INFORMATION_SCHEMA.INNODB_TRX);
set @execsql=(SELECT replace(group_concat('kill ',trx_mysql_thread_id,';'),',','') FROM INFORMATION_SCHEMA.INNODB_TRX where trx_query not like '%insert%' or trx_query not like '%update%');
if @processnum > 80 then
set @esql=(select @execsql);
else
SET @esql="select 1";
END IF;
SELECT @esql;
PREPARE stmt FROM @esql; -- 预处理动态sql语句
EXECUTE stmt ; -- 执行sql语句
deallocate prepare stmt; -- 释放prepare
END
;;
call killprocess();
2、问