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

완료됨

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

SQL Server 모니터링 및 문제 해결에 일반적으로 사용되는 모든 도구는 성능 모니터 같은 도구를 포함하여 Azure 가상 머신에서 실행되는 SQL Server에 적용할 수도 있습니다. 그러나 PaaS(Platform as a Service)의 특성으로 인해 Azure SQL 데이터베이스 및 Azure SQL Managed Instance는 다른 도구 세트를 제공합니다. 다음으로, Azure의 PaaS 제품 및 해당 기능에 대한 특정 도구를 살펴봅니다.

성능 결과와 기준 비교

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

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

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

자동 조정

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

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

자동 플랜 수정

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

Screenshot of the Query Store view for regressed plan correction.

지정된 예제에서 계획 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는 자동 인덱스 튜닝을 지원합니다. 이것은 데이터베이스에는 시간이 경과함에 따라 기존 워크로드에 관해 학습하고 향상된 성능을 위해 인덱스를 추가하거나 제거하는 데 관한 권장 사항을 제공하는 기능이 있다는 것을 의미합니다. 향상된 쿼리 계획의 강제 적용과 마찬가지로, 기존 인덱스 성능에 따라 자동 인덱스 생성 또는 제거를 허용하도록 데이터베이스를 구성할 수 있습니다.

Screenshot of Automatic tuning Options for 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 데이터베이스의 기본 블레이드 중 지능형 성능 섹션에서 찾을 수 있습니다.

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

Screenshot of Query Performance Insights dashboard from Azure portal.

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

Screenshot of a custom dashboard in Query Performance Insight.

개별 쿼리를 분석하면 쿼리 ID와 쿼리 자체뿐 아니라 쿼리 집계 유형 및 연결된 기간을 볼 수 있습니다.

Screenshot of the details of Query ID 3204 in Query Performance Insight.

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

Important

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

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

  • 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의 단일 테넌트 격리 모델에 있습니다. 한 데이터베이스의 이벤트 세션은 다른 데이터베이스의 데이터 또는 이벤트에 액세스할 수 없습니다. 마스터 데이터베이스의 컨텍스트에서 CREATE EVENT SESSION 문을 실행할 수 없습니다.

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