Database/MS-SQL

DBCC memorystatus 를 사용하여 메모리 모니터링

99iberty 2013. 10. 24. 16:41

dbrang.tistory.com/attachment/48e1b42c7c6997T.doc

 

DBCC MEMORYSTATUS를 사용하여 SQL Server 메모리 사용 모니터


DBCC MEMORYSTATUS 명령은 SQL Server의 현재 메모리 상태에 대한 스냅샷을 제공합니다. 이 명령의 출력 결과는 SQL Server의 메모리 소비 또는 특정 메모리 부족 오류(오류 로그에서 이 출력을 자동으로 인쇄하는 많은 오류)와 관련된 문제를 해결하는 데 유용합니다. 또한 메모리 부족 조건과 관련이 있을 수 있는 오류가 발생한 경우에 특정 지원 문제 과정 동안 이 명령을 실행하도록 Microsoft 고객기술지원부에서 요청할 수 있습니다.

이 명령은 Microsoft 고객기술지원부를 위한 진단 도구입니다. 제공되는 출력 형식과 세부 정보 수준은 서비스 팩 및 제품 릴리스마다 바뀔 수 있습니다. 앞으로 출시될 제품 버전에서는 DBCC MEMORYSTATUS 명령에서 제공하는 기능이 다른 메커니즘으로 대체되어 이 명령이 더 이상 기능하지 않을 수도 있습니다. 이 명령을 변경하거나 제거할 때까지는 추가 경고가 나타나지 않습니다. 따라서, 이 동작에 의존하는 응용 프로그램이 경고 없이 중단될 수 있습니다
.

DBCC MEMORYSTATUS
의 출력 결과에는 7가지 섹션이 포함되어 있습니다. 이 문서에서는 처음 4섹션에 있는 출력 결과에서 조금씩 수집할 수 있는 키 데이터 중 몇 가지에 대해 설명합니다. 나머지 섹션은 독점적 구현 세부 정보를 포함하고 있지만 이 문서에 설명되어 있지 않습니다. Microsoft 고객기술지원부는 이 문서에 나와 있는 카운터 이외의 다른 카운터의 질문에 관한 답변이나 추가 정보를 제공하지 않습니다.

추가 정보

첫 번째 섹션

첫 번째 섹션에서는 버퍼 풀에 있는 8KB 버퍼의 배분에 대해 설명합니다. 버퍼 풀에 각 잠재적 8KB 페이지에 대해 버퍼 구조가 하나씩 있습니다. AWE(Address Windowing Extensions)가 사용 가능하게 설정된 경우에는 여기에 실제 페이지가 포함됩니다. 이 구조에는 기본 페이지의 상태(, 이 페이지가 수정되었는지, 고정되었는지, IO에 있는지 등)를 나타내는 비트 수가 포함되어 있습니다. 이 섹션에서는 특정 상태 비트를 갖고 있는 버퍼 수에 대해 상세히 설명합니다.

Buffer Distribution Buffers ------------------------------ ----------- Stolen 241 Free 95 Procedures 89 Inram 0 Dirty 16 Kept 0 I/O 0 Latched 18 Other 880 (9 row(s) affected)

Stolen. Stolen 메모리는 정렬 또는 해시 작업에 사용 중인 버퍼(쿼리 작업 영역 메모리)나 잠금, 트랜잭션 컨텍스트 및 연결 정보 같은 내부 데이터 구조 저장용으로 할당하기 위해 일반 메모리 저장소로 사용 중인 버퍼를 나타냅니다. 버퍼 풀에서 Stolen 버퍼를 플러시하는 데 lazywriter 프로세스가 허용되지 않습니다.

Free. Free
는 현재 사용되고 있지 않은 커밋된 버퍼를 나타냅니다. 데이터를 보유하는 데 사용할 수 있으며, 다른 구성 요소에서 요청해서 Stolen으로 표시될 수 있습니다
.

Procedures. Procedures
는 캐시된 저장 프로시저 메모리를 보유하고 있는 버퍼를 나타냅니다. 이 버퍼에는 프로시저와 캐싱된 임의 계획에 대한 컴파일된 계획과 실행 계획이 포함되어 있습니다
.

Inram. Inram
DBCC PINTABLE 명령이나 sp_tableoption 저장 프로시저를 사용하여 고정되어 메모리에서 제거할 수 없는 고정 테이블에 대한 페이지를 나타냅니다
.

Dirty. Dirty
는 아직 디스크로 플러시되지 않은 변경 내용이 있는 데이터 페이지를 나타냅니다
.

Kept. Kept
는 플러시되지 않도록 메모리에 임시로 고정된 페이지를 나타냅니다. SQL Server 2000에서는 이 값이 사용되지 않습니다
.

I/O. I/O
는 보류 중인 I/O 작업에서 대기 중인 버퍼를 나타냅니다. SQL Server 2000에서는 AWE를 통해 버퍼를 매핑하거나 매핑을 해제하는 것도 여기에 포함됩니다
.

Latched.
걸쇠(latched) 버퍼는 연결이 해당 페이지에서 행을 읽거나 수정하고 있는 버퍼 수를 기록합니다. 걸쇠는 페이지의 데이터를 읽거나 수정하는 동안 데이터의 물리적 일관성을 확인하는 데 사용되지만, 잠금은 논리적 및 트랜잭션 일관성을 확인하는 데 사용됩니다
.

Other.
앞에서 설명한 기준을 충족시키지 못하는 커밋된 페이지입니다. 일반적으로, 이 기준을 충족시키는 버퍼 중 대다수는 버퍼 캐시에 있는 해시된 데이터와 인덱스 페이지입니다.

두 번째 섹션

두 번째 섹션에는 버퍼 풀의 전체 크기와 구성을 반영하는 몇 가지 합계의 목록이 나와 있습니다.

Buffer Counts Buffers ------------------------------ ----------- Committed 1339 Target 6318 Hashed 914 InternalReservation 120 ExternalReservation 0 Min Free 16 (6 row(s) affected)

Committed. Microsoft Windows NT에서 커밋된 전체 버퍼 수입니다. Committed 값은 버퍼 풀의 현재 "크기"에 해당합니다. AWE가 사용 가능하게 설정된 경우 이 값에는 할당된 실제 메모리도 포함됩니다.

Target.
목표 Committed 수 또는 해당 버퍼 풀에 대해 원하는 크기입니다. Target 수가 Committed 값보다 크면 버퍼 풀의 크기가 계속 증가하는 것입니다. Target 수가 Committed 값보다 작으면 버퍼 풀의 크기가 계속 감소하는 것입니다. lazywriter 프로세스는 이 값을 사용하여 해당 버퍼 풀의 크기를 증가시킬 것인지 아니면 감소시킬 것인지 결정합니다
.

Hashed.
해당 버퍼 풀에 저장되어 있는 데이터 및 인덱스 페이지 수입니다
.

InternalReservation.
버퍼 풀이 자신을 위해 보유하고 있는 페이지 수입니다. InternalReservation 값은 현재 사용자 수에 대해 간단한 데이터 요청을 만족시키는 데 필요한 최소 페이지 수입니다
.

ExternalReservation.
정렬 또는 해시 작업을 수행할 쿼리용으로 예약되었지만 아직 빼앗기지 않은 페이지 수입니다. 이 값은 다량의 메모리에 대한 요구가 곧 있을 것임을 lazywriter에 알리기 위한 힌트로 사용됩니다
.

Min Free.
해당 버퍼 풀이 사용 가능한 페이지 목록에서 유지하려고 하는 페이지 수입니다. 사용 가능한 페이지 목록이 Min Free 값 아래로 떨어지면 버퍼 풀이 데이터 캐시에서 오래된 페이지를 제거하거나 프로시저 캐시에서 오래된 프로시저를 제거하여 사용 가능한 페이지 목록을 채우려고 합니다.

세 번째 섹션

세 번째 섹션에서는 프로시저 캐시의 구성에 대해 설명합니다.

Procedure Cache Value ------------------------------ ----------- TotalProcs 17 TotalPages 89 InUsePages 40 (3 row(s) affected)

TotalProcs. 해당 프로시저 캐시에 현재 있는 캐시된 개체의 총 수입니다. 이 값은 syscacheobjects 가상 테이블의 항목 수와 일치합니다. 성능 모니터를 사용하여 SQL Server:Cache Manager 개체를 모니터해서 캐시된 개체의 유형(: 트리거, 프로시저 및 임의)을 상세하게 분석할 수 있습니다.

TotalPages.
캐시된 개체 모두를 저장하기 위해 갖고 있어야 할 누적 페이지 수입니다
.

InUsePages.
현재 실행 중인 프로시저에 속해 있는 프로시저 캐시의 페이지 수입니다. 이 페이지는 삭제할 수 없습니다.

네 번째 섹션

네 번째 섹션에서는 해당 서버에 있는 주요 구성 요소 그룹 간에 빼앗긴 버퍼를 상대적으로 배분하는 것에 대해 설명합니다. SQL Server는 작은 할당에 버퍼 풀 페이지를 사용하고 약 8KB를 초과하는 할당에 대해서만 운영 체제 루틴으로 바뀌는 자체 메모리 관리자를 구현합니다. 이렇게 8KB보다 큰 할당은 버퍼 풀 외부에서 이루어지는데, 보통 이를 MemToLeave 영역에서의 할당이라고 합니다. 이 영역의 크기는 -g 명령줄 옵션을 사용하여 제어할 수 있습니다.

일반적으로, MemToLeave에서의 메모리 할당 중 대부분은 COM 개체, 확장 저장 프로시저 및 연결된 서버 같은 프로세스 내에서 실행 중인 비 SQL Server 메모리 소비자에서 이루어집니다. DBCC MEMORYSTATUS에서 보고되는 운영 체제 관련 값만이 SQL Server에서 직접 수행하는 MemToLeave 할당에 영향을 미칩니다. 그 밖의 다른 구성 요소에서의 MemToLeave에서 발생하는 다른 할당은 SQL Server가 이러한 메모리 요청에 대한 지식이 없기 때문에 포함되지 않습니다.

Dynamic Memory Manager Buffers ------------------------------ ----------- Stolen 330 OS Reserved 152 OS Committed 138 OS In Use 129 General 322 QueryPlan 87 Optimizer 0 Utilities 10 Connection 40 (9 row(s) affected)

Stolen. 5가지 메모리 관리자(General, Query Plan, Optimizer, Utilities, Connection)가 버퍼 풀에게서 빼앗은 전체 버퍼 수입니다. 이들 페이지는 8KB보다 작은 메모리 할당을 서비스하는 데 사용됩니다.

OS Reserved.
운영 체제로부터 약 8KB보다 큰 할당 요청을 처리하기 위해 예약된 페이지 수입니다
.

OS Committed.
예약된 영역에서 커밋된 메모리의 양입니다. 버퍼가 먼저 예약되고 그 다음에 커밋되기 때문에 OS Committed 값이 OS Reserved 값보다 작거나 같아야 합니다. 메모리 중 일부는 더 이상 사용되지 않을 경우 커밋 해제될 수도 있습니다
.

참고 SQL Server 2000에는 버그가 있는데 이로 인해 이 값이 정확하게 유지되지 않아 유효 범위를 벗어날 수 있습니다. 이 버그는 SQL Server 2000 서비스 팩 3에서 해결되었습니다
.

OS In Use.
처리되지 않은 메모리 할당을 현재 백업하는 중인 OS Committed 버퍼 수입니다
.

General.
구문 분석 또는 정규화, 잠금, 트랜잭션 컨텍스트, 테이블 및 인덱스에 대한 메모리 내 메타 데이터를 설명하는 내부 데이터 구조 및 기타를 포함하여 서버의 일반 메모리 소비자가 사용하는 메모리입니다. 이 값은 8KB 버퍼의 전체 수에 해당합니다. 이 중 일부는 버퍼 풀의 빼앗긴 버퍼이고, 또 다른 일부는 MemToLeave에서 할당된 버퍼입니다
.

QueryPlan.
쿼리 계획을 일시적으로 또는 캐시에 저장하는 데 사용되는 메모리입니다. 이 값은 8KB 버퍼의 전체 수에 해당합니다. 이 중 일부는 버퍼 풀의 빼앗긴 버퍼이고, 또 다른 일부는 MemToLeave에서 할당된 버퍼입니다
.

Optimizer.
쿼리 최적화 프로그램에서 사용되는 메모리입니다. 이 값은 8KB 버퍼의 전체 수에 해당합니다. 이 중 일부는 버퍼 풀의 빼앗긴 버퍼이고, 또 다른 일부는 MemToLeave에서 할당된 버퍼입니다
.

Utilities. BCP,
로그 관리자, 병렬 쿼리, ::fn_trace_gettable 등과 같은 여러 가지 유틸리티 루틴에서 사용 중인 메모리입니다. 이 값은 8KB 버퍼의 전체 수에 해당합니다. 이 중 일부는 버퍼 풀의 빼앗긴 버퍼이고, 또 다른 일부는 MemToLeave에서 할당된 버퍼입니다
.

Connection.
각 사용자 연결에 대한 연결 컨텍스트를 보유하고 있는 데이터 구조를 저장하는 데 사용되는 메모리입니다. 또한 여기에는 연결과 관련이 있는 네트워크 보내기 및 받기 버퍼에 대한 메모리도 포함되어 있습니다. 이 값은 8KB 버퍼의 전체 수에 해당합니다. 이 중 일부는 버퍼 풀의 빼앗긴 버퍼이고, 또 다른 일부는 MemToLeave에서 할당된 버퍼입니다.