在 RedShift 查詢處理程序

最近遇到 RedShift 會卡住的問題,所以追了一下是誰在佔用資源。

最近遇到 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_RECENTSSTV_INFLIGHT 中能看到的查詢指令都會只有前面一部分;想看完整的指令的話可以從 STL_QUERY 找到:

SELECT *
FROM stl_query
;

Query ID, transaction ID 及 process ID 在 STL_QUERY 都有,可以直接拿對應的 ID 來查詢。