自分用メモ。
ある時間以降に実行されたクエリの概要をさくっと把握したい
Redshift がなんかむっちゃ重くなってる… みたいなときに投げる想定。
なお、いずれの日時指定も UTC 時間で指定する必要があることに注意。
SELECT や INSERT を対象とする場合
SELECT
query AS query_id,
xid,
LEFT(querytxt, 50) AS query,
starttime,
endtime,
(endtime - starttime) / 1000000.0 AS second
FROM
stl_query
WHERE
starttime >= CAST('2015-12-25 01:00' AS TIMESTAMP)
AND database = 'hogehoge' -- データベースを絞り込む場合
ORDER BY
starttime;
DDL 系のクエリを対象とする場合
CREATE TABLE
や ALTER TABLE
のログは stl_query
ではなく stl_ddltext
テーブルに記録されている。
SELECT
xid,
LEFT(text, 50) AS query,
starttime,
endtime,
(endtime - starttime) / 1000000.0 AS second
FROM
stl_ddltext
WHERE
starttime >= CAST('2015-12-25 01:00' AS TIMESTAMP)
AND sequence = 0
ORDER BY
starttime;
その他クエリも確認したい場合
GRANT などは、 stl_utilitytext
テーブルを参照する必要がある。
SELECT
xid,
LEFT(text, 50) AS query,
starttime,
endtime,
(endtime - starttime) / 1000000.0 AS second
FROM
stl_utilitytext
WHERE
starttime >= CAST('2015-12-25 01:00' AS TIMESTAMP)
AND sequence = 0
ORDER BY
starttime;
文字列的に長すぎて Management console 上だと見切れるクエリの全容を把握したい
クエリが 4,000 文字以下の場合
stl_query システムテーブルを覗けば OK。
SELECT
querytxt
FROM
stl_query
WHERE
query = 123456789 -- クエリ ID
クエリが 4,000 文字を超える場合
stl_query システムテーブルは最大 4,000 文字までしかクエリを表現できないので、長大なクエリを投げた場合は stl_querytext を参照するしかない。ただ、わりとクエリが重めっぽいので負荷状況に注意して投げたい。
SELECT
text
FROM
stl_querytext
WHERE
query = 123456789 -- クエリ ID
ORDER BY
sequence
なお、こちらのクエリで得られる結果には改行コードがバックスラッシュエスケースされた状態で含まれることに注意したい。