DBAtlas · 数据库运维图谱

终止(kill)会话 / 查询

Oracle

ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
-- To cancel only the running statement (18c+):
-- ALTER SYSTEM CANCEL SQL 'sid,serial#';

从 v$session 获取 sid 和 serial# 值。IMMEDIATE 会立即开始回滚。

PostgreSQL

-- Cancel only the running query (the session stays):
SELECT pg_cancel_backend(pid);
-- Close the session entirely:
SELECT pg_terminate_backend(pid);

先尝试 pg_cancel_backend;若无效,再使用 pg_terminate_backend。

MySQL

-- Kill only the query:
KILL QUERY <id>;
-- Close the connection entirely:
KILL CONNECTION <id>;

<id> 值即 processlist 中的 Id 列。

SQL Server

KILL <session_id>;
-- To see rollback progress:
-- KILL <session_id> WITH STATUSONLY;

KILL 会回滚未提交的事务;对于大事务,回滚可能耗时很长。

MongoDB

db.killOp(<opid>)

从 db.currentOp() 输出的 opid 字段获取 opid 值。

Redis

CLIENT KILL ID <client-id>
# or by address: CLIENT KILL ADDR 10.0.0.5:6379

使用 CLIENT LIST 获取 client-id。已在运行的单个命令无法中断(Lua 脚本除外:SCRIPT KILL),只能等待其完成。若要在不断开连接的情况下释放正在等待 BLPOP/XREAD BLOCK 等阻塞命令的客户端,使用 CLIENT UNBLOCK <client-id> [TIMEOUT|ERROR]。CLIENT UNPAUSE 仅恢复被 CLIENT PAUSE 暂停的客户端。

在 DBAtlas 中打开 →