最近遇到 RedShift 會卡住的問題,所以追了一下是誰在佔用資源。
STV_RECENTS
直接把需求丟進去 Google,便會直接看到 STV_RECENTS
的文件,此表格中可查詢到最近執行的指令清單。
表格中包含了使用者資訊、狀態、開始時間、執行時間(微秒)、指令(前 600 byte)、process ID 。
SELECT *
FROM stv_recents
WHERE
"status" = 'Running'
;
STV_INFLIGHT
STV_INFLIGHT
是另一張能查到正在跑的指令的表;相較於 STV_RECENTS
這裡帶著更完整的各種 ID:query ID, transaction ID 及 process ID,但少了一些些方便的資訊如使用者名稱。
SELECT * FROM stv_inflight;
停止工作
要停掉某個 process 則需要 CANCEL
:
CANCEL process_id;
process_id
在 STV_RECENTS 或 STV_INFLIGHT 都找得到。
降低優先級別
如果不想要直接殺掉查詢,那麼可以可以把它的優先級別調低,讓其他指令先跑;這可以透過 CHANGE_QUERY_PRIORITY
達成。
SELECT CHANGE_QUERY_PRIORITY(query_id, 'LOW');
query_id
得從 STV_INFLIGHT
取得。
查詢完整指令
在 STV_RECENTS
及 STV_INFLIGHT
中能看到的查詢指令都會只有前面一部分;想看完整的指令的話可以從 STL_QUERY
找到:
SELECT *
FROM stl_query
;
Query ID, transaction ID 及 process ID 在 STL_QUERY
都有,可以直接拿對應的 ID 來查詢。