QTA(쿼리 튜닝 도우미) 시작
두 개의 프로덕션 데이터베이스를 SQL Server 2012에서 새 SQL Server 2022 인스턴스로 마이그레이션할 계획입니다. 데이터베이스가 사용 중이므로 처음에는 호환성 수준을 원래 설정으로 두고 애플리케이션을 다시 지정하려고 합니다. sql Server 2014 이후 카드inality 추정기가 변경되었으며 데이터베이스의 호환성 수준을 SQL Server 2022(160)로 변경하기 전에 쿼리 성능을 측정하려고 합니다.
호환성 수준을 이동하고 새 카드inality 추정기 알고리즘을 적용할 때 회귀하는 쿼리를 찾아 수정해야 합니다. 이 방법을 사용하면 호환성 수준을 업그레이드한 후 비교할 성능 기준이 측정됩니다.
쿼리 저장소 사용하도록 설정하면 회귀 쿼리를 찾는 데 필요한 메트릭이 수집되고 QTA(쿼리 튜닝 도우미)를 사용하면 회귀 쿼리를 수정하는 방법을 안내합니다. 이 단원에서는 쿼리 저장소 및 QTA에 대한 개요를 제공합니다.
쿼리 저장소 개요
쿼리 저장소 기능은 데이터베이스 내의 쿼리 실행 및 성능 정보를 지속적으로 수집하기 위해 SQL Server 2016에서 도입되었습니다. 쿼리 저장소 플라이트 데이터 레코더처럼 작동하여 쿼리 및 계획에 대한 런타임 정보를 수집합니다. 이 런타임 데이터를 저장하면, 시간에 따라 성능을 추적할 수 있습니다. 문제가 발생하면 문제의 원인을 검색할 수 있는 정보 기록이 있습니다.
SQL Server 2022부터 Azure SQL Database 및 SQL Managed Instance에서 쿼리 저장소 기본적으로 새 데이터베이스에 대해 사용하도록 설정됩니다. SQL Server 2016, SQL Server 2017 및 SQL Server 2019에서는 쿼리 저장소 기본적으로 사용하도록 설정되지 않지만 SQL Server 2016 이상의 인스턴스에 있는 모든 데이터베이스는 쿼리 저장소 사용하거나 사용하지 않도록 설정하고 구성할 수 있습니다. 데이터베이스에서 쿼리 저장소 사용하거나 해당 구성을 확인하는 방법에 대한 지침은 다음 단원을 참조하세요.
쿼리 저장소 SQL Server 인스턴스보다 이전 호환성 수준이 있는 데이터베이스에서 작동할 수 있습니다. 예를 들어 SQL Server 2012에서 SQL Server 2022로 데이터베이스를 마이그레이션하고 호환성 수준을 110으로 유지하면 쿼리 저장소 데이터베이스에서 계속 작동할 수 있습니다.
그러나 지능형 쿼리 처리 및 기타 자동 성능 향상의 많은 기능은 최신 데이터베이스 호환성 수준에 대해서만 사용하도록 설정됩니다. 따라서 최신 SQL Server 데이터베이스 호환성 수준에서 애플리케이션 성능을 테스트해야 합니다. 쿼리 저장소 및 QTA는 이 성능 테스트를 지원할 수 있습니다.
데이터베이스에서 사용하도록 설정하면 쿼리 저장소 쿼리에 대해 다음 통계를 수집하고 보고합니다.
- 회귀된 쿼리
- 전체 리소스 사용량
- 리소스 사용량 상위 쿼리
- 강제 계획이 포함된 쿼리
- 고변형 쿼리
- 쿼리 대기 통계
- 추적된 쿼리
회귀 쿼리는 쿼리 최적화 프로그램에서 성능 저하를 유발하는 새 쿼리 계획을 사용할 때 발생합니다. 회귀는 인덱스 추가, 삭제 또는 변경, 통계 업데이트 또는 데이터 카드 변경과 같은 중요한 변경 후에 발생할 수 있습니다.
쿼리 저장소 전에 SQL Server는 회귀의 원인에 대한 인사이트를 제공하지 않았으며 데이터베이스 개발자와 관리자에게 문제를 식별하는 것이 문제였습니다. 이제 쿼리 저장소 사용하여 회귀된 쿼리를 찾고 최적화 프로그램이 기록의 특정 계획을 사용하도록 강제할 수 있습니다.
수천 개의 쿼리 중 몇 가지가 가장 많은 시스템 리소스를 사용하는 것이 일반적입니다. 쿼리 저장소는 회귀 또는 잘못된 튜닝으로 인해 리소스를 가장 많이 사용하는 쿼리를 확인합니다. 구성에 따라 기간, CPU, 메모리, I/O 또는 실행 횟수별로 결과를 필터링할 수 있습니다.
쿼리 저장소 사용하여 진행 중인 성능을 모니터링하고 A/B 테스트를 통해 단일 변경 사항을 적용하기 전과 후에 성능을 비교할 수 있습니다. 예를 들어 쿼리가 참조하는 테이블에 인덱스를 추가하여 쿼리의 성능을 조정할 수 있으므로 조인 조회가 더 빨라집니다. 인덱스를 추가하기 전과 후에 쿼리 저장소 통계를 비교하면 인덱스가 성능에 영향을 주는지 여부를 알 수 있습니다. 새 하드웨어를 추가하거나 애플리케이션을 업데이트한 후 통계를 비교할 수도 있습니다.
쿼리 튜닝 도우미 개요
QTA(쿼리 튜닝 도우미)는 쿼리 저장소 데이터를 사용하여 회귀하기 시작하는 쿼리를 찾습니다. QTA는 쿼리가 사용자에게 영향을 미치는 시점까지 성능이 저하되기 전에 쿼리 속도를 높일 솔루션을 찾기 위해 자동으로 실험합니다.
쿼리 저장소 및 QTA를 사용하여 업그레이드 후 데이터베이스 성능을 모니터링하고 최적화할 수 있습니다. 데이터베이스를 SQL Server 2016 이상으로 마이그레이션한 후에는 데이터베이스의 호환성 수준을 변경하지 않고 쿼리 저장소 기준 쿼리 성능 통계를 수집하도록 설정합니다.
그런 다음 호환성 수준을 변경하고 쿼리 저장소 데이터를 계속 사용하여 쿼리의 성능 통계를 측정합니다. 통계를 비교하여 각 쿼리가 업그레이드 이전보다 더 잘, 동일하거나, 더 나쁜지 확인할 수 있습니다.
호환성 수준을 변경하여 데이터베이스를 업그레이드하면 SQL Server에서 사용하는 카드진수 예측 도구의 버전을 변경합니다. QTA는 카드inality 추정기의 변경으로 인해 쿼리 회귀의 가능한 패턴을 찾고 성능 향상을 찾기 위한 실험을 찾습니다. 그런 다음 향상된 기능을 보여 주는 쿼리에 대한 계획 지침을 만들 수 있습니다.
요약
쿼리 저장소는 항공기의 비행 데이터 레코더가 활동을 캡처하는 것처럼 쿼리의 성능 통계를 지속적으로 측정합니다. 호환성 수준에 관계없이 SQL Server 2016 이상의 모든 데이터베이스에서 쿼리 저장소 사용하도록 설정할 수 있습니다. 쿼리 저장소 사용하여 쿼리 성능을 지속적으로 모니터링하고 A/B 테스트를 통해 단일 변경의 영향을 측정합니다.
데이터베이스를 SQL Server 2014 이상으로 업그레이드할 때 카드inality 추정기를 변경하면 이전 SQL Server 버전에서 빠른 쿼리 속도가 느려질 수 있습니다. 사용자에게 영향을 미치기 전에 회귀를 찾아 수정하는 것이 가장 좋습니다. 데이터베이스에서 쿼리 저장소를 사용하도록 설정하면 쿼리에 대한 통계가 지속적으로 수집됩니다. 그런 다음 QTA를 사용하여 문제가 되기 전에 회귀 쿼리를 식별하고 수정할 수 있습니다.