LoginSignup
10
8

More than 5 years have passed since last update.

Redshift にたまに投げる調査クエリのメモ

Last updated at Posted at 2015-12-01

自分用メモ。

ある時間以降に実行されたクエリの概要をさくっと把握したい

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 TABLEALTER 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

なお、こちらのクエリで得られる結果には改行コードがバックスラッシュエスケースされた状態で含まれることに注意したい。

10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8