그auto_explain모듈은 다음을 제공합니다. 느린 명령문의 실행 계획을 기록하는 수단 실행할 필요 없이 자동으로설명손으로. 이는 특히 최적화되지 않은 쿼리를 대규모로 추적하는 데 도움이 됩니다. 응용 프로그램.
이 모듈은 SQL 액세스 가능한 기능을 제공하지 않습니다. 그것을 사용하려면, 간단히 서버에 로드하면 됩니다. 에 로드할 수 있습니다. 개별 세션:
LOAD 'auto_explain';
(그렇게 하려면 수퍼유저여야 합니다.) 보다 일반적인 사용법은 다음과 같습니다. 포함하여 모든 세션에 미리 로드합니다.auto_explaininshared_preload_librariesin스포츠 토토 결과.conf. 그러면 추적할 수 있습니다 언제 발생하든 쿼리가 예기치 않게 느려집니다. 물론 이에 대한 오버헤드 비용이 있습니다.
다음을 제어하는 여러 구성 매개변수가 있습니다. 의 행동auto_explain. 참고하세요 기본 동작은 아무것도 하지 않는 것이므로 최소한 설정해야 합니다.auto_explain.log_min_duration당신이 결과를 원해요.
auto_explain.log_min_duration은 최소 명령문 실행 시간(밀리초)입니다. 그러면 문의 계획이 기록됩니다. 이를 0으로 설정하면 모든 계획이 기록됩니다. 마이너스원( 기본값)은 계획 로깅을 비활성화합니다. 예를 들어, 만약 당신이 으로 설정하세요250ms그러면 모두 250ms 이상 실행되는 명령문은 기록됩니다. 오직 슈퍼유저는 이 설정을 변경할 수 있습니다.
auto_explain.log_analyze원인분석 설명출력, 그냥이 아니라설명출력, 실행 계획이 기록될 때 인쇄됩니다. 이것 매개변수는 기본적으로 꺼져 있습니다. 슈퍼유저만 변경할 수 있습니다. 이 설정입니다.
참고:이 매개변수가 켜져 있으면, 모든 문에 대해 계획 노드별 타이밍이 발생합니다. 실행될 만큼 오래 실행되는지 여부에 관계없이 실행됩니다. 실제로 기록됩니다. 이는 매우 큰 영향을 미칠 수 있습니다. 성능에 부정적인 영향을 미칩니다.
auto_explain.log_verbose원인자세한 설명출력, 그냥이 아니라설명출력, 실행 계획이 기록될 때 인쇄됩니다. 이것 매개변수는 기본적으로 꺼져 있습니다. 슈퍼유저만 변경할 수 있습니다. 이 설정입니다.
auto_explain.log_nested_statements원인 중첩된 명령문(함수 내에서 실행되는 명령문) 로깅을 고려합니다. 꺼져 있을 때만 최상위 쿼리 계획이 기록됩니다. 이 매개변수는 꺼져 있습니다. 기본적으로. 슈퍼유저만 이 설정을 변경할 수 있습니다.
이 매개변수를 설정하려면스포츠 토토 결과.conf파일, 추가해야 합니다auto_explain에custom_variable_classes. 일반적인 사용법은 다음과 같습니다:
# 스포츠 토토 결과.conf shared_preload_libraries = 'auto_explain' custom_variable_classes = 'auto_explain' auto_explain.log_min_duration = '3초'
postgres=# LOAD 'auto_explain';
postgres=# SET auto_explain.log_min_duration = 0;
postgres=# 선택 개수(*)
pg_class, pg_index에서
여기서 oid = indrelid AND indisunique;
이것은 다음과 같은 로그 출력을 생성할 수 있습니다:
로그: 기간: 0.986ms 계획:
집계(비용=14.90..14.91행=1너비=0)
- 해시 조인(비용=3.91..14.70행=81너비=0)
해시 조건: (pg_class.oid = pg_index.indrelid)
- pg_class의 시퀀스 스캔(비용=0.00..8.27행=227너비=4)
- 해시(비용=2.90..2.90행=81너비=4)
- pg_index의 시퀀스 스캔(비용=0.00..2.90행=81너비=4)
필터: indisunique
명령문: SELECT 개수(*)
pg_class, pg_index에서
여기서 oid = indrelid AND indisunique;
이타가키 타카히로<itagaki.takahiro@oss.ntt.co.jp