출처 : http://support.microsoft.com/?id=271624
영문 : http://support.microsoft.com/?id=907877

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

기술 자료 ID : 271624
마지막 검토 : 2004년 6월 29일 화요일
수정 : 1.0

요약

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에서 할당된 버퍼입니다.

위로 가기

참조

SQL Server Books Online
Delaney, Kalen. Inside Microsoft SQL Server 2000, Microsoft Press, 2000.



Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹 (http://support.microsoft.com/newsgroups/default.aspx)에 참여하시기 바랍니다.

위로 가기


본 문서의 정보는 다음의 제품에 적용됩니다.
Microsoft SQL Server 2000 Standard Edition
Microsoft SQL Server 7.0 Standard Edition

위로 가기

키워드:
kbinfo KB271624

위로 가기

AND