QTA(쿼리 튜닝 도우미)가 적합한지 결정
데이터베이스 버전 업그레이드 후 잠재적인 쿼리 계획 회귀 및 성능 손실을 알고 있습니다. 데이터베이스 업그레이드 후 성능을 기본 수 있도록 하려면 회귀된 쿼리를 식별하고 완화하는 가장 좋은 방법을 찾아야 합니다. 이 단원에서는 쿼리 저장소 및 QTA(쿼리 튜닝 도우미)를 사용하여 업그레이드 후 성능 저하가 문제가 되지 않도록 하는 방법을 설명합니다.
쿼리 저장소 및 쿼리 튜닝 도우미 시작
QTA는 쿼리 저장소 데이터에 따라 업그레이드 후 회귀하는 쿼리를 찾습니다. 쿼리 저장소 업그레이드하기 전에 이전 데이터베이스 버전에서 메트릭을 수집할 수 있습니다.
이 쿼리 저장소 SQL Server 2016에서 도입되었으며 QTA는 SQL Server 2017에서 도입되었습니다. SQL Server 2022 인스턴스에서 실행되는 모든 데이터베이스 버전은 이러한 두 기능을 모두 사용할 수 있습니다. 이러한 도구는 SSMS(SQL Server Management Studio)에 통합되고 데이터베이스 수준에서 작동합니다.
데이터베이스의 호환성 수준은 해당 버전을 결정하며, 이 버전에 따라 사용하는 카드inality 추정기 버전이 결정됩니다. 카드진수 예측기는 쿼리가 반환할 가능성이 있는 행 수를 예측하므로 쿼리 최적화 프로그램에서 가장 저렴한 계획을 선택할 수 있습니다. SQL Server 2014는 대부분의 쿼리에 이점을 제공하지만 성능에 부정적인 영향을 거의 주지 않는 업그레이드된 카드inality 추정기 알고리즘을 도입했습니다.
성능 영향을 측정하기 위해 쿼리 저장소 가장 많은 시스템 리소스를 사용하는 회귀된 쿼리 및 쿼리를 보고합니다. QTA는 데이터베이스 업그레이드 전후에 쿼리 저장소 쿼리 성능 데이터를 비교하고 쿼리를 실험하여 성능을 향상시킵니다.
참고 항목
QTA는 Azure SQL Database 또는 SQL Managed Instance 데이터베이스에 사용할 수 없습니다. 이러한 데이터베이스의 경우 Azure Data Studio용 Azure SQL 마이그레이션 확장을 사용하는 것이 좋습니다.
QTA 및 자동 계획 수정
SQL Server는 T-SQL(Transact-SQL) 쿼리를 실행하는 경우 쿼리를 실행할 수 있는 가능한 계획을 분석합니다. SQL Server는 성공적으로 실행된 쿼리에 대한 계획을 캐시하고 쿼리가 다시 실행될 때 다시 사용합니다.
SQL Server는 쿼리에 대한 최적의 계획을 선택하고 상황에 따라 새 계획을 선택하도록 강제할 때까지 사용합니다. 이러한 상황에는 계획을 다시 컴파일하는 데이터베이스 엔진, 추가 또는 제거되는 인덱스 또는 변경되는 통계가 포함될 수 있습니다.
새 계획이 이전 계획보다 항상 개선되는 것은 아닙니다. 다음 명령을 실행하여 회귀 계획이 있는 쿼리를 찾을 수 있습니다.
SELECT * FROM sys.dm_db_tuning_recommendations
그런 다음 저장 프로시저를 sp_force_plan
사용하여 SQL Server에서 권장되는 특정 계획을 사용하도록 강제할 수 있습니다.
EXEC sp_force_plan @query_id = 1187, @plan_id = 1975
이 sp_force_plan
절차는 업그레이드된 데이터베이스에서 많은 쿼리가 회귀하는 경우 잠재적으로 지루할 수 있는 수동 프로세스입니다. SQL Server 2017에는 자동 조정 쿼리에 대한 자동 계획 수정이라는 새로운 기능이 도입되었으며 수동 개입이 필요하지 않습니다. 다음 문을 실행하여 데이터베이스에서 자동 계획 수정을 사용하도록 설정할 수 있습니다.
ALTER DATABASE <database-name> SET AUTOMATIC_TUNING (FORCE_LAST_GOOD_PLAN = ON)
데이터베이스 수준에서 설정하는 경우 자동 계획 수정은 SQL Server에 마지막으로 적합한 쿼리 계획을 사용하도록 지시합니다. SQL Server는 계획이 실행되는 동안 회귀를 찾고 최적의 성능을 제공하는 계획을 계속 모니터링합니다.
자동 계획 수정은 QTA와 다르게 작동합니다. 마지막 좋은 계획을 사용하면 이전 카드inality 추정기로 롤백하는 것을 의미할 수 있습니다. 반대로 QTA는 대상 데이터베이스 호환성 수준에 매핑된 카드inality 추정기 버전을 사용하여 실험을 수행합니다.
요약
QTA는 SQL Server 2022에서 사용할 수 있으며 작동할 쿼리 저장소 따라 달라집니다. QTA는 이전 호환성 수준에서 데이터베이스에 대한 쿼리 저장소 기준 데이터가 있어야 하므로 업그레이드 후 쿼리를 관찰하고 비교할 수 있습니다.
SQL Server 2017에 도입된 자동 계획 수정은 쿼리 계획을 수동으로 식별하고 강제 적용할 필요가 없습니다. 데이터베이스 수준에서 자동 계획 수정을 사용하도록 설정할 수 있지만 카드inality 추정기의 버전을 롤백할 수 있습니다. QTA는 대상 호환성 수준에 매핑된 카드inality 추정기의 버전을 사용합니다.