ablog

不器用で落着きのない技術者のメモ

Redshift でユーザー別のデータベース接続数の推移を調べる

Redshift でユーザー別のデータベース接続数の推移を調べる。

調査クエリ

WITH RECURSIVE time_series(time_value) AS (
/* Recursive CTE で過去 7 日間の 1 分ごとの時間を生成 */
  -- 開始時点(7日前)
  SELECT date_trunc('minute', dateadd(day, -7, GETDATE()))       
  UNION ALL           
  -- 現在までの1分刻み
  SELECT dateadd(minute, 1, time_value)                  
  FROM time_series                      
  WHERE time_value < date_trunc('minute', GETDATE())
),session_timeline AS (
/* セッションごとの開始、終了を整理 */
    SELECT 
    user_name
    ,process
    ,starttime as connection_start
    ,NVL(endtime, '9999-12-31 00:00:00'::timestamp) as connection_end -- まだ接続が切れていない場合は 9999/12/31 を返す
    FROM STL_SESSIONS
--    WHERE user_name not in ('rdsdb', 'IAM:awsuser') 
)
SELECT 
 t.time_value
,c.user_name
,COUNT(c.user_name) as session_count
FROM time_series t
LEFT OUTER JOIN session_timeline c
ON t.time_value >= c.connection_start AND t.time_value <= c.connection_end --time_value 時点で接続している
GROUP BY 
 t.time_value
,c.user_name
HAVING session_count > 0
ORDER BY time_value DESC;

調査結果

  • ユーザー別データベース接続数

  • CloudWatch メトリクスでの総データベース接続数