쿼리 저장소에서 데이터를 수집하는 방법How Query Store Collects Data

이 항목은 다음에 적용됩니다. 예SQL Server(2016부터)예Azure SQL Database아니요Azure SQL Data Warehouse아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

쿼리 저장소는 쿼리 및 계획과 관련된 컴파일 및 런타임 정보를 지속적으로 수집하는 비행 데이터 레코더 로 작동합니다.Query Store works as a flight data recorder constantly collecting compile and runtime information related to the queries and plans. 데이터와 관련된 쿼리는 내부 테이블에 유지되고 뷰 집합을 통해 사용자에게 표시됩니다.Query related data is persisted in the internal tables and presented to users through a set of views.

Views

다음 다이어그램은 파란색 엔터티로 표시된 컴파일 시간 정보와 함께 쿼리 저장소 뷰와 논리적 관계를 보여 줍니다.The following diagram shows Query Store views and their logical relationships, with compile time information presented as blue entities:

query-store-process-2viewsquery-store-process-2views

보기 설명View Descriptions

보기View 설명Description
sys.query_store_query_textsys.query_store_query_text 데이터베이스에 대해 실행되는 고유 쿼리 텍스트를 표시합니다.Presents unique query texts executed against the database. 쿼리 텍스트 전후의 주석 및 공백은 무시됩니다.Comments and spaces before and after the query text are ignored. 텍스트 내의 주석 및 공백은 무시되지 않습니다.Comments and spaces inside text are not ignored. 배치의 모든 문은 별도 쿼리 텍스트 항목을 생성합니다.Every statement in the batch generates a separate query text entry.
sys.query_context_settingssys.query_context_settings 실행되는 쿼리의 설정에 영향을 주는 계획의 고유 조합을 표시합니다.Presents unique combinations of plan affecting settings under which queries are executed. context_settings_id 은(는) 쿼리 키의 일부이므로 설정에 영향을 주는 다른 계획으로 실행되는 동일한 쿼리 텍스트는 쿼리 저장소에 별도 쿼리 항목을 생성합니다.The same query text executed with different plan affecting settings produces separate query entry in the Query Store because context_settings_id is part of the query key.
sys.query_store_querysys.query_store_query 쿼리 저장소에서 개별적으로 추적되고 강제로 적용되는 쿼리 항목입니다.Query entries that are tracked and forced separately in the Query Store. 다른 컨텍스트 설정에서 실행되거나 다른 Transact-SQLTransact-SQL 모듈(프로시저, 트리거 등이 저장됨)의 외부 및 내부에서 실행되는 경우 단일 쿼리 텍스트는 여러 쿼리 항목을 생성할 수 있습니다.A single query text can produce multiple query entries if it is executed under different context settings or if it is executed outside vs. inside of different Transact-SQLTransact-SQL modules (stored procedures, triggers, etc.).
sys.query_store_plansys.query_store_plan 컴파일 시간 통계로 쿼리에 대한 예상 계획을 표시합니다.Presents estimated plan for the query with the compile time statistics. 저장된 계획은 SET SHOWPLAN_XML ON을(를) 사용하여 얻을 수 있는 것과 동일합니다.Stored plan is equivalent to one that you would get by using SET SHOWPLAN_XML ON.
sys.query_store_runtime_stats_intervalsys.query_store_runtime_stats_interval 쿼리 저장소는 시간을 자동으로 생성된 시간 창(간격)으로 분할하고 실행된 모든 계획에 대한 해당 간격에 집계 통계를 저장합니다.Query Store divides time into automatically generated time windows (intervals) and stores aggregated statistics on that interval for every executed plan. 간격의 크기는 통계 수집 간격 구성 옵션( Management StudioManagement Studio에서) 또는 ALTER DATABASE SET 옵션(Transact-SQL)을 사용하여 INTERVAL_LENGTH_MINUTES에 의해 제어됩니다.The size of the interval is controlled by the configuration option Statistics Collection Interval (in Management StudioManagement Studio) or INTERVAL_LENGTH_MINUTES using ALTER DATABASE SET Options (Transact-SQL).
sys.query_store_runtime_statssys.query_store_runtime_stats 실행된 계획에 대한 집계된 런타임 통계입니다.Aggregated runtime statistics for executed plans. 모든 캡처된 메트릭은 4개의 통계 함수 형태인 평균, 최소값, 최대값 및 표준 편차로 표현됩니다.All captured metrics are expressed in form of 4 statistic functions: Average, Minimum, Maximum, and Standard Deviation.

쿼리 저장소 뷰에 대한 자세한 내용은 쿼리 저장소를 사용하여 성능 모니터링관련된 뷰, 함수 및 프로시저섹션을 참조하세요.For additional details on Query Store views, see the Related Views, Functions, and Procedures section of Monitoring Performance By Using the Query Store.

쿼리 처리Query Processing

쿼리 저장소는 다음 주요 지점에서 쿼리 처리 파이프라인과 상호 작용합니다.Query store interacts with the query processing pipeline at the following key points:

  1. 쿼리가 처음으로 컴파일될 때 쿼리 텍스트 및 초기 계획이 쿼리 저장소로 전송됩니다.When query gets compiled for the first time, query text and initial plan are sent to Query Store

  2. 쿼리가 다시 컴파일될 때 계획이 쿼리 저장소에서 업데이트됩니다.When query gets recompiled, the plan is being updated in the Query Store. 새 계획을 만든 경우 쿼리 저장소는 해당 실행 통계와 함께 이전 것을 유지하는 쿼리에 대한 새 계획 항목을 추가합니다.If a new plan is created, Query Store adds the new plan entry for the query, keeping the previous ones along with their execution statistics.

  3. 쿼리 실행 시 런타임 통계는 쿼리 저장소에 전송됩니다.Upon the query execution, runtime statistics are sent to the Query Store. 쿼리 저장소는 현재 활성 간격 내에서 실행된 모든 계획에 대한 정확한 집계 통계를 유지합니다.Query Store keeps aggregated statistics accurate for every plan that was executed within the currently active interval.

  4. 컴파일 및 재컴파일 단계에 대한 확인을 하는 동안 SQL ServerSQL Server 은(는) 현재 실행 중인 쿼리에 대해 적용해야 하는 계획이 쿼리 저장소에 있는지 여부를 확인합니다.During the compile and check for recompile phases, SQL ServerSQL Server determines if there is a plan in the Query Store that should be applied for the currently running query. 강제 계획이 있고 프로시저 캐시의 계획이 강제 계획과 다른 경우 쿼리는 계획 힌트가 해당 쿼리에 적용됐던 것과 동일한 방식으로 효과적으로 다시 컴파일됩니다.If there is a forced plan and the plan in the procedure cache is different than the forced plan, the query gets recompiled, effectively the same way as if PLAN HINT was applied to that query. 이 프로세스는 사용자 응용 프로그램에 투명하게 수행합니다.This process happens transparently to the user application.

    다음 다이어그램은 위에서 설명한 통합 지점을 보여 줍니다.The following diagram depicts points of integration explained above:

    query-store-process-2processorquery-store-process-2processor

    I/O 오버헤드를 최소화하기 위해 새 데이터가 메모리 내에 캡처됩니다.To minimize I/O overhead, new data is captured in-memory. 쓰기 작업은 지연되고 나중에 디스크에 플러시됩니다.Writes operations are queued and flushed to disk afterwards. 쿼리 및 계획 정보(아래 다이어그램의 계획 저장소)가 최소 대기 시간으로 플러시됩니다.Query and plan information (Plan Store on diagram below) are flushed with minimal latency. 런타임 통계(Runtime Stats)가 DATA_FLUSH_INTERVAL_SECONDS 문의 SET QUERY_STORE 옵션을 사용하여 정의된 기간 동안 메모리에서 유지됩니다.The runtime statistics (Runtime Stats) are kept in memory for a period of time defined with the DATA_FLUSH_INTERVAL_SECONDS option of the SET QUERY_STORE statement. SSMS 쿼리 저장소 대화 상자를 사용하여 데이터 플러시 간격(분)을 입력할 수 있으며 초 단위로 변환됩니다.The SSMS Query Store dialog box allows you to enter Data Flush Interval (Minutes), which it converts to seconds.

    query-store-process-3planquery-store-process-3plan

    시스템 충돌이 발생할 경우 쿼리 저장소는 DATA_FLUSH_INTERVAL_SECONDS(으)로 정의된 양까지 런타임 데이터를 손실할 수 있습니다.In case of a system crash, Query Store can lose runtime data up to amount defined with DATA_FLUSH_INTERVAL_SECONDS. 900초(15분)의 기본값은 쿼리 캡처 성능과 데이터 가용성 사이의 최적의 균형입니다.The default value of 900 seconds (15 minutes) is an optimal balance between query capture performance and data availability.
    메모리 부족 시 런타임 통계는 DATA_FLUSH_INTERVAL_SECONDS(으)로 정의된 것보다 먼저 디스크에 플러시될 수 있습니다.In case of memory pressure, runtime statistics can be flushed to disk earlier than defined with DATA_FLUSH_INTERVAL_SECONDS.
    쿼리 저장소 데이터를 읽는 동안 메모리 내 및 디스크의 데이터는 투명하게 통합됩니다.During the read of the Query Store data in-memory and on-disk data are unified transparently. 세션 종료 또는 클라이언트 응용 프로그램 다시 시작/크래시의 경우 쿼리 통계는 기록되지 않습니다.In case of session termination or client application restart/crash query statistics won’t be recorded.

    query-store-process-4planinfoquery-store-process-4planinfo

관련 항목:See Also

관련된 뷰, 함수 및 프로시저 Monitoring Performance By Using the Query Store
쿼리 저장소에 대한 모범 사례 Best Practice with the Query Store
쿼리 저장소 카탈로그 뷰(Transact-SQL)Query Store Catalog Views (Transact-SQL)