处理mysql大量无用sql进来和不释放事务问题

本文介绍了在遇到MySQL因大量查询SQL导致CPU飙升及事务不释放导致行锁问题时的处理方法。临时解决方案包括:当事务数量超过80时,通过存储过程kill查询进程;对于执行完毕但事务仍显示running的情况,检查并解决事务释放问题。同时,确保事件调度器开启以执行相关任务。
摘要由CSDN通过智能技术生成

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、问

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值