pg_stat_ch에서 가져옵니다.
이 도구는 SQL 문별 Counter를 ClickHouse Cloud로 스트리밍하는
오픈 소스 Postgres 확장 기능입니다. 텔레메트리는 데이터베이스를 떠나기 전에
Postgres 내부에서 정규화되며, 리터럴은 제거되고 플레이스홀더로 대체되므로
쿼리한 정확한 값은 텔레메트리 스트림에 들어가지 않습니다.
쿼리 인사이트 열기
- 한 화면에서 데이터베이스 상태를 점검할 수 있는 개요.
- 데이터베이스에서 실행된 모든 쿼리 패턴의 순위를 보여 주며, 의심되는 기준으로 정렬할 수 있는 느린 패턴 테이블.
- 개별 실행 내역을 최신순으로 나열하는 최근 쿼리 패널.
- 단일 패턴에 대한 모든 카운터를 집계해 보여 주는 세부 정보 플라이아웃.
개요
| Panel | What it shows |
|---|---|
| Queries / sec | 선택한 기간 기준으로 초당 비율로 환산한 쿼리량입니다. |
| Query latency | 평균, p50, p95, p99를 하나의 차트에 표시하므로, 지연 시간의 꼬리 구간이 중앙값과 벌어지기 시작하는 시점을 확인할 수 있습니다. |
| Operations breakdown | 워크로드가 실제로 SELECT, INSERT, UPDATE 및 기타 작업으로 어떻게 구성되는지 보여주는 도넛 차트입니다. |
| Rows returned / affected | 선택한 기간 동안 워크로드가 처리한 총 행 수입니다. |
| Buffer hit ratio | 공유 블록 적중 수와 공유 블록 읽기 수를 비교한 도넛 차트이며, 범례에는 총 CPU 시간이 표시됩니다. |
| Errors | 시간 경과에 따라 구분한 총 오류 수입니다. |
느린 쿼리 패턴
의심되는 항목을 기준으로 정렬하기
- Total runtime — 데이터베이스가 가장 많은 실제 경과 시간을 소비한 지점입니다.
- CPU time — 컴퓨트 사용량이 많은 패턴입니다.
- Calls — 호출 빈도가 높은 패턴입니다.
- Errors — 반복적으로 실패하는 패턴입니다.
- Avg / P50 / P95 / P99 / Max latency — 백분위수 기준으로 이상치를 보여줍니다.
- Rows returned, Blocks read, Blocks hit, WAL bytes — 엔진, 캐시 또는 write-ahead log를 통해 가장 많은 데이터를 이동시킨 패턴입니다.
테이블 범위 좁히기
- 데이터베이스
- 사용자
- 작업 (
SELECT,INSERT,UPDATE,DELETE, …) - 애플리케이션 — connection string에 있는
application_name
sales DB에서 수행하는 작업만 보여줘”
라는 요청은 드롭다운 2개로 처리할 수 있습니다. 필터 값은
인스턴스에서 실제로 실행된 내용을 기준으로 자동으로 채워집니다.
최근 쿼리
세부 정보 플라이아웃
- 쿼리 패턴 — 리터럴을
$1,$2, …로 대체한 정규화된 SQL과 클립보드에 복사하는 버튼입니다. - 집계 리소스 사용량 — 총 호출 수, 평균/P95/P99/최대 지연 시간, 총 런타임, 반환된 행 수, 캐시 적중률, 읽은 block 수, 적중한 block 수, CPU 시간, WAL 바이트, 오류를 포함한 13개의 통계 카드 그리드입니다.
- 쿼리 컨텍스트 — 이 패턴이 발생한 데이터베이스, 사용자, 작업, 애플리케이션입니다.
- 주목할 만한 실행 — 오류가 발생한 실행, 유난히 느린 실행, 대량의 결과를 반환한 실행을 전체 최근 목록보다 먼저 표시합니다.
- 최근 실행 — 동일한 패턴의 개별 실행이며, 실행별 카운터가 포함됩니다.
실행별 카운터
- 공유 블록 — read와 hit는 항상 표시되며, written과 dirtied는 0이 아닐 때만 표시됩니다.
- 로컬 및 임시 블록 작업 — 0이 아닌 임시 블록 작업은 sort 또는 hash가 디스크로 spill되었음을 의미합니다.
- 읽기 / 쓰기 시간 — CPU 시간과 별도로 표시되는 I/O 시간입니다.
- CPU 시간 — 사용자 시간과 시스템 시간이 각각 별도로 표시됩니다.
- 병렬 worker — 계획된 수와 실제로 시작된 수를 보여줍니다.
- JIT — 전체 JIT 컴파일 시간과 함수 개수입니다.
- WAL — 바이트 수와 레코드 수입니다.
쿼리 인사이트 API
동작 방식
Postgres에서 정규화되며, 전송 전에
pg_stat_ch는 parse-analyze 단계를 가로채 각 리터럴을
플레이스홀더($1, $2, …)로 바꾸고, 그 결과 패턴을 queryid를 키로 사용하는
백엔드별 LRU에 캐시합니다. 실행기가 SQL 문을 마치면, 그 캐시된 패턴이
이벤트에 첨부됩니다. 값이 포함된 정확한 SQL 문은 데이터베이스 밖으로
나가지 않습니다.
데이터베이스에 부담을 최소화
집계가 아닌 원시 이벤트
pg_stat_ch는 샘플링이 적용된 상태에서 실행된 각 SQL 문(최상위 및
중첩)에 대해 원시 이벤트 1개를 내보냅니다. UI의 모든 백분위수, 순위, 세부
분석은 동일한 이벤트 스트림에 대해 실행되는 ClickHouse 쿼리입니다.
고객이 사용하는 것과 동일한 엔진
오픈 소스
pg_stat_ch는 Apache 2.0 라이선스로 제공됩니다. 어떤 Postgres에서든 실행할 수 있고, 어떤
ClickHouse로든 전송할 수 있습니다. 소스 코드와 이슈는 다음에서 확인할 수 있습니다.
github.com/clickhouse/pg_stat_ch.
- 모니터링 대시보드 — 기본 제공 리소스 및 활동 차트
- Prometheus 엔드포인트 — 호스트 수준 메트릭을 자체 관측성 스택으로 스크레이프
- Managed Postgres OpenAPI — 느린 패턴과 최근 실행 내역을 프로그래밍 방식으로 조회
- 확장 기능 — Managed Postgres 인스턴스에서 사용할 수 있는 확장 기능
- GitHub의
pg_stat_ch— Query Insights를 지원하는 오픈소스 확장 기능