Azure SQL Database의 Database Advisor 성능 권장 사항

적용 대상: Azure SQL Database

Azure SQL Database는 애플리케이션과 함께 학습하고, 적응하고, 발전합니다. Azure SQL Database에는 성능을 최대화할 수 있는 사용자 지정 권장 사항을 제공하는 여러 Database Advisor가 있습니다. 이 Database Advisor는 사용 기록을 지속적으로 평가하고 분석하며 성능 향상에 도움이 되는 워크로드 패턴을 기반으로 권장 사항을 제공합니다.

성능 개요

Azure Portal의 성능 개요는 데이터베이스 성능에 대한 요약을 제공하여 성능 튜닝 및 문제 해결를 도와 줍니다.

  • 존재하는 경우, 권장 사항 타일은 데이터베이스에 대한 튜닝 권장 사항의 분석을 제공합니다. 이 타일을 선택하면 성능 권장 사항 옵션으로 이동합니다.
  • 튜닝 활동 타일은 데이터베이스에 대해 진행 중이고 완료된 튜닝 작업을 제공하여 튜닝 활동의 기록을 간략히 볼 수 있습니다. 이 타일을 선택하면 데이터베이스에 대한 권장 사항 및 튜닝 기록으로 이동합니다. 자세한 내용은 자동 튜닝을 참조하세요.
  • 자동 튜닝 타일은 데이터베이스에 대한 자동 튜닝 구성을 보여 줍니다(데이터베이스에 자동으로 적용되는 튜닝 옵션). 이 타일을 선택하면 자동화 구성 대화 상자가 열립니다. 데이터베이스 인덱스 및 쿼리 실행 계획 자동 튜닝에 대한 자세한 내용은 자동 튜닝을 참조하세요.
  • 데이터베이스 쿼리 타일은 데이터베이스에 대한 쿼리 성능 요약을 보여 줍니다(전체 DTU 사용량 및 최상위 리소스 사용 쿼리). 이 타일을 클릭하면 Query Performance Insight로 이동합니다.
  • 기본 차트는 최근 활동을 확대할 수 있는 옵션을 제공하며, 지난 24시간 동안의 데이터베이스 활동에 대한 요약 정보를 제공합니다. 누적 막대 그래프는 CPU별로 상위 쿼리를 분석하고, 여러 줄 그래프는 CPU, 데이터 IO 및 로그 IO별 워크로드를 나타냅니다. 각각 캐시된 쿼리 계획을 나타내는 개별 누적 막대를 선택합니다. Query Performance Insight 페이지를 자세히 확인하고 워크로드에서 가장 비용이 많이 드는 쿼리를 식별합니다. 자세한 내용은 Query Performance Insight를 참조하세요.

Azure SQL 데이터베이스에 대한 Azure Portal 탐색 메뉴의 지능형 성능 아래 성능 개요 페이지로 이동합니다.

Screenshot from the Azure portal of the Performance Overview for Azure SQL Database.

성능 권장 사항 옵션

Azure SQL Database에서 권장되는 성능 옵션

성능 권장 사항 단일 데이터베이스 및 풀링된 데이터베이스 지원 인스턴스 데이터베이스 지원
인덱스 권장 사항 만들기 - 워크로드의 성능을 향상시킬 수 있는 인덱스를 만들 것을 권장합니다. 아니오
인덱스 권장 사항 삭제 - 고유 인덱스와 장기간(>90일) 사용되지 않은 인덱스를 제외하고 매일 중복 및 중복 인덱스를 제거할 것을 권장합니다. 이 옵션은 파티션 전환 및 인덱스 힌트를 사용하는 애플리케이션과 호환되지 않습니다. 프리미엄 및 중요 비즈니스용 서비스 계층에는 사용되지 않는 인덱스 삭제가 지원되지 않습니다. 아니오
쿼리 권장 사항 매개 변수화(프리뷰뷰) - 지속적으로 다시 컴파일되지만 동일한 쿼리 실행 계획으로 끝나는 하나 이상의 쿼리가 있는 경우 강제 매개 변수화를 권장합니다. 아니오
스키마 문제 해결 권장 사항(미리 보기) - Azure SQL Database가 데이터베이스에서 발생하는 스키마 관련 SQL 오류 수에서 변칙을 발견하면 스키마 수정에 대한 권장 사항이 표시됩니다. Microsoft는 "스키마 문제 해결" 권장 사항을 사용하지 않도록 지정하고 있습니다. 아니오

A screenshot from the Azure portal showing sample performance recommendations for Azure SQL Database.

성능 권장 사항을 적용하려면 권장 사항 적용을 참조하세요. 권장 사항의 상태 보려면 모니터링 작업을 참조하세요.

과거에 적용된 튜닝 작업의 전체 기록을 찾을 수도 있습니다.

인덱스 만들기 권장 사항

Azure SQL Database는 실행 중인 쿼리를 지속적으로 모니터링하고 성능을 향상할 수 있는 인덱스를 식별합니다. 특정 인덱스가 누락되었다는 어느 정도 확신이 있으면 새 인덱스 만들기 권장 사항이 생성됩니다.

Azure SQL Database는 인덱스가 시간을 통해 가져올 성능 향상을 예측하여 신뢰를 구축합니다. 예상된 성능 향상에 따라 권장 사항은 높음, 보통, 낮음으로 분류됩니다.

권장 사항을 사용하여 만든 인덱스는 항상 auto_created 인덱스로 플래그가 지정됩니다. sys.indexes 보기를 사용하여 자동 만들어지는 인덱스를 확인할 수 있습니다. 자동 생성된 인덱스는 ALTER/RENAME 명령을 차단하지 않습니다.

자동으로 생성된 인덱스가 있는 열을 삭제하려고 하면 명령이 전달됩니다. 자동 생성된 인덱스도 이 명령으로 삭제됩니다. 일반 인덱스는 인덱싱된 열에서 ALTER/RENAME 명령을 차단합니다.

인덱스 만들기 권장 사항이 적용된 후 Azure SQL Database는 쿼리의 성능을 기준 성능과 비교합니다. 새 인덱스가 성능을 향상하면 권장 사항에 성공으로 플래그가 지정되고 영향 보고서를 사용할 수 있습니다. 인덱스가 성능을 향상하지 않을 경우, 자동으로 되돌려 집니다. Azure SQL Database는 이 프로세스를 사용하여 권장 사항으로 데이터베이스 성능이 향상되도록 합니다.

인덱스 만들기 만들기 권장 사항에는 데이터베이스 또는 풀의 리소스 사용량이 높은 경우 권장 사항을 적용할 수 없는 백오프 정책이 있습니다. 백 오프 정책은 CPU, 데이터 IO, 로그 IO 및 사용 가능한 스토리지를 고려합니다.

CPU, 데이터 IO 또는 로그 IO가 이전 30분 동안 80%를 초과할 경우 인덱스 만들기 권장 사항이 연기됩니다. 인덱스가 생성된 후 사용 가능한 스토리지가 10% 미만이면 권장 사항이 오류 상태로 전환됩니다. 며칠 후 자동 튜닝이 여전히 인덱스가 도움이 될 것이라고 생각되면 프로세스가 다시 시작됩니다.

이 프로세스는 인덱스를 만드는 데 사용할 수 있는 스토리지가 충분하거나, 인덱스가 더 이상 유용하지 않을 것으로 확인될 때까지 반복됩니다.

인덱스 삭제 권장 사항

누락된 인덱스를 검색하는 것 외에도 Azure SQL Database는 기존 인덱스의 성능을 분석합니다. 인덱스를 사용하지 않으면 Azure SQL Database에서 삭제할 것을 권장합니다. 인덱스를 삭제하는 것은 다음 두 가지 경우에 권장됩니다.

  • 인덱스가 다른 인덱스와 중복되는 경우(인덱싱되고 포함된 동일한 열, 파티션 스키마 및 필터).
  • 인덱스가 오랜 기간(>90일) 동안 사용되지 않은 경우.

인덱스 삭제 권장 사항은 구현 후에도 확인을 수행합니다. 성능이 향상되면 영향 보고서를 사용할 수 있습니다. 성능이 저하되면 권장 사항이 되돌려집니다.

쿼리 매개 변수화 권장 사항(프리뷰)

쿼리 매개 변수화 권장 사항(프리뷰) - 지속적으로 다시 컴파일되지만 동일한 쿼리 실행 계획으로 끝나는 하나 이상의 쿼리가 있는 경우 강제 매개 변수화를 권장합니다. 이 조건은 강제 매개 변수화를 적용할 기회를 만듭니다. 또한 강제 매개 변수화를 설정하면 나중에 쿼리 계획을 캐시하고 다시 사용할 수 있으므로 성능이 향상되고 리소스 사용량이 줄어듭니다.

모든 쿼리는 실행 계획을 생성하기 위해 초기에 컴파일되어야 합니다. 생성된 각 계획이 계획 캐시에 추가됩니다. 동일한 쿼리의 후속 실행은 캐시에서 이 계획을 다시 사용할 수 있으므로 추가 컴파일이 필요하지 않습니다.

매개 변수화되지 않은 값이 있는 쿼리는 매개 변수화되지 않은 값이 다를 때마다 실행 플랜이 다시 컴파일되기 때문에 성능 오버헤드가 발생할 수 있습니다. 많은 경우에 매개 변수 값이 다른 동일한 쿼리는 동일한 실행 플랜을 생성합니다. 그러나 이러한 플랜은 여전히 플랜 캐시에 개별적으로 추가됩니다.

실행 플랜을 다시 컴파일하는 프로세스는 데이터베이스 리소스를 사용하고, 쿼리 기간을 늘리고, 플랜 캐시를 오버플로합니다. 이러한 이벤트로 인해 캐시에서 플랜이 제거됩니다. 이 동작은 데이터베이스에서 강제 매개 변수화 옵션을 설정하여 변경할 수 있습니다.

이 권장 사항의 영향을 예측할 수 있도록 실제 CPU 사용량과 예상 CPU 사용량(권장 사항이 적용되었을 시의 경우) 비교가 제공됩니다. 이 권장 사항은 CPU 절감에 도움이 될 수 있습니다. 또한 계획 캐시에 대한 쿼리 기간 및 오버헤드를 줄이는 데 도움이 될 수 있습니다. 즉, 더 많은 계획이 캐시에 남게 되며, 이를 재사용할 수 있습니다. 적용 명령을 선택하여 이 권장 사항을 신속하게 적용할 수 있습니다.

이 권장 사항을 적용하면 수분 내에 데이터베이스에서 강제 매개 변수화를 사용할 수 있습니다. 그러면 약 24시간 동안 지속되는 모니터링 프로세스가 시작됩니다. 이 기간이 지나면 유효성 검사 보고서를 볼 수 있습니다. 이 보고서는 권장 사항이 적용되기 24시간 전과 후에 데이터베이스의 CPU 사용량을 보여 줍니다. Azure SQL Database Advisor에는 성능 회귀가 감지된 경우 적용된 권장 사항을 자동으로 되돌리는 안전 메커니즘이 있습니다.

스키마 문제 해결 권장 사항(미리 보기)

Important

Microsoft는 "스키마 문제 해결" 권장 사항을 사용하지 않도록 지정하고 있습니다. 이전에 “스키마 문제 해결” 권장 사항이 처리했던 스키마 문제를 포함하여 데이터베이스 성능 문제를 모니터링하려면 Intelligent Insights를 사용하는 것이 좋습니다.

스키마 문제 해결 권장 사항 - Azure SQL Database가 데이터베이스에서 발생하는 스키마 관련 SQL 오류 수에서 변칙을 발견하면 스키마 수정에 대한 권장 사항이 표시됩니다. 이 권장 사항은 일반적으로 데이터베이스에서 1시간 내에 여러 스키마 관련 오류(잘못된 열 이름, 잘못된 개체 이름 등)가 발생할 때 나타납니다.

"스키마 문제"는 구문 오류의 클래스입니다. 이 오류는 SQL 쿼리의 정의와 데이터베이스 스키마 정의가 정렬되지 않은 경우에 발생합니다. 예를 들어 쿼리에 필요한 열 중 하나가 대상 테이블에 없거나 그 반대의 경우도 마찬가지입니다.

“스키마 문제 해결” 권장 사항”항"은 Azure SQL Database가 데이터베이스에서 발생하는 스키마 관련 SQL 오류 수에서 변칙을 발견하면 스키마 수정에 대한 권장 사항이 표시됩니다. 아래 표에는 스키마 문제와 관련된 오류가 나와 있습니다.

SQL 오류 코드: 메시지
201 프로시저 또는 함수 ''에는 ‘' 매개 변수가 들어가야 합니다. 이 매개 변수가 제공되지 않았습니다.
207 잘못된 열 이름: '*'.
208 잘못된 개체 이름 '*'.
213 열 이름 또는 제공된 값 수가 테이블 정의와 일치하지 않습니다.
2812 저장 프로시저 '%.*ls'을(를) 찾을 수 없습니다.
8144 프로시저 또는 함수*에 지정된 인수가 너무 많습니다.

사용자 지정 애플리케이션

개발자는 Azure SQL Database에 대한 성능 권장 사항을 사용하여 사용자 지정 애플리케이션을 개발하는 것을 고려할 수 있습니다. 데이터베이스에 대한 포털에 나열된 모든 권장 사항은 Get-AzSqlDatabaseRecommendedAction API를 통해 액세스할 수 있습니다.

다음 단계

  • 데이터베이스 인덱스 및 쿼리 실행 계획 자동 튜닝에 대한 자세한 내용은 Azure SQL Database 자동 튜닝을 참조하세요.
  • 자동화된 진단 및 성능 문제의 근본 원인 분석을 통해 데이터베이스 성능을 자동으로 모니터링하는 방법에 대한 자세한 내용은 Azure SQL Intelligent Insights를 참조하세요.
  • 상위 쿼리의 성능에 미치는 영향을 알아보려면 Query Performance Insights를 참조하세요.