管理数据库有时需要终止会话,例如终止占用封锁或系统资源过多的会话。
1. 指定需要终止的会话 ¶
终止会话需要指定会话的pid。 可以通过视图sys_stat_activity查找特定会话的pid。 示例,查找用户为kingbase的会话pid和会话状态:
SELECT pid, state FROM sys_stat_activity WHERE usename = 'kingbase';
pid | state
-------+--------
26212 | active 26292 | active
(4 rows)
2. 终止会话 ¶
终止会话将结束会话并断开客户端到服务端的连接。会话正在执行的事务会由于连接断开回滚。 使用sys_terminate_backend(integer)函数终止会话,参数为会话的pid。 示例,终止pid为26212的会话:
SELECT sys_terminate_backend(26212);
sys_terminate_backend
3. 取消会话执行的SQL语句 ¶
某一会话执行的SQL语句占用过多资源影响业务时,可以通过取消会话执行的SQL代替终止会话。会话执行SQL所在的事务将回滚。 使用sys_cancel_backend(integer)函数取消会话执行的SQL语句,参数为会话的pid。 示例,取消pid为26212的会话执行的SQL语句:
SELECT sys_cancel_backend(26212);
sys_cancel_backend