QTA(쿼리 튜닝 길잡이)를 사용하여 쿼리 튜닝

완료됨

쿼리 저장소를 사용하여 마이그레이션 전에 데이터베이스 성능을 모니터링하고 이 데이터를 업그레이드 후 성능과 비교하기로 결정했습니다. QTA(쿼리 튜닝 길잡이)를 사용하여 회귀된 쿼리를 찾고 개선 사항을 제안할 계획입니다. 이 단원에서는 쿼리 저장소와 QTA를 사용하여 쿼리 성능을 유지하는 단계를 설명합니다.

데이터베이스 애플리케이션은 비즈니스 운영을 뒷받침하는 중요한 시스템이므로 업그레이드를 위한 작업 계획과 대체 계획이 필요합니다. 핵심 프로덕션 데이터베이스를 한 번에 하나씩 업그레이드합니다. 다른 데이터베이스를 업그레이드하기 전에 각 데이터베이스가 문제 없이 다시 프로덕션 상태인지 확인하기 위해 업그레이드된 데이터베이스에 대한 테스트 계획을 결정합니다.

쿼리 저장소를 사용하여 쿼리 성능을 지속적으로 모니터링하고 A/B 테스트를 통해 데이터베이스 업그레이드와 같은 변경 효과를 측정할 수 있습니다. QTA는 업그레이드 후에 자동 지원을 제공하여 쿼리 저장소에 캡처된 데이터를 기준으로 회귀된 쿼리를 찾아서 수정합니다.

QTA가 제대로 작동하려면 다음 단계를 순서대로 적용해야 합니다.

Important

쿼리 저장소가 쿼리에 대한 현실적인 메트릭을 수집할 수 있도록 프로덕션 애플리케이션 데이터베이스를 사용하거나 프로덕션 데이터베이스 워크로드와 거의 일치하는 애플리케이션 워크로드가 있는 데이터베이스를 사용해야 합니다.

  1. 데이터베이스를 SQL Server 2022로 마이그레이션합니다.
  2. 호환성 수준은 변경하지 않고 그대로 둡니다(이전 SQL Server 버전).
  3. 데이터베이스에서 쿼리 저장소를 활성화합니다.
  4. 쿼리 저장소가 충분하고 현실적인 사용자 작업을 기반으로 쿼리에 대한 기본 메트릭을 수집하도록 합니다.
  5. 호환성 수준을 SQL Server 2022(160)로 업그레이드합니다.
  6. 다시 한 번 쿼리 저장소가 충분히 현실적인 사용자 작업을 기반으로 쿼리에 대한 데이터를 수집하도록 합니다.
  7. QTA를 사용하여 데이터베이스 호환성 수준 변경 전후의 쿼리 성능을 비교합니다. 회귀된 쿼리가 발견되면 수정 사항을 식별합니다.

데이터베이스 마이그레이션

SQL Server 2022로 전환할 준비가 되면 먼저 데이터베이스를 새 인스턴스로 마이그레이션합니다. 이 마이그레이션을 수행하는 방법에는 여러 가지가 있습니다. 예를 들어 간단한 백업 및 복원을 사용하거나, 데이터베이스 미러링을 사용하거나, 대량 로드를 사용할 수 있습니다. 가장 적절한 선택은 현재 환경의 구성과 마이그레이션하려는 SQL Server 버전에 따라 다릅니다. Azure DMS(데이터 마이그레이션 서비스)는 SQL Server 2005 이상의 데이터베이스를 지원하므로 좋은 솔루션입니다.

참고 항목

Azure DMS는 Azure SQL Managed Instance로의 데이터베이스 마이그레이션도 지원합니다. 시작하려면 Azure Data Studio용 Azure SQL 마이그레이션 확장을 사용합니다.

호환성 수준을 변경하지 않은 상태로 둠

데이터베이스를 마이그레이션한 후에는 호환성 수준을 변경하지 않고 그대로 둡니다. 현재 데이터베이스 구성을 사용하여 기준을 측정하려고 하기 때문에 이 단계는 매우 중요합니다. 호환성 수준을 SQL Server 2014(120) 이상으로 이동할 때까지 SQL Server는 레거시 카디널리티 추정기를 사용합니다. SQL Server 2014에 대부분의 쿼리에 도움이 되지만 성능에 부정적인 영향을 미치는 경우는 거의 없는 업그레이드된 카디널리티 예측 도구가 도입되었습니다.

쿼리 저장소 사용

데이터베이스 호환성 수준은 이전 버전으로 유지되지만 쿼리 저장소는 서버 수준 기능이므로 데이터베이스에서 쿼리 저장소를 사용하도록 설정할 수 있습니다. 쿼리 저장소를 사용하도록 설정하려면 다음을 수행합니다.

  1. SSMS(SQL Server Management Studio)에서 데이터베이스를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.
  2. 데이터베이스 속성 창의 왼쪽 창에서 쿼리 저장소를 선택합니다.
  3. 작업 모드(요청됨)읽기 전용 또는 읽기 쓰기로 설정합니다.
  4. 확인을 선택합니다.

또는 다음 문을 실행하여 네이티브 READ WRITE 모드에서 쿼리 저장소를 사용하도록 설정할 수 있습니다.

ALTER DATABASE <database-name> SET QUERY_STORE = ON

쿼리 저장소에서 데이터를 수집하도록 허용

마이그레이션된 데이터베이스를 다시 프로덕션으로 전환하고 애플리케이션이나 보고서의 모든 데이터베이스 연결을 전환합니다. 데이터베이스가 프로덕션 애플리케이션으로부터 쿼리를 받기 시작합니다. 데이터베이스에서 실제 워크로드를 수집할 수 있을 만큼 오랫동안 쿼리 저장소를 실행하도록 허용합니다.

쿼리 저장소는 업무 시간, 야간 처리, 유지 관리 기간 및 기타 작업을 포함하여 일반적인 비즈니스 작업 주기를 캡처해야 합니다. 많은 기업의 경우 일주일의 작업이면 충분하지만 일부 기업의 경우 이 기간이 더 짧거나 길어질 수 있습니다.

많은 기업에는 격주 급여 또는 월말 처리를 위한 주요 비즈니스 주기 등에 따라 고유한 작업이 있습니다. 데이터베이스가 경험하는 비즈니스 주기의 시기를 알고 있어야 합니다. 식료품점의 경우 주간 인벤토리 도착 및 재입고 주기에 대부분의 데이터베이스 작업이 포함됩니다.

쿼리 저장소 탭을 탐색하면 수집된 데이터를 볼 수 있습니다. 탭을 보려면 SSMS 개체 탐색기에서 데이터베이스 트리를 확장하여 쿼리 저장소를 표시합니다. 충분한 데이터가 수집되었다고 판단되면 업그레이드를 예약할 수 있습니다.

호환성 수준 업그레이드

데이터베이스를 변경하기 전에 가능하면 작업 시간 외에 데이터베이스를 백업하는 것이 좋습니다. 백업을 수행한 후 다음과 같이 호환성 수준을 업그레이드합니다.

  1. SSMS 개체 탐색기에서 데이터베이스를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.
  2. 데이터베이스 속성 창에서 옵션 탭을 선택합니다.
  3. 호환성 수준을 SQL Server 2022(160)으로 변경하고 확인을 선택합니다.

또는 다음 문을 실행할 수 있습니다.

ALTER DATABASE <database-name> SET COMPATIBILITY_LEVEL = 160

쿼리 저장소가 계속 데이터를 수집하도록 허용

데이터베이스가 업그레이드되고 애플리케이션이 다시 시작된 후에도 쿼리 저장소는 쿼리에 대한 메트릭을 수집하기 위해 백그라운드에서 계속 실행됩니다. 이제 쿼리 최적화 프로그램이 사용하는 새로운 카디널리티 예측 도구로 인해 쿼리가 잠재적인 문제에 노출됩니다.

계속해서 쿼리 저장소를 실행하고 업그레이드 전과 동일한 기간 동안 데이터를 수집하도록 허용합니다. 그러나 쿼리 회귀가 즉시 표시될 수 있으므로 성능 문제를 즉시 수정하기 위한 조치를 취할 수 있습니다.

쿼리 튜닝 도우미 실행

QTA를 실행하여 회귀 쿼리를 해결합니다. QTA를 구성하려면:

  1. SSMS 개체 탐색기에서 데이터베이스를 마우스 오른쪽 단추로 클릭하고 작업>데이터베이스 업그레이드>새 데이터베이스 업그레이드 세션을 선택합니다.
  2. 쿼리 튜닝 도우미 마법사설정 화면에서 캡처할 워크로드 기간(일)대상 데이터베이스 호환성 수준을 입력합니다.
  3. 다음을 선택하여 설정튜닝 화면을 구성합니다.
  4. 마침을 선택합니다.

QTA를 모니터링하려면 데이터베이스 이름을 마우스 오른쪽 단추로 클릭하고 작업>데이터베이스 업그레이드>세션 모니터링을 선택합니다. QTA는 관찰된 데이터와 기준 데이터를 비교하여 상위 회귀된 쿼리에 대한 요약 보고서를 제공합니다. 그런 다음 성능이 저하된 쿼리 튜닝을 위해 QTA에서 권장하는 변경 내용을 볼 수 있습니다.

요약

데이터베이스 업그레이드 후 QTA를 사용하여 업그레이드 결과로 회귀되는 쿼리를 찾아 수정합니다. QTA에서 회귀된 쿼리를 찾으려면 먼저 쿼리 저장소를 통해 이전 호환성 수준에서 쿼리를 측정하여 기준을 만들어야 합니다.

업그레이드 후에 쿼리 저장소가 메트릭을 수집하며, QTA에서 이 메트릭을 사용하여 새 성능과 기준을 비교할 수 있습니다. 쿼리 저장소가 업그레이드 전후에 데이터를 수집하는 것은 QTA 작업에 매우 중요합니다.

QTA는 회귀된 쿼리를 식별하면 성능 개선을 위한 최선의 작업을 찾기 위해 실험합니다. 그런 다음 이러한 작업을 적용할 수 있습니다.