redash のスロークエリを特定する
こんにちは、 @kz_morita です。
Redash で重いクエリを特定するためのクエリについて紹介します。
slow query の特定 今回は Snowflake のコストをモニタリングする過程で、Redash のクエリ実行が重いことがわかったので特に思いクエリを特定するためのクエリを作成しました。
以下に SQL を記載します。
withquery_statsas(selectquery_hash,round(cast(avg(runtime)asnumeric),2)asavg_runtime-- 平均実行時間 ,max(retrieved_at)aslast_executed,count(1)asrun_count--実行回数 ,sum(CASEWHENretrieved_at>=CURRENT_TIMESTAMP-INTERVAL'10 days'THEN1else0END)aslast_10days_run_count-- 直近10日実行回数 fromquery_resultswhereretrieved_atbetween'{{ date.start }}'and'{{ date.end }}'-- 期間指定 anddata_source_idin(selectidfromdata_sourceswheretype='snowflake')groupbyquery_hash)selectq.id,q.name,st.avg_runtime,st.run_count,last_10days_run_count,st.avg_runtime*last_10days_run_countasscore,last_executedfromqueriesqjoinquery_statsstusing(query_hash)wherenotq.is_archivedorderbyscoredesclimit100;このクエリでは、直近 10 日の実行回数と平均実行時間を元にスコアを計算し、重いクエリを特定しています。
Redash 管理用の Postgresql DB に query_results テーブルがあり、こちらに各クエリの実行結果や処理時間があるため、こちらのテーブルを操作することで時間がかかっているクエリを特定することができます。
まとめ Redash のクエリ実行時間をモニタリングすることで、重いクエリを特定し、改善のためのアクションを取ることができます。 Redash の管理用のテーブルを用いれば様々な情報を取ることができるため便利です。重いクエリが叩かれ続けないように継続的に確認しようと思いました。