통계 이해

완료됨

쿼리가 실행되면 데이터에 액세스하는 방법을 결정하는 계획을 만들어야 합니다. 예를 들어 SELECT 쿼리가 모든 행을 반환하는 경우 인덱스 사용에 대한 이점이 없으며 전체 테이블을 검색하는 것이 더 효율적입니다. 이 시나리오에서는 쿼리를 계획하는 것이 간단하지만 대부분의 쿼리 계획은 쉽게 해결할 수 없습니다.

$10.00에서 $20.00 사이의 모든 주문을 검색하는 쿼리를 실행하는 시나리오를 가정해 보겠습니다. 처음에는 쿼리가 테이블의 모든 데이터를 반환하는지 또는 작은 하위 집합만 반환하는지 알 수 없습니다. 이 알 수 없는 경우 데이터를 볼 때까지 쿼리 전략을 계획하기가 어렵습니다. 테이블에 구매 가격이 $1.00에서 $800.00 사이의 주문이 포함된 경우 인덱스를 사용하여 데이터의 작은 하위 집합을 검색할 수 있습니다. 그러나 적절한 쿼리 플랜을 생성하기에 정보가 충분하지 않을 수 있습니다. 실제로 주문의 구매 가격은 $1.00에서 $800.00 사이이지만 주문의 95%는 $10.00에서 $20.00 사이이며 데이터 스캔이 실제로 가장 효과적인 플랜입니다.

이전 예제와 같은 시나리오에서는 최적의 쿼리 플랜을 사용할 수 있도록 PostgreSQL에 자세한 통계가 필요합니다.

계획 및 실행 통계를 모니터링하기 위해 pg_stat_statements라는 PostgreSQL 확장이 있습니다. pg_stat_statements는 기본적으로 Azure Database for PostgreSQL을 사용하도록 설정되며 pg_read_all_stats 역할의 구성원은 여러 pg_stat 보기를 사용하여 통계를 쿼리할 수 있습니다. 다음 쿼리는 pg_stat_activity 보기를 사용하여 쿼리 작업을 반환합니다.

SELECT * FROM pg_stat_activity;

pg_stat_activity 쿼리의 스크린샷.

pg_stat_statements 끄기

쿼리가 고유하고 동일한 쿼리를 주기적으로 반복하지 않는 경우 기록 쿼리 데이터는 유용하지 않습니다. 또한 pg_stat 보기를 사용하지 않으면 아무런 이점이 없습니다. 최대 50%까지 pg_stat_statements를 유지 관리하는 오버헤드가 있으며 이러한 시나리오에서 pg_stat_statements 추적을 해제할 수 있습니다.

pg_stat_statements의 추적을 해제하려면 다음 단계를 수행합니다.

  1. Azure Portal로 이동하고 Azure Database for PostgreSQL 서버를 선택합니다.

  2. 서버 매개 변수를 선택하고 pg_stat_statements.track 설정으로 이동합니다.

    pg_statements 명령의 스크린샷.

  3. 추적을 해제하려면 NONE을 선택합니다.

  4. 더 정확하게 추적하려면 ALL을 선택합니다.

  5. 기본 설정은 TOP입니다.

  6. 저장을 선택합니다.