DM8:达梦数据库批量关闭会话

DM8:达梦数据库批量关闭会话

环境介绍

  • 在大量SELECT 活动会话堆积,导致CPU占用极高,可以使用下面语句进行批量关闭会话;

1 简洁 sql

BEGIN
    FOR V_SESSID IN (SELECT SESS_ID FROM V$SESSIONS WHERE SQL_TEXT LIKE 'SELECT%')
    LOOP
        SP_CLOSE_SESSION(V_SESSID.SESS_ID);
    END LOOP;
END;

2 完整sql

/*
disql 打印日志需要开启,先单独执行;图形化管理工具忽略
*/
--SET SERVEROUTPUT ON;

DECLARE

CURSOR C_SQL;
V_SESSID VARCHAR(32);
V_COUNT VARCHAR(8);
V_TEXT VARCHAR;
TYPE C_SESSION IS REF CURSOR RETURN V$SESSIONS%ROWTYPE;
V_SESSION C_SESSION; 
/*
WHERE 对V$SESSIONS 系统视图配置查询条件
根据需求选择WHERE 条件
*/

-- 关闭SELECT 开头的全部会话
V_WHERE VARCHAR(64) := 'WHERE SQL_TEXT LIKE ''SELECT%''';
--V_WHERE VARCHAR(64) := 'WHERE SQL_TEXT LIKE ''select%''';
-- 关闭全部会话
--V_WHERE VARCHAR(64) := 'WHERE SQL_TEXT NOT LIKE ''DECLARE%''';


BEGIN	
	-- 输出统计符合条件的会话数量
	OPEN C_SQL FOR 'SELECT COUNT(*) FROM V$SESSIONS ' || V_WHERE;
	LOOP
		FETCH C_SQL INTO V_COUNT;
		EXIT WHEN C_SQL%NOTFOUND;
		PRINT '总计:' || V_COUNT;
	END LOOP;
	CLOSE C_SQL;
	
	-- 关闭会话,并输出会话的SESS_ID
	OPEN C_SQL FOR 'SELECT SESS_ID FROM V$SESSIONS ' || V_WHERE;
		LOOP
			FETCH C_SQL INTO V_SESSID;
			EXIT WHEN C_SQL%NOTFOUND;
			PRINT V_SESSID;
			SP_CLOSE_SESSION(V_SESSID);
		END LOOP;
	CLOSE C_SQL;
	
	--输出未关闭的会话
	OPEN C_SQL FOR 'SELECT SESS_ID,SQL_TEXT FROM V$SESSIONS ' || V_WHERE;
		IF C_SQL%FOUND THEN
			LOOP
				FETCH C_SQL INTO V_SESSID,V_TEXT;
					EXIT WHEN C_SQL%NOTFOUND;
					PRINT '未关闭的会话:';
					PRINT 'SESS_ID: '||V_SESSID||', V_TEXT: '||V_TEXT;
					PRINT '可以重复执行此操作';
			END LOOP;
		ELSE 
			PRINT '会话已经全部关闭';
		END IF;
	CLOSE C_SQL;
	
	--输出全部会话
	--SELECT SESS_ID,SQL_TEXT,STATE,RUN_STATUS,USER_NAME,CLNT_TYPE,TIME_ZONE 时区,CREATE_TIME 创建时间,MSG_STATUS,LAST_RECV_TIME 最近接收时间,LAST_SEND_TIME 最近发送时间,CLNT_IP,CLNT_VER,THRD_ID FROM V$SESSIONS;
END;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值