msdb에서 Query Store를 사용하면 어떤 이점이 있습니까?


9

SQL 시스템 데이터베이스 (마스터, 모델, msdb, tempdb) 쿼리 저장소 중 msdb에서만 사용할 수 있습니다. msdb의 쿼리 저장소에 대한 설명서를 보지 못했습니다.

GUI에서 볼 수는 없지만 SQL 2016 인스턴스에서 확인할 수 있습니다.

쿼리 저장소 확인이 꺼져 있습니다

USE msdb
SELECT * FROM sys.database_query_store_options; 

쿼리 저장소 켜기

USE [master]
GO
ALTER DATABASE msdb SET QUERY_STORE = ON
GO
ALTER DATABASE msdb SET QUERY_STORE (OPERATION_MODE = READ_WRITE
, INTERVAL_LENGTH_MINUTES = 30
, MAX_STORAGE_SIZE_MB = 1000
, QUERY_CAPTURE_MODE = AUTO)
GO

쿼리 저장소 확인이 켜져 있습니다

USE msdb
SELECT * FROM sys.database_query_store_options; 

모든 시스템 데이터베이스 중에서 msdb가 Query Store를 사용하는 옵션이있는 유일한 이유는 무엇이며 어떤 값을 추가합니까?

-- Stop Query Store
USE [master]
GO
ALTER DATABASE msdb SET QUERY_STORE = OFF
GO

제임스, [model]"허용되지 않음"목록에 포함 된 답변 업데이트를 참조하십시오 .
Solomon Rutzky

@SolomonRutzky 매우 흥미 롭습니다. 귀하의 답변에 의견이 있으시면 언제든지 답변을 계속 확장하십시오.
James Jenkins

답변:


7

Microsoft가 기능을 활성화한다고해서 모든 사람에게 유용한 것은 아닙니다. 일부 기능을 사용하는 시스템의 경우 MSDB에 저장된 정보에 의존 할 수 있습니다. 이 경우 Query Store가 유용 할 수 있습니다.

다음은 MSDB 데이터베이스 객체의 사용법과 튜닝에 관한 기사입니다.

온라인 설명서의 msdb 데이터베이스 .

Geoff N. Hiten의 MSDB 성능 조정

Tim Radney가 MSDB에서 유지 관리의 중요성을 다음과 같이 언급했습니다.

msdb에서 인덱스를 최적화하는 것은 사용자 데이터베이스만큼 중요합니다. 여러 번 사용자 데이터베이스를 최적화하지만 시스템 데이터베이스는 최적화하지 않는 클라이언트를 발견했습니다. msdb 데이터베이스는 SQL Server 에이전트, 로그 전달, Service Broker, SSIS, 백업 및 복원 및 기타 프로세스에서 많이 사용되므로 인덱스가 매우 조각화 될 수 있습니다. 인덱스 최적화 작업에 시스템 데이터베이스 또는 최소한 msdb도 포함되어 있는지 확인하십시오. 인덱스 최적화로 msdb 내에서 고도로 조각난 인덱스에서 몇 기가 바이트의 공간을 확보하는 것을 보았습니다.

쿼리 저장소가 인덱싱 전략을 최적화하고 MSDB에 저장된 일부 정보를 최적으로 쿼리 / 추적 / 정리하는 데 어떻게 도움이되는지 알 수 있습니다.


1
[msdb]인용에 사용 된 기능 외에도 "다른 프로세스"에는 dbmail, 중앙 관리 서버 (CMS) 서비스 (주로 공유 된 등록 된 서버 목록)와 같은 것들이 포함됩니다. PBM (정책 기반 관리) 및 서버 감사 (최소한 정의이지만이를 확인하지는 못했습니다) 라고 생각 합니다.
Solomon Rutzky

5

@SqlWorldWide는 질문의 "왜 [msdb]"부분에 답변했기 때문에 여기서는 복제하지 않습니다. 그러나 대답에 "왜 안 [master], [model], [tempdb]"질문의 일부 :

  • [tempdb]임시 저장소이며 본질적으로 자동화 된 최적화 나 기록 분석 기능을 통해 이점을 얻지 못할 것입니다. 쿼리 저장소가 저장 프로 시저의 실행 통계를 추적하는 경우 저장 프로 시저가 다른 곳에있을 때는 도움이되지 않습니다. 임시 저장 프로 시저를 만들 수는 있지만 로컬 임시 저장 프로 시저에는 이름에 여러 세션에서 유사한 이름을 구분하는 고유 한 해시 코드가 포함되어 있기 때문에 이점이 없을 것입니다. 또한 임시 속성을 고려할 때 전역 임시 저장 프로시 저는 여러 세션에서 일관된 이름을 갖지만 세션 간 동일한 이름의 전역 임시 저장 프로 시저 (동시가 아님)는 동일한 코드를 가질 것이라고 가정 할 방법이 없습니다. 따라서 의미있는 /상관 가능한 통계.

  • [model]새 데이터베이스를 작성하기위한 템플리트입니다 (를 포함 [tempdb]하여 SQL Server 인스턴스가 시작 / 다시 시작할 때마다 다시 작성 됨). 여기에서 쿼리가 실행되지 않습니다. 그러나, 나는 그것이 가정 수도 있습니다 새로운 데시벨을 만들 때 기본적으로 설정되어 있음을 쿼리 스토어 그래서 여기에 사용할 수 있도록 이해. 그러나 그러나 이는 쿼리 저장소가에서 활성화되고 [tempdb]어리석은 일임을 의미합니다 (바로 위의 포인트 참조).

    업데이트 :
    Woah, Nelly! 나는 이 질문 으로 이어지는 초기 질문 을 다시 읽고 이상한 것을 발견했습니다. [master]와에 대한 오류 메시지 만있었습니다 [tempdb]. 에 대한 오류가보고되지 않았습니다 [model]. OP는 질문에 복사 할 때 해당 오류 메시지를 생략했을 가능성이 있으므로 SQL Server 2016 SP1-CU7-GDR (13.0.4466.4)에서 다음을 실행하여 직접 확인했습니다.

    ALTER DATABASE [model] SET QUERY_STORE = ON; -- completes successfully!
    
    -- Restart instance to force recreation of [tempdb];
    
    CREATE DATABASE [IsQueryStoreEnabledByDefault];
    
    SELECT * FROM sys.databases WHERE [is_query_store_on] = 1;
    
    DROP DATABASE [IsQueryStoreEnabledByDefault];

    그리고 결과는? [model][IsQueryStoreEnabledByDefault]반환되지만 [tempdb]이다 없는 결과에! 그러나 처음 두 "그러나"에 대한 추가 사항 은 Query Store를 활성화 [model] 할 수 있는 것 같습니다. a) Query Stored 활성화를 기본값으로 설정합니다 (예, 단어입니다. [tempdb]서비스 시작시 다시 생성 할 때는 무시됩니다 (따라서 서비스를 켜기위한 백도어가 아닙니다 [tempdb]).  

  • [master]기본 시스템 데이터베이스이며 여기에서 코드를 실행해서는 안됩니다. 또한 여기에 존재하고 자주 사용되는 저장 프로시 저는 최적화의 이점을 얻지 못하거나 호출 된 사용자 데이터베이스의 컨텍스트에서 실행됩니다 (예 : 시스템 저장 프로시 저는 sp_모두 "모두"나타나는 특별한 경우입니다. DB는 정규화 된 데이터베이스 일 필요는 없으며 [master]..실제로 각 DB에 존재하는 것처럼 실행해야하며 호출중인 사용자 데이터베이스의 Query Store에 의해 관리 될 수 있습니다.


USE 모델 SELECT * FROM을 실행할 때 sys.database_query_store_options; Query Store 모델을 설정 한 후에는 ON으로 표시되지 않습니다. 그러나> 새 데이터베이스가 켜져 있다고 말하면 필자의 경우 하루 일찍 시작했을 때 선택한 옵션 변경 사항을 사용했습니다. 따라서 모델을 사용하려는 경우 모든 쿼리 저장소 옵션 을 환경 설정으로 설정하여 놀라움을 줄이려고 할 수 있습니다 .
James Jenkins
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.