데이터베이스 Watcher 데이터 수집 및 데이터 세트(프리뷰)
적용 대상: Azure SQL 데이터베이스 Azure SQL Managed Instance
데이터베이스 Watcher는 SQL 시스템 보기에서 모니터링 데이터를 수집하고 이를 데이터 세트 형식으로 데이터 저장소에 수집합니다. 각 데이터 세트는 하나 이상 SQL 시스템 보기의 데이터를 사용하여 구성됩니다. 데이터 저장소에는 각 데이터 세트에 대한 별도의 테이블이 있습니다.
데이터 수집
데이터베이스 Watcher는 T-SQL 쿼리를 사용하여 주기적인 간격으로 모니터링 데이터를 수집합니다. 쿼리를 실행할 때마다 수집된 데이터를 샘플이라고 합니다. 샘플 수집 빈도는 데이터 세트에 따라 다릅니다. 예를 들어, SQL 성능 카운터와 같이 자주 변경되는 데이터는 10초마다 수집될 수 있지만 데이터베이스 구성과 같은 정적 데이터는 5분마다 수집되는 경우가 많습니다. 자세한 내용은 데이터 세트를 참조하세요.
데이터베이스 Watcher는 Azure Data Explorer의 스트리밍 수집과 Microsoft Fabric의 실시간 분석을 활용하여 실시간에 가까운 모니터링을 제공합니다. 일반적으로 수집된 SQL 모니터링 데이터는 10초 이내에 보고 및 분석에 사용할 수 있습니다. 수집 통계 링크를 사용하여 데이터베이스 Watcher 대시보드에서 데이터 수집 지연 시간을 모니터링할 수 있습니다.
데이터베이스 Watcher와 애플리케이션 워크로드 간의 상호 작용
데이터베이스 감시자를 사용하도록 설정하면 애플리케이션 워크로드 성능에 관찰 가능한 영향을 미치지 않을 수 있습니다. 모니터링 쿼리는 일반적으로 1초 미만 범위에서 실행되는 반면, 대규모 데이터 세트 반환과 같이 더 많은 시간이 필요할 수 있는 쿼리는 드문 간격으로 실행됩니다.
애플리케이션 워크로드에 미치는 영향을 더욱 줄이기 위해 Azure SQL 데이터베이스의 모든 데이터베이스 Watcher 쿼리의 리소스는 내부 워크로드로 관리됩니다. 리소스 경합이 있는 경우, 쿼리 모니터링에 의한 리소스 소비는 데이터베이스에서 사용할 수 있는 총 리소스의 일부로 제한됩니다. 이렇게 하면 애플리케이션 워크로드가 모니터링 쿼리보다 우선순위가 높아집니다.
Azure SQL 리소스에서 실행되는 데이터 수집과 데이터베이스 워크로드 간의 차단 및 교착 상태와 같은 동시성 충돌을 방지하기 위해 모니터링 쿼리는 짧은 잠금 시간 제한과 낮은 교착 상태 우선 순위를 사용합니다. 동시성 충돌이 있는 경우 애플리케이션 워크로드 쿼리에 우선 순위가 지정됩니다.
전체 리소스 사용률이 높거나 동시성 충돌이 발생하는 경우 수집된 데이터의 간격을 관찰할 수 있습니다. 이러한 경우 모니터링 쿼리는 애플리케이션 워크로드를 위해 우선 순위를 해제할 수 있습니다.
Elastic Pool에서의 데이터 수집
Elastic Pool을 모니터링하려면 풀에서 1개의 데이터베이스를 앵커 데이터베이스로 지정해야 합니다. 데이터베이스 Watcher는 앵커 데이터베이스에 연결합니다. Watcher는 VIEW SERVER PERFORMANCE STATE
권한을 보유하기 때문에 앵커 데이터베이스의 시스템 보기는 풀 전체에 대한 모니터링 데이터를 제공합니다.
팁
모니터링할 각 Elastic Pool에 빈 데이터베이스를 추가하고 앵커 데이터베이스로 지정할 수 있습니다. 이렇게 하면 Elastic Pool 모니터링을 중단하지 않고도 다른 데이터베이스를 내외부로 또는 풀 간에 이동할 수 있습니다.
앵커 데이터베이스에서 수집된 데이터에는 풀 수준 메트릭 및 풀의 모든 데이터베이스에 대한 특정 데이터베이스 수준 성능 메트릭(예: 각 데이터베이스에 대한 리소스 사용률 및 요청 속도 메트릭)이 포함됩니다. 일부 시나리오에서는 탄력적 풀 SQL 대상을 추가하여 전체적으로 탄력적 풀을 모니터링할 수 있으므로 풀의 각 개별 데이터베이스를 모니터링할 필요가 없습니다.
풀 수준의 CPU, 메모리, 스토리지 사용률, 대기 통계와 같은 특정 모니터링 데이터는 풀의 개별 데이터베이스별로 특성을 파악할 수 없기 때문에 Elastic Pool 수준에서만 수집됩니다. 반대로 쿼리 런타임 통계, 데이터베이스 속성, 테이블 및 인덱스 메타데이터와 같은 특정 다른 데이터는 개별 데이터베이스를 SQL 대상으로 추가하는 경우에만 사용할 수 있습니다.
탄력적 풀의 개별 데이터베이스를 SQL 대상으로 추가하는 경우 탄력적 풀도 SQL 대상으로 추가해야 합니다. 이렇게 하면 데이터베이스 및 풀의 성능을 더 완벽하게 확인할 수 있습니다.
고밀도 Elastic Pool 모니터링
고밀도 Elastic Pool에는 많은 수의 데이터베이스가 포함되지만 컴퓨팅 크기는 상대적으로 작습니다. 이 구성을 사용하면 고객은 풀에서 적은 수의 데이터베이스만 동시에 활성화된다는 가정 하에 컴퓨팅 리소스 할당을 최소한으로 유지하여 상당한 비용을 절감할 수 있습니다.
애플리케이션 쿼리에 영향을 미치지 않도록 고밀도 Elastic Pool에서 데이터베이스 Watcher 쿼리에 사용할 수 있는 컴퓨팅 리소스는 더욱 제한됩니다. 이로 인해 데이터베이스 Watcher는 고밀도 Elastic Pool의 일부 데이터베이스에서 모니터링 데이터를 수집하지 못할 수 있습니다.
팁
조밀한 탄력적 풀을 모니터링하려면 탄력적 풀을 SQL 대상으로 추가하여 풀 수준에서 모니터링을 사용하도록 설정합니다.
고밀도 Elastic Pool에서는 여러 개별 데이터베이스를 모니터링하지 않는 것이 좋습니다. 데이터베이스 Watcher 쿼리에 사용할 수 있는 컴퓨팅 리소스가 부족하여 수집된 데이터에 간격이 발생하거나 데이터 샘플 간에 예상보다 큰 간격이 발생할 수 있습니다.
데이터 보존
고객은 수집된 SQL 모니터링 데이터를 저장할 수 있는 세 가지 데이터 저장소 유형 중 하나를 선택할 수 있습니다.
Azure Data Explorer 클러스터의 데이터베이스. 기본적으로 새 감시자마다 새 Azure Data Explorer 클러스터가 만들어지고 감시자와 동일한 Azure 지역에 위치합니다.
고객은 Azure Data Explorer 클러스터 및 데이터베이스의 위치를Azure 지역의 특정 Azure 지역으로 선택할 수 있습니다. Azure Data Explorer의 데이터 복제 기능에 대한 자세한 내용은 비즈니스 연속성 및 재해 복구 개요를 참조하세요.
무료 Azure Data Explorer 클러스터의 데이터베이스.
고객은 특정 Azure 지역을 선택할 수 있지만, 무료 Azure Data Explorer 클러스터 및 데이터베이스의 위치로 특정 Azure 지역을 선택할 수는 없습니다. 다른 하위 지역 또는 지역에 대한 데이터 복제는 지원되지 않습니다.
Microsoft Fabric 실시간 분석의 데이터베이스.
고객은 데이터베이스의 지리적 위치를 선택할 수 없습니다.
수집된 SQL 모니터링 데이터에 대한 데이터 보존을 완전히 제어하려면 고객은 Azure Data Explorer 클러스터의 데이터베이스를 데이터 저장소로 선택해야 합니다.
고객은 Azure Data Explorer 클러스터의 지리 및 지역을 모니터링 중인 Azure SQL 리소스의 지리 및 지역에 맞출 수 있습니다. Azure SQL 리소스가 여러 지역에 있는 경우, 고객은 데이터 보존 요구 사항을 충족하기 위해 여러 감시자 및 여러 Azure Data Explorer 클러스터를 만들어야 할 수 있습니다.
데이터 세트
이 섹션에서는 데이터 저장소의 컬렉션 빈도 및 테이블 이름을 포함하여 각 SQL 대상 형식에 사용할 수 있는 데이터 세트에 대해 설명합니다.
참고 항목
프리뷰 중에 데이터 세트를 추가하고 제거할 수 있습니다. 이름, 설명, 컬렉션 빈도 및 사용 가능한 열 등의 데이터 세트 속성은 변경할 수 있습니다.
데이터 세트 이름 | 테이블 이름 | 수집 빈도(hh:mm:ss) | 설명 |
---|---|---|---|
활성 세션 | sqldb_database_active_sessions |
00:00:30 |
각 행은 요청을 실행 중이거나 차단 중이거나 트랜잭션이 열려 있는 세션을 나타냅니다. |
백업 기록 | sqldb_database_sql_backup_history |
00:05:00 |
각 행은 성공적으로 완료된 데이터베이스 백업을 나타냅니다. |
처리 변경 | sqldb_database_change_processing |
00:01:00 |
각 행은 변경 데이터 캡처 또는 변경 피드(Azure Synapse Link)와 같은 변경 처리 기능에 대한 집계 로그 검사 통계의 스냅샷을 나타냅니다. |
변경 처리 오류 | sqldb_database_change_processing_errors |
00:01:00 |
각 행은 변경 데이터 캡처 또는 변경 피드(Azure Synapse Link)와 같은 변경 처리 기능을 사용할 때 변경 처리 중에 발생한 오류를 나타냅니다. |
연결 | sqldb_database_connectivity |
00:00:30 |
각 행은 데이터베이스에 대한 연결 프로브(로그인 및 쿼리)를 나타냅니다. |
지역 복제본 | sqldb_database_geo_replicas |
00:00:30 |
각 행은 지역 복제본 메타데이터 및 통계 등 주 또는 보조 지역 복제본을 나타냅니다. |
인덱스 메타데이터 | sqldb_database_index_metadata |
00:30:00 |
각 행은 인덱스 정의, 속성 및 운영 통계 등 인덱스 파티션을 나타냅니다. |
메모리 사용률 | sqldb_database_memory_utilization |
00:00:10 |
각 행은 데이터베이스 엔진 인스턴스에서 클럭에 의한 메모리 사용량 등 메모리 클럭을 나타냅니다. |
누락된 인덱스 | sqldb_database_missing_indexes |
00:15:00 |
각 행은 생성되는 경우 쿼리 성능을 개선할 수 있는 인덱스를 나타냅니다. |
메모리 부족 이벤트 | sqldb_database_oom_events |
00:01:00 |
각 행은 데이터베이스 엔진의 메모리 부족 이벤트를 나타냅니다. |
성능 카운터(일반) | sqldb_database_performance_counters_common |
00:00:10 |
각 행은 데이터베이스 엔진 인스턴스의 성능 카운터를 나타냅니다. 이 데이터 세트에는 일반적으로 사용된 카운터가 포함됩니다. |
성능 카운터(상세) | sqldb_database_performance_counters_detailed |
00:01:00 |
각 행은 데이터베이스 엔진 인스턴스의 성능 카운터를 나타냅니다. 이 데이터 세트에는 자세한 모니터링 및 문제 해결에 필요할 수 있는 카운터가 포함되어 있습니다. |
속성 | sqldb_database_properties |
00:05:00 |
각 행은 데이터베이스 옵션, 리소스 거버넌스 제한 및 기타 데이터베이스 메타데이터 등 데이터베이스를 나타냅니다. |
쿼리 런타임 통계 | sqldb_database_query_runtime_stats |
00:15:00 |
각 행은 쿼리 실행 통계 등 쿼리 저장소 런타임 간격을 나타냅니다. |
쿼리 대기 통계 | sqldb_database_query_wait_stats |
00:15:00 |
각 행은 대기 범주 통계 등 쿼리 저장소 런타임 간격을 나타냅니다. |
복제본 | sqldb_database_replicas |
00:00:10 |
각 행은 복제 메타데이터 및 통계 등 데이터베이스 복제본을 나타냅니다. 주 복제본에 수집된 경우 주 복제본과 지역 복제본을 포함하며, 보조 복제본에 수집된 경우 보조 복제본을 포함합니다. |
리소스 사용률 | sqldb_database_resource_utilization |
00:00:15 |
각 행은 시간 간격으로 데이터베이스에 대한 CPU, 데이터 IO, 로그 IO 및 기타 리소스 사용량 통계를 나타냅니다. |
선택 영역 통계 | sqldb_database_session_stats |
00:01:00 |
각 행은 로그인 이름, 호스트 이름, 애플리케이션 이름 등과 같은 비합산 세션 특성으로 집계된 데이터베이스에 대한 세션 통계 요약을 나타냅니다. |
SOS 스케줄러 | sqldb_database_sos_schedulers |
00:01:00 |
각 행은 SOS 스케줄러를 나타내며 스케줄러, CPU 노드 및 메모리 노드에 대한 통계가 포함됩니다. |
스토리지 IO | sqldb_database_storage_io |
00:00:10 |
각 행은 데이터베이스 파일을 나타내며 파일에 대한 누적 IOPS, 처리량 및 대기 시간 통계가 포함됩니다. |
스토리지 사용률 | sqldb_database_storage_utilization |
00:01:00 |
각 행은 데이터베이스를 나타내며 스토리지 사용량(예: tempdb , 쿼리 저장소 및 영구 버전 저장소)이 포함됩니다. |
테이블 메타데이터 | sqldb_database_table_metadata |
00:30:00 |
각 행은 테이블 또는 인덱싱된 뷰를 나타내며 행 수, 공간 사용량, 데이터 압축, 열 및 제약 조건과 같은 메타데이터가 포함됩니다. |
대기 통계 | sqldb_database_wait_stats |
00:00:10 |
각 행은 대기 유형을 나타내며 데이터베이스 엔진 인스턴스의 누적 대기 통계가 포함됩니다. Elastic Pool의 데이터베이스의 경우 데이터베이스 범위 대기 통계만 수집됩니다. |
참고 항목
Elastic Pool의 데이터베이스의 경우 풀 수준 데이터가 포함된 SQL Database 데이터 세트는 수집되지 않습니다. 여기에는 메모리 사용률, 메모리 부족 이벤트, 성능 카운터(공통) 및 성능 카운터(상세) 데이터 세트가 포함됩니다. 대기 통계 데이터 세트는 수집되지만 데이터베이스 범위 대기만 포함됩니다. 이를 통해 풀의 모든 데이터베이스에서 동일한 데이터를 수집하는 것이 방지됩니다.
풀 수준 데이터는 SQL Elastic Pool 데이터 세트에 수집됩니다. 지정된 Elastic Pool의 경우 성능 카운터(공통) 및 성능 카운터(상세) 데이터 세트에는 풀 수준 메트릭과 특정 데이터베이스 수준 메트릭(예: CPU, 데이터 IO, 로그 쓰기, 요청, 트랜잭션)이 포함됩니다.
공통 열
각 SQL 대상 형식에 대해 데이터 세트에는 다음 표에 설명된 대로 공통 열이 있습니다.
열 이름 | 설명 |
---|---|
subscription_id |
SQL 데이터베이스의 Azure 구독 ID입니다. |
resource_group_name |
SQL 데이터베이스의 리소스 그룹 이름입니다. |
resource_id |
SQL 데이터베이스의 Azure 리소스 ID입니다. |
sample_time_utc |
행의 값이 관찰된 시간(UTC)입니다. |
collection_time_utc |
Watcher가 행을 수집한 시간(UTC)입니다. 이 열은 수집 시간이 샘플 시간과 다를 수 있는 데이터 세트에 표시됩니다. |
replica_type |
다음 중 하나: 주, HA 보조, 지역 복제본 전달자, 명명된 보조. |
logical_server_name |
모니터링되는 데이터베이스 또는 Elastic Pool을 포함하는 Azure SQL 데이터베이스의 논리 서버 이름입니다. |
database_name |
모니터링되는 데이터베이스의 이름입니다. |
database_id |
모니터링되는 데이터베이스의 데이터베이스 ID로, 논리 서버 내에서 고유합니다. |
logical_database_id |
사용자 데이터베이스의 수명 동안 변경되지 기본 고유한 데이터베이스 식별자입니다. 데이터베이스 이름을 바꾸거나 서비스 목표를 변경해도 이 값은 변경되지 않습니다. |
physical_database_id |
사용자 데이터베이스에 해당하는 현재 물리적 데이터베이스에 대한 고유한 데이터베이스 식별자입니다. 데이터베이스 서비스 목표를 변경하면 이 값이 변경됩니다. |
replica_id |
하이퍼스케일 컴퓨팅 복제본에 대한 고유 식별자입니다. |
데이터베이스 Watcher가 행을 수집하기 전에 관찰한 샘플이 포함된 경우 데이터 집합에는 sample_time_utc
및 collection_time_utc
열이 모두 있습니다. 그렇지 않으면 관찰 시간과 수집 시간이 동일하고 데이터 세트에 sample_time_utc
열만 포함됩니다.
예를 들어 sqldb_database_resource_utilization
데이터 세트는 sys.dm_db_resource_stats 동적 관리 뷰(DMV)에서 파생됩니다. DMV에는 15초 간격으로 집계 리소스 통계를 보고하는 각 행의 관찰 시간인 end_time
열이 포함되어 있습니다. 이 시간은 sample_time_utc
열에 보고됩니다. 데이터베이스 Watcher가 이 DMV를 쿼리할 때 결과 집합에는 각각 end_time
가 다른 여러 행이 포함될 수 있습니다. 이 모든 행은 collection_time_utc
값이 동일합니다.