SQL Server/SQL Server Tip

Sys.dm_os_performance_counter 해석하기

SungWookKang 2015. 7. 22. 10:42
반응형

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

 

 

이처럼 다양한 카운터를 사용하여 수집하는 것도 중요하지만 카운터가 의미하는 값을 해석할 줄 알아야 올바른 모니터링을 할 수 있다.

 

 

[참고자료]

 

 

 

2013-09-24 / 강성욱 / http://sqlmvp.kr

 

 

 

반응형