redash에 연결된 데이터 소스를 운영 할 때 확인하고 싶은 redash metadata
8155 단어 redash
18일째의 Redash의 metadata에서 유용한 정보를 가져 오는 이야기 과 비슷한 내용이 되어 있습니다.
개요
Redash의 데이터 소스가 되는 데이터베이스(Redshift 등)를 운용하고 있으면, 드물게 심한 쿼리(실행에 시간이 걸리는 쿼리나, 에러가 되는 쿼리)도 정기적으로 칠 수 있게 되어 매운 생각을 하게 됩니다.
특히 Redshift를 운영하면 엄격하게 어떤 쿼리가 오류를 발생시켰는지 나중에 추적하기가 어렵거나 STL_ERROR 합니다.
여기에서는 그런 매운 생각을 할 때 자주 확인하는 쿼리를 정리해 둡니다.
버젼으로서는 schedule_failures 이 도입된 2.0 이후의 이용을 상정하고 있습니다.
사용하는 테이블
Redash의 데이터가 저장되는 PostgreSQL을 데이터 소스로 등록하고, 주로 다음의 2개의 테이블을 이용합니다.
테이블 이름
개요
query_results
Query 실행 결과가 저장됨
queries
조회 정보가 저장됨
주의점
Query를 변경해 버리면 별개의 것이므로 주의가 필요합니다.
Redash에서 확인할 수 있는 것은 거기까지 많지 않으므로 별도 데이터 소스 측의 시스템 테이블 등도 확인이 필요합니다.
일정 실행 중이고 오류가 있는 쿼리 찾기
오늘 발생한 오류를 확인합니다.
어떤 오류가 발생했는지는 DB에 저장되지 않으므로 주의가 필요합니다.
SELECT
id,
name,
query,
query_hash,
schedule,
schedule_failures
FROM
queries
WHERE
schedule_failures != 0
AND updated_at >= CURRENT_DATE
ORDER BY
schedule_failures DESC
;
queries.schedule_failures (은)는 쿼리의 실행에 성공했을 때에 0으로 돌아가기 그래서, 성공과 실패가 혼재하는 경우※라고 쿼리를 실행하는 타이밍에 따라서는 이 쿼리로 확인할 수 없을지도 모릅니다.
※ 예를 들면 데이터의 건수가 0건이라고 division by zero가 발생하지만, 항상 0건이라고 하는 경우는 없는 것 같은 경우.
당일 실행 횟수가 많은 쿼리 찾기
당일 실행 횟수가 많은 쿼리를 확인합니다.
다음 예제에서는 10회 이상 실행되는 쿼리만 추출합니다.
(그러나 실행에 실패하면 계산되지 않습니다.)
WITH q_r AS (
SELECT
query_hash AS q_r_hash,
COUNT(query_hash) AS run_count,
MAX(retrieved_at) AS recent_exec
FROM
query_results
WHERE
retrieved_at >= CURRENT_DATE -- 当日のデータのみを対象にする
GROUP BY
query_hash
)
SELECT
q.id,
q.query_hash,
q_r.run_count,
q_r.recent_exec,
q.schedule
FROM
queries as q
JOIN q_r
ON query_hash = q_r_hash
WHERE
run_count > 10 -- 10回より多く実行されたクエリのみ取得
ORDER BY
run_count DESC
;
이 쿼리나 아래의 실행시간이 걸리는 쿼리를 이용하여 DATA_SOURCE_ID 로 좁혀 QUERY 의 내용을 보고 불필요하게 자주 실행되어 부하를 걸고 있는 쿼리를 씻어내기도 합니다.
(실제로는, name나 query등 출력하는 형태로 이용할까라고 생각합니다.)
SCHEDULE을 보면, Every day at xx:xx와 같은 쿼리가 비교적 상위에 올라오거나 하고, 약간? 하지만 어느 정도의 경향은 보일까 생각합니다.
실행 시간이 걸리는 쿼리 찾기
지난 1주일 동안 평균적으로 시간이 오래 걸리는 검색어를 찾으려면 다음을 수행합니다.
실제로는, 이 정보를 바탕으로 접속처의 데이터 소스로 Slow Query가 되어 있지 않은지 별도 확인하는 등이 필요할까 생각합니다.
WITH q_r AS (
SELECT
query_hash AS q_r_hash,
COUNT(query_hash) AS run_count,
AVG(runtime) AS avg_spend -- 単位はsec
FROM
query_results
WHERE
retrieved_at >= CURRENT_DATE - integer '7' -- 過去1週間に実行されたクエリを対象にする
GROUP BY
query_hash
)
SELECT
q.id,
q.query_hash,
q_r.run_count,
q_r.avg_spend,
q.schedule
FROM
queries as q
JOIN q_r
ON query_hash = q_r_hash
WHERE
run_count > 7
ORDER BY
avg_spend DESC
;
Reference
이 문제에 관하여(redash에 연결된 데이터 소스를 운영 할 때 확인하고 싶은 redash metadata), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hideji2/items/ffc5ede1f20e194b9a56텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)