http://blog.naver.com/PostView.nhn?blogId=ioahn&logNo=90117941511
참고 :
http://sqlblogcasts.com/blogs/christian/archive/2008/01/07/sql-server-memtoleave-vas-and-64-bit.aspx
참고 : http://technet.microsoft.com/en-us/library/2007.05.sqlqa.aspx
참고 :
참고 : http://blog.naver.com/PostView.nhn?blogId=webman21&logNo=10050287502
참고 :
참고 : http://laigo.tistory.com/636
참고 :
참고 : http://blogs.msdn.com/b/psssql/archive/2009/08/26/come-on-64bit-so-we-can-leave-the-mem.aspx
--SQL 메모리 사용 공간 체크
/*
메모리 영역의 구성
1. Buffer pool : SQL Server의 기본 데이터 저장소
2. MemToLeave : BPool에서 사용하지 않는 SQL Server의 유저 영역 메모리
3. AWE memory : AWE를 활성화 할 경우 사용할 수 있는 BPool의 확장 및 데이터와 인덱스의 케싱을 위해 사용되는 데이터 공간
MemToLeave
기본적으로 MemToLeave 영역은 384MB의 크기를 갖는다. 이중 128MB는 Worker thread stacks 을 위해 예약 되며
, (max worker threads = 255 * 0.5M) 나머지 256MB 는 BPool 외의 공간을 위해 예약된다.
예를 들어 MemToLeave는 OLE DB Provider (Linked Server를 이용하는 경우)및 in process COM object 및 8Kb 이상의 크기를
갖는 서버 코드 등이 사용하게 됩니다. (켄 핸더슨 2003년)
특히 2005 버전 부터는 CTE나 CLR 등이 해당 메모리를 사용하게 됩니다.
MemToLeave Size 조절 : 시작 옵션에서 –g 옵션을 주고 사이즈를 기입 (Ex –g 1024)
*/
With VASummary(Size,Reserved,Free) AS
(SELECT
Size = VaDump.Size,
Reserved = SUM(CASE(CONVERT(INT, VaDump.Base)^0)
WHEN 0 THEN 0 ELSE 1 END),
Free = SUM(CASE(CONVERT(INT, VaDump.Base)^0)
WHEN 0 THEN 1 ELSE 0 END)
FROM
(
SELECT CONVERT(VARBINARY, SUM(region_size_in_bytes))
AS Size, region_allocation_base_address AS Base
FROM sys.dm_os_virtual_address_dump
WHERE region_allocation_base_address <> 0x0
GROUP BY region_allocation_base_address
UNION
SELECT CONVERT(VARBINARY, region_size_in_bytes), region_allocation_base_address
FROM sys.dm_os_virtual_address_dump
WHERE region_allocation_base_address = 0x0
)
AS VaDump
GROUP BY Size)
SELECT SUM(CONVERT(BIGINT,Size)*Free)/1024 AS [Total avail mem, KB] ,CAST(MAX(Size) AS BIGINT)/1024 AS [Max free size, KB]
FROM VASummary
WHERE Free <> 0
Whats really interesting is comparing the results between 32-bit and 64-bit:
My 32-bit laptop with SQL Server 2005 (32-bit obvously) and 2GB RAM:
Total avail mem, KB
340680
max free size, KB
120016
A 64-bit server with SQL Server 2005 x64 with 8GB RAM:
Total avail mem, KB
8574741364
max free size, KB
6703778112
MemToLeave
Memory To Leave (남겨둘 메모리쯤?)의 약어로 사용되었고, 2000까지 주로 사용되던 용어.
뭘 남겨두냐면,
SQL이 구동하면서 메모리 예약 시, 가용한 메모리를 전부 Buffer Pool로 예약하지 않고, 다른 처리를 위해 256MB(default)를 빼고,
Threads를 관리할 메모리 영역(512KB * Max Thread수)도 빼서 32bit에서 default라면, 256+128= 384MB 만큼 남겨두고 BPool을 예약함.
(thread관리 영역은 32bit에선 0.5M, 64bit에선 2MB로 기억함)
남겨진다 해서 찌꺼기 뉘앙스가 있지만 실제로 하는 역할을 보면 매우 중요해서,
BPool엔 데이터와 인덱스가 할당되고
MemToLeave에는
8KB이상의 데이터와 일부 클라이언트 연결시 패킷 버퍼를 여기에도 할당함.
(client 연결시 패킷 버퍼는, 기본 네트워크 버퍼 크기에 따라서 8KB보다 작으면 BPool에, 이 수치보다 크면 MemToLeave에 3개를 할당함. 입력2, 출력1)
COM관련 저장도 이곳에
Linked Server 관련 저장소도 이곳을 함.
2005이후에는 이런 찌꺼기스러운 이미지를 탈피하려했는지,
Multi Page Allocator란 단어로 사용하는 추세.
Single Page Allocator가 BPool로, Multi Page Allocator를 MemToLeave로 이해하면 큰 무리 없을 듯
----------------------------------------------------------------------------------
WARNING: Failed to reserve contiguous memory of Size= 65536
MemToLeave 의 메모리 량이 부족해서 나타나는 오류 입니다.
시작 옵션에서 -g 를 하고 사이즈를 입력해주시기 바랍니다.
** 참고 자료 입니다.
메모리 영역의 구성
1. Buffer pool : SQL Server의 기본 데이터 저장소
2. MemToLeave : BPool에서 사용하지 않는 SQL Server의 유저 영역 메모리
3. AWE memory : AWE를 활성화 할 경우 사용할 수 있는 BPool의 확장 및 데이터와 인덱스의 케싱을 위해 사용되는 데이터 공간
MemToLeave
기본적으로 MemToLeave 영역은 384MB의 크기를 갖는다. 이중 128MB는 Worker thread stacks 을 위해 예약 되며
, (max worker threads = 255 * 0.5M) 나머지 256MB 는 BPool 외의 공간을 위해 예약된다.
예를 들어 MemToLeave는 OLE DB Provider (Linked Server를 이용하는 경우)및 in process COM object 및 8Kb 이상의 크기를
갖는 서버 코드 등이 사용하게 됩니다. (켄 핸더슨 2003년)
특히 2005 버전 부터는 CTE나 CLR 등이 해당 메모리를 사용하게 됩니다.
MemToLeave Size 조절 : 시작 옵션에서 –g 옵션을 주고 사이즈를 기입 (Ex –g 1024)
*/
With VASummary(Size,Reserved,Free) AS
(SELECT
Size = VaDump.Size,
Reserved = SUM(CASE(CONVERT(INT, VaDump.Base)^0)
WHEN 0 THEN 0 ELSE 1 END),
Free = SUM(CASE(CONVERT(INT, VaDump.Base)^0)
WHEN 0 THEN 1 ELSE 0 END)
FROM
(
SELECT CONVERT(VARBINARY, SUM(region_size_in_bytes))
AS Size, region_allocation_base_address AS Base
FROM sys.dm_os_virtual_address_dump
WHERE region_allocation_base_address <> 0x0
GROUP BY region_allocation_base_address
UNION
SELECT CONVERT(VARBINARY, region_size_in_bytes), region_allocation_base_address
FROM sys.dm_os_virtual_address_dump
WHERE region_allocation_base_address = 0x0
)
AS VaDump
GROUP BY Size)
SELECT SUM(CONVERT(BIGINT,Size)*Free)/1024 AS [총 Memtoleave] ,CAST(MAX(Size) AS BIGINT)/1024 AS [잔여 Memtoleave]
FROM VASummary
--WHERE Free <> 0
[출처] SQL MemToLeave 메모리 체크|작성자 webman21
'Database > MS-SQL' 카테고리의 다른 글
[스크랩] Generate Activation Context, msmdctr90.DLL 액세스 거부 오류 (0) | 2014.07.03 |
---|---|
[스크랩] 이벤트 ID 18056 확인 (0) | 2014.06.26 |
[스크랩] MemToLeave /32bit MS SQL Server (0) | 2014.06.26 |
[스크랩] SQL Server monitoring #1 (0) | 2014.06.26 |
[스크랩] SQL server 메모리 / Working set - prviate / Lock pages in Memory (0) | 2014.06.26 |