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

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 34987
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 17248
1854 SQL Server 가상화 팁 jevida(강성욱) 2016.10.08 2085
1853 Net Framework 4.0과 SQL Server 2008 설치 오류 jevida(강성욱) 2016.10.08 1902
1852 SQL Server 인덱스 튜닝 접근 jevida(강성욱) 2016.10.07 3550
» Sys.dm_os_performance_counter 해석하기 jevida(강성욱) 2016.10.07 2578
1850 프로파일러를 이용한 중첩된 프로시저 디버깅 jevida(강성욱) 2016.10.07 1651
1849 SAN 스토리지 성능 모니터 - SAN 스토리지를 사용하는 경우 성능 카운터를 어떻게 모니터링 할까? jevida(강성욱) 2016.10.07 1843
1848 저장된 Plan Cache 확인 및 활용 jevida(강성욱) 2016.10.07 4821
1847 Xp_fixeddrives 세부 정보 확인하기 jevida(강성욱) 2016.10.07 2007
1846 강제 매개변수화로 인한 성능 저하 사례 jevida(강성욱) 2016.10.07 1646
1845 파라메터 스니핑과 데이터 스큐 jevida(강성욱) 2016.10.07 1574
1844 DBCC CHECKDB 버그 및 해결 방법 jevida(강성욱) 2016.10.07 1621
1843 NOLOCK HINT 이해 jevida(강성욱) 2016.10.07 7993
1842 인증으로부터 분리된 사용자 방지 jevida(강성욱) 2016.10.07 3182
1841 비관리자 계정으로 쿼리 계획 보기 jevida(강성욱) 2016.10.07 1291
1840 SSMS 폴링 간격 구성 jevida(강성욱) 2016.10.07 1846
1839 Deadlock 감지하여 알림하기 jevida(강성욱) 2016.10.07 1897
1838 Suspect_pages 테이블 이해 및 관리 jevida(강성욱) 2016.10.07 1441
1837 SSRS SocketException jevida(강성욱) 2016.10.07 1532
1836 파티션 분할 시 I/O 최소화 하기 jevida(강성욱) 2016.10.07 1932
1835 대량 BCP 작업 시 발생하는 오류 (665, 1450, 33) jevida(강성욱) 2016.10.07 1764





XE Login