통계 이해

완료됨

쿼리가 실행되면 데이터에 액세스하는 방법을 결정하는 계획을 만들어야 합니다. 예를 들어 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 보기를 사용하지 않으면 아무런 이점이 없습니다. pg_stat_statements을 유지 관리하는 데는 오버헤드가 있으며, 이는 최대 50%까지 될 수 있습니다. 특정 시나리오에서는 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. 저장을 선택합니다.