쿼리 저장소에서 데이터를 수집하는 방법

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

SQL Server 쿼리 저장소는 플라이트 데이터 레코더처럼 작동하며 쿼리 및 계획과 관련된 컴파일 및 런타임 정보를 지속적으로 수집합니다. 쿼리 관련 데이터는 내부 테이블에 유지되며 뷰 집합을 통해 사용자에게 표시됩니다.

보기

다음 다이어그램은 파란색 엔터티로 표시되는 컴파일 시간 정보를 사용하여 쿼리 저장소 뷰 및 해당 논리적 관계를 보여 둡다.

Query Store process views
설명 보기

보기 설명
sys.query_store_query_text 데이터베이스에 대해 실행된 고유한 쿼리 텍스트를 표시합니다. 쿼리 텍스트 전후의 주석 및 공백은 무시됩니다. 텍스트 내의 메모와 공백은 무시되지 않습니다. 일괄 처리의 모든 문은 별도의 쿼리 텍스트 항목을 생성합니다.
sys.query_context_settings 쿼리 실행에 사용되는 계획 관련 설정의 고유한 조합을 표시합니다. 계획에 영향을 주는 다른 설정으로 실행되는 동일한 쿼리 텍스트는 쿼리 키의 일부이므로 쿼리 저장소 context_settings_id 에서 별도의 쿼리 항목을 생성합니다.
sys.query_store_query 쿼리 저장소에서 별도로 추적 및 강제 적용되는 쿼리 항목입니다. 단일 쿼리 텍스트는 다른 컨텍스트 설정에서 실행되거나 저장 프로시저 및 트리거와 같은 다른 Transact-SQL 모듈 내부와 외부에서 실행되는 경우 여러 쿼리 항목을 생성할 수 있습니다.
sys.query_store_plan 컴파일 시간 통계로 쿼리에 대한 예상 계획을 표시합니다. 저장된 플랜은 을 사용하여 SET SHOWPLAN_XML ON가져오는 계획과 동일합니다.
sys.query_store_runtime_stats_interval 쿼리 저장소는 시간을 자동으로 생성된 시간 창(간격)으로 나누고 실행된 모든 계획에 대해 해당 간격에 대해 집계된 통계를 저장합니다. 간격의 크기는 구성 옵션 통계 수집 간격(Management Studio에서) 또는 INTERVAL_LENGTH_MINUTES ALTER DATABASE SET 옵션(Transact-SQL)을 사용하여 제어됩니다.
sys.query_store_runtime_stats 실행된 계획에 대한 집계된 런타임 통계입니다. 캡처된 모든 메트릭은 평균, 최소, 최대 및 표준 편차의 네 가지 통계 함수 형식으로 표현됩니다.

쿼리 저장소 뷰에 대한 자세한 내용은 쿼리 저장소를 사용하여 성능 모니터링의 "관련 뷰, 함수 및 프로시저" 섹션을 참조하세요.

쿼리 처리

쿼리 저장소는 다음 주요 지점에서 쿼리 처리 파이프라인과 상호 작용합니다.

  1. 쿼리가 처음으로 컴파일되면 쿼리 텍스트와 초기 계획이 쿼리 저장소로 전송됩니다.

  2. 쿼리가 다시 컴파일되면 쿼리 저장소에서 계획이 업데이트됩니다. 새 계획을 만드는 경우 쿼리 저장소는 쿼리에 대한 새 계획 항목을 추가하고 이전 계획 항목을 실행 통계와 함께 유지합니다.

  3. 쿼리를 실행하면 런타임 통계가 쿼리 저장소로 전송됩니다. 쿼리 저장소는 현재 활성 간격 내에서 실행된 모든 계획에 대한 정확한 집계 통계를 유지합니다.

  4. 컴파일 및 다시 컴파일 단계를 확인하는 동안 SQL Server는 쿼리 저장소에 현재 실행 중인 쿼리에 적용해야 하는 계획이 있는지 확인합니다. 강제 계획이 있고 프로시저 캐시의 계획이 강제 계획과 다른 경우 쿼리가 다시 컴파일됩니다. PLAN HINT가 해당 쿼리에 적용된 것과 동일한 방식으로 작동합니다. 이 프로세스는 사용자 애플리케이션에 투명하게 수행합니다.

다음 다이어그램은 이전 단계에서 설명한 통합 지점을 보여 줍니다.

Query Store process

설명

I/O 오버헤드를 최소화하기 위해 새 데이터가 메모리 내에 캡처됩니다. 쓰기 작업은 큐에 대기되고 나중에 디스크로 플러시됩니다. 다음 다이어그램에서 계획 저장소로 표시된 쿼리 및 계획 정보는 최소 대기 시간으로 플러시됩니다. 런타임 통계로 표시된 런타임 통계는 문 옵션으로 정의된 기간 동안 메모리에 DATA_FLUSH_INTERVAL_SECONDSSET QUERY_STORE 유지됩니다. Management Studio 쿼리 저장소 대화 상자를 사용하여 내부적으로 초로 변환되는 데이터 플러시 간격(분)에 대한 값을 입력할 수 있습니다.

Query Store process plan

추적 플래그 7745를 사용하는 동안 시스템이 충돌하거나 종료되는 경우 쿼리 저장소는 수집되었지만 아직 유지되지 않은 런타임 데이터를 정의한 기간DATA_FLUSH_INTERVAL_SECONDS까지 손실할 수 있습니다. 쿼리 캡처 성능과 데이터 가용성 간의 균형을 맞추기 위해 기본값인 900초(15분)를 사용하는 것이 좋습니다.

Important

최대 크기(MB) 제한은 엄격하게 적용되지 않습니다. 쿼리 저장소가 디스크에 데이터를 쓰는 경우에만 스토리지 크기가 확인됩니다. 이 간격은 데이터 플러시 간격 값에 의해 설정됩니다. 쿼리 저장소가 스토리지 크기 검사 사이의 최대 크기 제한을 위반하면 읽기 전용 모드로 전환됩니다. 크기 기반 정리 모드를 사용하는 경우 최대 크기 제한을 적용하는 정리 메커니즘도 트리거됩니다.

참고 항목

메모리 부족 시 런타임 통계는 DATA_FLUSH_INTERVAL_SECONDS로 정의된 것보다 먼저 디스크에 플러시될 수 있습니다.

쿼리 저장소 데이터를 읽는 동안 메모리 내 및 디스크 내 데이터는 투명하게 통합됩니다.

세션이 종료되거나 클라이언트 애플리케이션이 다시 시작되거나 충돌하는 경우 쿼리 통계가 기록되지 않습니다.

Query Store process plan information

참고 항목

쿼리 저장소를 사용한 성능 모니터링
쿼리 저장소 모범 사례
쿼리 저장소 카탈로그 뷰(Transact-SQL)