Sys.dm_os_performance_counter 해석하기
- Version : SQL Server 2005, 2008, 2008R2, 2012
SQL Server를 운영하는데 있어서 SQL Server 성능 카운터는 시스템의 상태를 측정 및 모니터링하는데 매우 중요한 도구 이다.
Sys.dm_os_performance_counter DMV는 SQL Server의 다양한 카운터 값들을 제공한다. 하지만 이 값은 원시적인 값이기 때문에 해석하는 능력이 필요하다.
이번 포스트는 CSS SQL Server Engineer 팀 블로그에 게시된 내용으로 필자가 읽고 이해한 내용을 바탕으로 정리하였으며 번역의 오류나 기술적 오류가 있음을 미리 알려두며 자세한 내용은 원문을 참고하길 바란다.
다음 스크립트를 실행 하여 0의 값을 반환하는 경우 SQL Server 설치 인스턴스가 Windows 운영체제의 성능 카운터를 표시하지 못한 상태이며 설치 로그에서 오류 3409 (이 인스턴스의 sqlctr.ini를 다시 설치하고 인스턴스 로그인 계정에 올바른 레지스트리 사용 권한이 있는지 확인하십시오")가 있는지 확인 한다. 이 오류는 성능 카운터가 사용할 수 있도록 설정되지 않았음을 나타낸다.
SELECT COUNT(*) from sys.dm_os_performance_counters; |
다음 스크립트를 실행하면 성능 카운터에 대한 행을 반환한다.
select * from sys.dm_os_performance_counters |
열 이름 | 데이터 형식 | 설명 |
Object_name | Nchar(128) | 이 카운터가 속한 범주 |
Counter_name | Nchar(128) | 카운터의 이름 |
Instance_name | Nchar(128) | 카운터의 특정 항목 이름 |
Cntr_value | Bigint | 카운터의 현재 값 (초당 카운터의 경우 누적 값임.) |
Cntr_type | Int | Windows 성능 아키텍처가 정의한 카운터 유형. |
각 카운터의 유형은 십진수 값으로 cntr_type 열에 표시 된다. SQL Server 2005 부터 SQL Server 2012 사이의 모든 버전에서 사용되는 고유 값은 다음과 같다.
Decimal | Hexadecimal | Counter type define |
1073939712 | 0x40030500 | PERF_LARGE_RAW_BASE |
537003264 | 0x20020500 | PERF_LARGE_RAW_FRACTION |
1073874176 | 0x40020500 | PERF_AVERAGE_BULK |
272696576 | 0x10410500 | PERF_COUNTER_BULK_COUNT |
65792 | 0x10410500 | PERF_COUNTER_LARGE_RAWCOUNT |
개별적으로 카운터에 대한 정보를 살펴 보자.
[PERF_LARGE_RAW_BASE]
- Decimal : 1073939712
- Hexadecimal : 0x40030500
이 카운터 값은 카운터의 분모로 사용되는 원시 데이터이다. 자세한 내용은 PERF_LARGE_RAW_FRACTION을 참고한다.
예를 들어 다음과 같은 데이터가 있을 때
Object_Name | Counter_name | Instance_name | Cntr_value | Cntr_type |
MSSQL$SQLSVR:Buffer Manager | Buffer cache hit ratio base | 3170 | 1073939712 |
이 값은 MSSQL$SQLSVR:Buffer Manager/Buffer cache hit raiot 계산의 분모값이 된다.
[PERF_LARGE_RAW_FRACTION]
- Decimal : 537003264
- Hexadecimal : 0x20020500
이 카운터의 값은 해당 PERF_LARGE_RAW_BASE 카운터 값에 대한 비율로 분수 값을 나타낸다.
예를 들면 다음과 같은 데이터가 있을 때
Object_Name | Counter_name | Instance_name | Cntr_value | Cntr_type |
MSSQL$SQLSVR:Buffer Manager | Buffer cache hit ratio | 2911 | 537003264 |
Hit ratio % (버퍼 캐시 적중률 %)
= 100 * MSSQL$SQLSVR:Buffer Manager\Buffer cache hit ratio / MSSQL$SQLSVR:Buffer Manager\Buffer cache hit ratio base
= 100 * 2911 / 3170
= 91.83%
[PERF_AVERAGE_BULK]
- Decimal : 1073874176
- Hexadecimal : 0x40020500
이 카운터의 값은 평균 메트릭을 나타낸다. Cntr_value 값은 누적되며 PERF_LARGE_RAW_BASE의 기본값은 누적되어 사용된다. 이 값은 PERF_AVERAGE_BULK 값 A1과 A2 와 PERF_LARGE_RAW_BASE 값 B1 및 B2를 사용하여 A1 및 A2, B1 및 B2 사이의 차이를 계산한다. 최종값은 다음 차이의 비율로 계산된다.
예를 들어 다음과 같은 데이터가 있을 때
Object_name | Counter_name | Instance_name | Cntr_value | Cntr_type | |
SSQL$SQLSVR:Latches | Average Latch Wait Time (ms) | 14257 | 1073874176 | A1 | |
SSQL$SQLSVR:Latches | Average Latch Wait Time Base | 359 | 1073939712 | B1 |
Object_name | Counter_name | Instance_name | Cntr_value | Cntr_type | |
SSQL$SQLSVR:Latches | Average Latch Wait Time (ms) | 14272 | 1073874176 | A2 | |
SSQL$SQLSVR:Latches | Average Latch Wait Time Base | 360 | 1073939712 | B2 |
Average Latch Wait Time (ms) for the interval
= (A2 - A1) / (B2 - B1)
= (14272 - 14257) / (360 - 359)
= 15.00 ms
[PERF_COUNTER_BULK_COUNT]
- Decimal : 272696576
- Hexadecimal : 0x10410500
이 카운터의 값은 속도 메트릭을 나타낸다. Cntr_value 값은 누적되며 PERF_COUNTER_BULK_COUNT 값의 두 샘플을 이용하여 얻을 수 있다. 샘플 값은 초 단위로 샘플 간격에 의해 구분되며 초당 속도를 제공 한다.
예를 들어 다음과 같은 데이터가 있을 때
Ms_ticks | OBJECT_NAME | counter_name | Instance_name | Cntr_value | Cntr_type |
488754390 | MSSQL$SQLSVR:Databases | Transactions/sec | AdvWrks | 1566 | 272696576 |
Ms_ticks | OBJECT_NAME | counter_name | Instance_name | Cntr_value | Cntr_type |
488755468 | MSSQL$SQLSVR:Databases | Transactions/sec | AdvWrks | 2055 | 272696576 |
The value for Transactions/sec for the interval
= (Value2 - Value1) / (seconds between samples)
= (Value2 - Value1) / ((ms_value2 - ms_value1) / 1000)
= (2055 - 1566) / ((488755468-488754390) / 1000)
= 489 transactions/sec
[PERF_COUNTER_LARGE_RAWCOUNT]
- Decimal : 65792
- Hexadecimal : 0x10410500
이 카운터의 값은 마지막으로 관찰된 값을 나타낸다. 주로 개체의 수를 추적하는데 사용된다.
예를 들어 다음과 같은 데이터가 있을 때
Object_name | counter_name | Instance_name | Cntr_value | Cntr_type |
MSSQL$SQLSVR:Buffer Manager | Total pages | 5504 | 65792 |
The value of the counter MSSQL$SQLSVR:Buffer Manager\Total pages = 5504
이처럼 다양한 카운터를 사용하여 수집하는 것도 중요하지만 카운터가 의미하는 값을 해석할 줄 알아야 올바른 모니터링을 할 수 있다.
[참고자료]
강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp