데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

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
1870 백업 미디어 세트에 압축 백업 추가하기 jevida(강성욱) 2016.10.08 1449
1869 Collation에 따른 실행계획 변경과 성능 문제 jevida(강성욱) 2016.10.08 1667
1868 SQL Connection Timeout 디버깅 with BizTalk Server jevida(강성욱) 2016.10.08 2270
1867 인스턴스 파일 초기화 활성 jevida(강성욱) 2016.10.08 1706
1866 누락된 인덱스 확인하기 jevida(강성욱) 2016.10.08 2852
1865 비클러스터 인덱스 페이지 내용 jevida(강성욱) 2016.10.08 2011
1864 ATTACH DATABASE 오류 1314 jevida(강성욱) 2016.10.08 1161
1863 SQL Server 커넥션 풀링 jevida(강성욱) 2016.10.08 4022
1862 가상 SQL Server에 Hot Add vCPU 사용하기 jevida(강성욱) 2016.10.08 1112
1861 DDL 트리거를 활용한 ERRORLOG에 XEVENT 상태 기록하기 jevida(강성욱) 2016.10.08 1347
1860 쉐어포인트의 SQL Server 접속 문제 jevida(강성욱) 2016.10.08 1446
1859 Lazy Log Truncation jevida(강성욱) 2016.10.08 1286
1858 인덱스 구성과 상황에 따른 인덱스 성능 jevida(강성욱) 2016.10.08 1461
1857 Max worker thread 초과 이슈 jevida(강성욱) 2016.10.08 2646
1856 SQL Server Failover 클러스터 설치 트러블슈팅 jevida(강성욱) 2016.10.08 2339
1855 MAXDOP 극대화 하기 jevida(강성욱) 2016.10.08 1998
1854 SQL Server 가상화 팁 jevida(강성욱) 2016.10.08 2018
1853 Net Framework 4.0과 SQL Server 2008 설치 오류 jevida(강성욱) 2016.10.08 1840
1852 SQL Server 인덱스 튜닝 접근 jevida(강성욱) 2016.10.07 3433
» Sys.dm_os_performance_counter 해석하기 jevida(강성욱) 2016.10.07 2260





XE Login