oracle
alter system kill session 'sid,serial#' immed;
(根据v$session中查出sid和serial#进行替换)
这里提供一个常用脚本,支持跨实例kill会话 (替换&1条件或放到脚本@调用都行)
select 'alter system kill session '''||sid||','||serial#||decode(inst_id,1,',@1',2,',@2')||''' immediate -- '||username||'@'||machine||' ('||program||');'from gv$session where &1 and sid != (select sid from v$mystat where rownum = 1) ;
操作系统层kill
ps -ef |grep LOCAL=NO|grep -v grep|awk '{print $2}'|xargs kill -9
mysql
根据processlist中ID直接kill
kill **;
批量kill
SELECT CONCAT('kill ',id,';') FROM information_schema.PROCESSLIST where db='mysql';
操作系统中操作(要求登录到数据库主机)
杀掉当前所有的MySQL连接mysqladmin -uroot -p processlist|awk -F "|" '{print $2}'|xargs -n 1 mysqladmin -uroot -p kill
杀掉指定用户运行的连接,这里为Mike
# 假定kill掉所有ZZZ用户的线程
mysqladmin -uroot -p processlist|awk -F "|" '{if($3 == "Mike")print $2}'|xargs -n 1 mysqladmin -uroot -p kill
postgresql
删除进程有两个内置函数
1.pg_cancel_backend(pid)
2.pg_terminate_backend(pid)
第一个函数只对取消查询操作有效,第二个则等同于OS的kill pid
批量kill会话
select pg_terminate_backend(pid) from pg_stat_activity where pid <> pg_backend_pid() and datname='mydb' and application_name='psql';
操作系统层批量kill
ps -ef|grep postgres|grep idle |awk '{print $2}' | xargs kill
openGauss
语法格式
ALTER SYSTEM KILL SESSION 'session_sid, serial' [ IMMEDIATE ];
参数说明
-
session_sid, serial
会话的SID和SERIAL(获取方法请参考示例)。
-
IMMEDIATE
表明会话将在命令执行后立即结束。
--查询会话信息。
postgres=#SELECT sa.sessionid AS sid,0::integer AS serial#,ad.rolname AS username FROM pg_stat_get_activity(NULL) AS saLEFT JOIN pg_authid ad ON(sa.usesysid = ad.oid)WHERE sa.application_name <> 'JobScheduler';
--结束SID为140131075880720的会话。postgres=# ALTER SYSTEM KILL SESSION '140131075880720,0' IMMEDIATE;
pg_stat_get_activity(null)获取的是PG视图pg_stat_activity的信息但看起来没获取全
我只试验了使用application_name可以过滤
SELECT sa.sessionid AS sid,0::integer AS serial#,ad.rolname AS username FROM pg_stat_get_activity(NULL) AS saLEFT JOIN pg_authid ad ON(sa.usesysid = ad.oid)WHERE sa.application_name <> 'JobScheduler' and application_name='gsql';
操作系统层批量kill
ps -ef|grep postgres|grep -v grep |awk '{print $2}' | xargs kill