Search
Duplicate

Slow Query 조회 방법

문서번호 : 11-284243

Document Information

최초 작성일 : 2022.05.10
최종 수정일 : 2022.05.11
이 문서는 아래 버전을 기준으로 작성되었습니다.
SinglestoreDB : 7.8

Goal

Slow query를 검색하고, 분석하는 방법

Solution

1.
PLANCACHE 는 SingleStore DB가 컴파일하고 실행한 모든 쿼리문과 각 계획과 관련된 누적 쿼리 실행 통계를 보여줍니다. 아래의 쿼리는 평균 실행 시간이 3초 이상인 SELECT 쿼리를 조회 하는 예제입니다. 또한, 쿼리를 수정하여 database 별로 필터링 하거나, 특정 유형의 쿼리를 찾거나, 평균 메모리 사용량이 가장 많은 쿼리를 찾을 수 있습니다
SELECT database_name, activity_name, query_text , decode(plan_type, 'MBC', 'Interpreted', 'LLVM', 'Compiled', plan_type ) as plan_type , commits as executions, rollbacks as exec_fails , rowcount, execution_time , average_exec_time, average_memory_use FROM information_schema.plancache WHERE query_text LIKE 'select%' and average_exec_time > 3000 ORDER BY average_exec_time ;
SQL
복사
*참고: 명령을 실행한 Database에 따라, 동일한 쿼리여도 activity_name 은 다릅니다. activity에 대한 내용은 아래 references link 를 참조하십시오.
2.
MV_ACTIVITIES_CUMULATIVE 는 클러스터의 모든 노드에서 완료되고 현재 실행 중인 작업의 상위 수준 요약 프로필입니다. MV_ACTIVITIES_CUMULATIVE 를 조회하면, PLANCACHE 보다 자세한 내용을 알 수 있습니다. PLANCACHE 에서 조회한 activity_name, query_text 를 이용하여, CPU/ LOCK/ DISK/ NETWORK 의 누적 소요 시간을 알 수 있습니다.
SELECT a.activity_name, q.query_text, a.cpu_time_ms, a.cpu_wait_time_ms, a.lock_time_ms, a.disk_time_ms, a.network_time_ms FROM information_schema.mv_activities_cumulative a LEFT JOIN information_schema.mv_queries q ON a.activity_name = q.activity_name WHERE q.activity_name = '[ACTIVITY NAME]';
SQL
복사
SELECT a.activity_name, q.query_text, a.cpu_time_ms, a.cpu_wait_time_ms, a.lock_time_ms, a.disk_time_ms, a.network_time_ms FROM information_schema.mv_activities_cumulative a LEFT JOIN information_schema.mv_queries q ON a.activity_name = q.activity_name WHERE q.query_text like 'select%';
SQL
복사
*참고: query_text 는 parameter 로 변환한 값이 사용됩니다. (@: 정수, ^: 문자열, ?: insert 쿼리)
3.
MV_ACTIVITIES_EXTENDED_CUMULATIVE 는 클러스터의 모든 노드에서 완료되고 현재 실행 중인 작업에 대한 자세한 프로필입니다. MV_ACTIVITIES_EXTENDED_CUMULATIVE 를 조회하면, MV_ACTIVITIES_CUMULATIVE 의 세부 내용을 파티션 별로 알 수 있습니다.
SELECT * FROM information_schema.mv_activities_extended_cumulative WHERE aggregator_activity_name = '[ACTIVITY NAME]';
SQL
복사
*참고: 자세한 프로필은 파티션의 정보까지 포함합니다. 동일한 쿼리지만, aggregator의 activity_name과 partition의 activity_name은 다릅니다. 따라서, 기준이 되는 컬럼은 aggregator_activity_name 입니다.
4.
해당 쿼리를 조회하여, 실행 계획을 알 수 있습니다.
EXPLAIN [EXTENDED | JSON | DUPLICATE | REPRO] [INTO OUTFILE file_name] { select_statement | insert_select_statement | update_statement | delete_statement }
SQL
복사

References

History

일자
작성자
비고
2022.05.10
wee
신규
2022.05.11
wee
내용 추가, 쿼리 수정