데이터베이스 성능 모니터링

완료됨

데이터베이스 성능 문제를 해결하는 데 사용하는 문제 해결 기술의 주요 부분은 Azure SQL에서 동일하게 유지됩니다.

일반적으로 SQL Server 모니터링 및 문제 해결에 사용되는 모든 도구는 성능 모니터와 같은 도구를 포함하여 Azure Virtual Machine에서 실행되는 SQL Server에도 적용됩니다. 그러나 PaaS(Platform as a Service)의 특성상 Azure SQL Database 및 Azure SQL Managed Instance는 다른 도구 집합을 제공합니다. 다음으로, Azure의 PaaS 제품 및 해당 기능에 대한 특정 도구를 살펴봅니다.

성능 결과와 기준 비교

기준을 설정하는 프로세스는 일반적으로 실제 데이터베이스 마이그레이션 전에 잘 시작됩니다. 여기에는 원래 환경에서 데이터베이스의 표준 성능을 반영하는 포괄적인 데이터 측정 집합 수집이 포함됩니다. 이러한 측정값에는 CPU 사용량, 응답 시간, 트랜잭션 속도 및 오류 비율이 포함될 수 있지만 이에 국한되지는 않습니다.

이 기준은 마이그레이션된 데이터베이스의 성능을 비교할 수 있는 참조 지점 역할을 합니다. 그러나 마이그레이션된 데이터베이스의 성능 메트릭과 이 기준 데이터의 평가 또는 비교는 마이그레이션이 완료된 후에만 수행됩니다.

마이그레이션 후 새 데이터베이스 환경의 성능을 모니터링하고 측정합니다. 그런 다음 이러한 마이그레이션 후 메트릭을 마이그레이션 전 기준과 비교하여 불일치 또는 성능 문제를 식별합니다. 이 비교는 마이그레이션이 데이터베이스 성능에 부정적인 영향을 미쳤는지 또는 성능 향상을 위해 최적화가 필요한 영역이 있는지를 이해하는 데 도움이 됩니다.

자동 조정

자동 조정 은 워크로드에서 지속적으로 학습하고, 잠재적인 문제와 개선 사항을 식별하고, 쿼리 저장소 데이터를 기반으로 권장 사항을 제공하는 기능입니다. 스키마 또는 인덱스 수정 또는 데이터 업데이트로 인한 실행 계획의 변경 내용에 맞게 조정됩니다.

Azure Portal을 사용하여 수동으로 튜닝 권장 사항을 적용하거나 자동 튜닝이 자동으로 튜닝 권장 사항을 적용하도록 할 수 있습니다. Azure SQL Database에서는 인덱스를 튜닝하여 쿼리 성능을 향상시킬 수도 있습니다.

자동 플랜 수정

쿼리 저장소의 도움으로 데이터베이스 엔진은 쿼리 실행 계획이 성능에서 회귀된 시기를 감지할 수 있습니다. 사용자 인터페이스를 통해 성능이 저하된 계획을 수동으로 식별할 수 있지만 쿼리 저장소에는 자동으로 알리는 옵션도 있습니다.

회귀된 계획 수정에 대한 쿼리 저장소 보기의 스크린샷.

지정된 예제에서 계획 ID 1 옆에 확인 표시가 표시되어 계획이 강제로 적용되었음을 나타냅니다.

자동 튜닝을 사용하도록 설정하면 데이터베이스 엔진은 다음 조건에서 제안된 쿼리 실행 계획을 자동으로 적용합니다.

  • 이전 계획의 오류 비율이 권장 계획의 오류 비율을 초과합니다.
  • 예상 CPU 게인은 10초를 초과합니다.
  • 강제 계획이 이전 계획보다 우수합니다.

자동 계획 강제 적용이 발생하면 데이터베이스 엔진이 마지막 좋은 계획을 적용하고 성능을 모니터링합니다. 강제 계획이 이전 계획보다 더 잘 수행되지 않으면 강제 실행되지 않고 새 계획이 컴파일됩니다. 이전 계획을 능가하는 경우 다시 컴파일이 발생할 때까지 강제로 유지됩니다.

다음 T-SQL 쿼리를 사용하여 자동 계획 수정을 사용하도록 설정합니다.

ALTER DATABASE [WideWorldImporters] SET AUTOMATIC_TUNING (FORCE_LAST_GOOD_PLAN = ON);

동적 관리 뷰, sys.dm_db_tuning_recommendations통해 자동 조정 권장 사항을 볼 수 있습니다. 이 DMV는 권장 사항 세부 정보, 형식 및 상태를 제공합니다. 데이터베이스에 대해 자동 튜닝이 사용되는지 확인하려면 sys.database_automatic_tuning_options보기를 참조하세요.

Azure SQL Managed Instance에 대한 자동 조정은 FORCE LAST GOOD PLAN지원합니다.

자동 튜닝에 대한 알림을 사용하려면 자동 튜닝에 대한 전자 메일 알림을 참조하세요.

자동 인덱스 관리

Azure SQL Database는 자동 인덱스 튜닝을 지원합니다. 즉, 시간이 지남에 따라 데이터베이스는 기존 워크로드에 대해 알아보고 더 나은 성능을 제공하기 위해 인덱스 추가 또는 제거에 대한 권장 사항을 제공할 수 있습니다. 향상된 쿼리 계획을 강제 적용하는 것과 마찬가지로 기존 인덱스 성능에 따라 자동 인덱스 생성 또는 제거를 허용하도록 데이터베이스를 구성할 수 있습니다.

Azure SQL Database에 대한 자동 튜닝 옵션의 스크린샷

또는 다음 쿼리를 사용하여 데이터베이스에서 사용하도록 설정된 자동 튜닝 기능을 확인합니다.

SELECT name,
    desired_state_desc,
    actual_state_desc,
    reason_desc
FROM sys.database_automatic_tuning_options

인덱스 만들기는 리소스를 많이 사용하며 성공적인 생성은 워크로드에 부정적인 영향을 주지 않도록 하는 데 중요합니다.

Azure SQL Database는 성능 저하를 방지하기 위해 새 인덱스를 자동으로 구현하는 데 필요한 리소스를 모니터링합니다. 예를 들어 기존 워크로드에 필요한 리소스가 인덱스 생성을 방해하는 경우 리소스를 사용할 수 있을 때까지 튜닝 작업이 지연됩니다.

Query Performance Insight 살펴보기

데이터베이스 성능 최적화 작업의 초기 단계에는 리소스를 가장 많이 사용하는 쿼리를 정확히 찾아내는 작업이 포함됩니다. 이전 SQL Server 버전에서는 광범위한 추적 및 복잡한 SQL 스크립트 집합이 필요하므로 데이터 수집 프로세스가 번거로이 번거로이되었습니다.

문제가 있는 쿼리 식별

Azure SQL Database는 관리자가 비용이 많이 드는 쿼리를 신속하게 식별할 수 있는 Query Performance Insight 라는 도구를 제공합니다. Azure SQL Database의 기본 블레이드의 지능형 성능 섹션 아래에 있습니다.

Azure SQL Database의 Query Performance Insight는 장기 실행 쿼리, 리소스를 많이 사용하는 상위 쿼리(기본값) 또는 사용자 지정 필터의 세 가지 필터링 옵션을 제공합니다. CPU, 데이터 IO 또는 로그 IO와 같이 선택한 리소스별로 정렬된 상위 5개 쿼리를 표시합니다. 아래쪽 눈금 내에서 행을 선택하여 개별 쿼리를 드릴할 수 있습니다. 각 행은 막대 그래프의 색과 일치하는 고유 색으로 표시됩니다.

Azure Portal의 Query Performance Insights 대시보드 스크린샷

사용자 지정 탭은 다른 옵션보다 더 많은 유연성을 제공합니다. 이를 통해 데이터 시각화에 영향을 주는 몇 가지 드롭다운 메뉴를 사용하여 성능 데이터를 보다 맞춤식으로 검사할 수 있습니다. 주요 메트릭에는 AZURE SQL Database의 서비스 계층 및 컴퓨팅 리소스에 의해 제한되는 성능 측면인 CPU, 로그 IO, 데이터 IO메모리가 포함됩니다.

Query Performance Insight의 사용자 지정 대시보드 스크린샷

개별 쿼리를 드릴인하면 쿼리 ID와 쿼리 자체뿐만 아니라 쿼리 집계 유형 및 관련 기간을 볼 수 있습니다.

Query Performance Insight의 쿼리 ID 3204 세부 정보 스크린샷

Query Performance Insight는 쿼리의 실행 계획을 표시하지 않지만 해당 쿼리를 신속하게 식별하고 정보를 사용하여 데이터베이스의 쿼리 저장소에서 계획을 추출할 수 있습니다.

경고

Azure Portal을 사용하여 Azure SQL Database의 데이터베이스에 대한 성능 경고를 설정할 수 있습니다. 이러한 경고는 특정 메트릭(예: 데이터베이스 크기 또는 CPU 사용량)이 임계값에 도달하면 이메일을 통해 알리거나 웹후크를 호출할 수 있습니다.

경고를 설정하는 프로세스는 SQL Database와 SQL Managed Instance 간에 비슷합니다. Azure SQL Database에 대한 성능 경고를 설정하려면 모니터링 섹션으로 이동하여 경고를 선택합니다. 여기에서 새 경고 규칙을 설정하고, 조건을 정의하고, 작업 그룹을 만들어야 합니다.

Azure SQL Managed Instance에 대한 경고에 대한 자세한 내용은 Azure Portal을 사용하여 Azure SQL Managed Instance에 대한 경고 만들기를 참조하세요. Azure SQL Database에 관심이 있는 경우 Azure Portal을 사용하여 Azure SQL Database 및 Azure Synapse Analytics에 대한 경고 만들기를 참조하세요.

Azure SQL Insights

Azure SQL Insights는 대화형 및 즉시 사용할 수 있는 시각화를 제공하여 모니터링 환경을 향상시킵니다. 원격 분석 수집 및 빈도를 사용자 지정하고 여러 원본의 데이터를 단일 모니터링 환경으로 결합할 수 있습니다. 또한 시간 경과에 따른 메트릭 세트를 유지하므로 과거에 발생했을 수 있는 성능 문제를 조사할 수 있습니다.

중요합니다

마이그레이션된 데이터베이스가 프로덕션에 완전히 통합된 후에만 Azure SQL Insights를 설정하는 것이 좋습니다. 이렇게 하면 마이그레이션 및 테스트 단계 중에 도구가 시끄러운 데이터를 캡처하지 못하게 됩니다.

SQL Insights를 시작하려면 SQL 서버에서 데이터를 모니터링하고 원격으로 수집하는 전용 가상 머신이 필요합니다. 이 전용 가상 머신에는 다음 구성 요소가 설치되어 있어야 합니다.

  • Azure Monitor 에이전트
  • 워크로드 Insights 확장

또한 SQL Insights를 설정하려면 다음 구성 요소가 필요합니다.

모니터링 프로필 – 모니터링할 서버, 인스턴스 또는 데이터베이스를 그룹화합니다.

Log Analytics 작업 영역 - SQL 모니터링 데이터를 보낼 위치입니다.

컬렉션 설정 – 프로필에 대한 데이터 컬렉션을 사용자 지정할 수 있습니다. 기본 설정은 대부분의 모니터링 시나리오를 포함하며 일반적으로 변경할 필요가 없습니다.

확장 이벤트

확장 이벤트 도구는 자세한 서버 및 데이터베이스 작업을 캡처하는 강력한 모니터링 시스템입니다. 필터를 적용하여 데이터 수집 오버헤드를 줄이고 특정 성능 문제에 집중할 수 있습니다. 모든 Azure SQL 제품은 확장 이벤트를 지원합니다.

확장 이벤트 설정은 SQL Server, Azure SQL Database 및 Azure SQL Managed Instance에서 유사하지만 이 모듈은 설정 프로세스를 가르치는 것이 아니라 차이점에 중점을 둡니다.

Azure SQL Database에서 확장 이벤트를 구성할 때의 몇 가지 주요 차이점은 다음과 같습니다.

  • Transact-SQL: SQL Server에서 CREATE EVENT SESSION 명령을 실행할 때 절을 ON SERVER 사용합니다. 하지만 Azure SQL Database에서는 ON DATABASE 절을 대신 사용합니다. ON DATABASE 절은 ALTER EVENT SESSIONDROP EVENT SESSION Transact-SQL 명령에도 적용됩니다. Azure SQL Database는 데이터베이스 범위 세션만 지원합니다.

  • 데이터베이스 범위 세션: 확장 이벤트는 Azure SQL Database의 단일 테넌트 격리 모델을 기반으로 하고 있습니다. 한 데이터베이스의 이벤트 세션은 다른 데이터베이스의 데이터 또는 이벤트에 액세스할 수 없습니다. master database의 컨텍스트에서 CREATE EVENT SESSION 문을 실행할 수 없습니다.

  • 스토리지: 데이터베이스가 Azure SQL Database에 있는 서버의 파일 시스템에 액세스할 수 없으므로 확장 이벤트 세션을 저장하도록 스토리지 계정 대상을 구성할 수 있습니다.