使用kill命令終止使用者會話以及top命令檢視cpu高問題
阿新 • • 發佈:2022-05-18
某些時候使用SP_CLOSE_SESSION(會話號)會終止不掉使用者的會話,V7.1.5.68-Build(2016.04.06-67270trunc)以後的版本可支援在Linux作業系統上直接kill使用者的會話執行緒,在緊急情況下可以使用這種方法。
注意開啟使用者執行緒標記(UTHR_FLAG=1)時不能使用。
1. v$sessions中增加了thrd_id,代表了使用者會話執行緒的ID,可查詢要終止會話對應的會話執行緒ID;
2. 在Linux作業系統中使用kill thrd_id殺掉使用者會話。
使用者會話執行緒對應的名稱為dm_sql_thd,可以v$threads檢視中查詢到。
另外也可以通過top -H -p 服務程序ID 命令檢視dmserver中執行緒的執行情況。
1、檢視資料庫程序id
ps -ef|grep dms
2、資料庫程序id是xxx,通過top命令檢視CPU使用率高的pid
top Hp xxx
可以看到cpu使用率高的pid是yyy
3、通過pid檢視資料庫中對應的會話
select SESS_ID, USER_NAME , SQL_TEXT , TRX_ID , THRD_ID , CREATE_TIME, CLNT_IP from v$sessions WHERE "V$SESSIONS".THRD_ID IN (5638);
4、可以看到會話id為zzzzzz
5、CPU使用率高的原因是zzzzzz會話的“select * from SYS.DBA_OBJECTS CONNECT BY level<10000”語句,然後對這個語句進行優化,如果想立即降低CPU使用率,在確認不影響資料的情況下可以殺死這個會話到達降低CPU使用率的目的。