oracle数据库 杀进程,数据库应急杀进程脚本
(1)數據庫內操作:
方案一,較保守、風險低,但是針對高并發的系統效果不好。因為kill的速度慢,跟不上再次上來的會話。
SELECT 'select pg_terminate_backend('||pid||');' FROM pg_stat_activity
WHERE pid <> pg_backend_pid() -- 不kill掉自己的進程
and datname='ZZZ' --涉及到的數據庫名
and usename='ZZZ' --涉及到的用戶名
and query like '%ZZZ%' – 涉及到的語句
order by (now()-query_start) desc – 根據執行時間長短排序,先kill執行時間長的
;
方案二,可以針對高并發系統,會話上來很快,且kong端雖然限流但是還是沒有限制住(可能是開發沒找對接口,報給運維限制了kong,但是還是有大量的會話進來)
1. 先確認pid對應的sql是需要kill的sql,沒有別的類似相似的sql干擾:
SELECT pid,query FROM pg_stat_activity
WHERE pid <> pg_backend_pid()
and datname='XXX'
and usename='YYY' and state='active'
and query like '%ZZZZZZZZ%'
order by (now()-query_start) desc;
如:
SELECT pid,query FROM pg_stat_activity
WHERE pid <> pg_backend_pid()
and datname='flysafe_websdite'
and usename='app_rw' and state='active'
and query like '%SELECT * FROM "quiz_info" WHERE "quiz_info"."deleted_at" IS NULL AND (("questionnaire_id" IN ($1)) AND (enc_sn = $2))%'
order by (now()-query_start) desc;
2.然后批量循環kill session
select pg_terminate_backend(pid) from (SELECT pid FROM pg_stat_activity
WHERE pid <> pg_backend_pid()
and datname='XXX'
and usename='YYY' and state='active'
and query like '%ZZZ%'
) a \watch 5;
如:
select pg_terminate_backend(pid) from (SELECT pid FROM pg_stat_activity
WHERE pid <> pg_backend_pid()
and datname='flysafe_websdite'
and usename='app_rw' and state='active'
and query like '%SELECT * FROM "quiz_info" WHERE "quiz_info"."deleted_at" IS NULL AND (("questionnaire_id" IN ($1)) AND (enc_sn = $2))%'
) a \watch 5;
總結
以上是生活随笔為你收集整理的oracle数据库 杀进程,数据库应急杀进程脚本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 总账 gl,oracle
- 下一篇: 开机进不了bios设置怎么办(微星主板按