연구개발/DBA
MS-SQL 메모리 컨트럴
HEAD1TON
2010. 7. 2. 16:09
Windows 2000 + MSSQL 2000 으로 구성된 서버에서 2GB 이상의 메모리로 서비스를 하다보면
이따금 넘쳐나는 메모리는 안중에도 없고, 2GB 이내의 메모리만으로 서비스를 하기위해서 버벅거리는 SQL 서버를 보게된다.
즉 실제 시스템 메모리는 8GB를 장착했음에도 불구하고 이놈의 MS-SQL 이란놈은 무식하게 2GB 안에서만 죽어라 하고 버벅거리고 있는것이다.
실제로 본인의 회사에서도 이와같은 상태로 수개월 서비스를 해왔었고, 점차 이를 의심하기 시작해서 여러 문서들을 찾아보기에 이르렀다.
내용인즉 이러하다.
윈도우즈는 기본적으로 2GB 까지는 자동으로 늘렸다 줄였다하면서 메모리를 관리하도록 설정되어있다.
그러나 그 이상의 메모리가 설치된다 할지라도 윈도우즈와 MS-SQL에 이를 명시적으로 지정해주지 않는다면 그 2GB만으로 동작하게 된다는것이다.
다음은 그러한 문제를 해결하기 위한 방법이다.
--시스템별 지원가능 최대메모리 Spec은 다음과 같다.
Version | SQL2000 Ent | SQL2000 Std | SQL2000 Per | SQL2000 Dev
----------------|---------------|---------------|---------------|--------------
Win2000 Data. | 64GB | 2GB | 2GB | 64GB
Win2000 Adv. | 8GB | 2GB | 2GB | 8GB
Win2000 Sever | 4GB | 2GB | 2GB | 4GB
Win2000 Pro. | N.A. | N.A. | 2GB | 2GB
위에 보이듯이 아무리 엄청난 CPU에, 아무리 많은 Memory를 설치하더라도 MSSQL Standard Edition 을 사용할경우는 2GB 까지밖에 사용할수가 없다.
그러니깐 무조건 SQL 버전을 바꾸는것이 바람직하다.
--SQL2000 Server에 2기가 이상의 메모리를 사용하게 하기위해서는 다음의 Option을 추가해야합니다.
--Windows의 boot.ini 에 추가할 옵션
4 GB : 0 (Disabled) /3GB Dynamic (default)
8 GB : 1 (Enabled) /3GB /PAE 6.5 GB
16 GB : 1 (Enabled) /3GB /PAE 14.5 GB
16 GB↑ : 1 (Enabled) /PAE ~
*32 GB : 1 (Enabled) /PAE 29.5 GB
32 GB↑ : 1 (Enabled) /2GB /PAE
-------------------------------------------------
64bit SQL Ignored N/A dynamic
** These recommendations/limitations apply to SQL Server 2000 (32 bit) only.
SQL Server 2000’s (64 bit) native ability to access up to 512 GB of memory make these settings unnecessary on that platform.
다음은 위의 표를 기초로 각기 다른 서버에 셋팅을 하는 과정이다.
아래 파일은 윈도우즈 Root Director에 있는 boot.ini 파일이다.
--example DB1 (8GB, Enable 8GB)
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)WINNT="Microsoft Windows 2000 Advanced Server" /3GB /PAE /fastdetect
--example DB4 (Real Memory : 4GB, Enable 4GB)
[boot loader]
timeout=0
default=multi(0)disk(0)rdisk(0)partition(1)WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)WINNT="Microsoft Windows 2000 Server" /3GB /fastdetect
--/3GB Option의 사용.
Windows 2000 & SQL 2000 조합에서는 기본적으로 2GB 까지 자동으로 사용하게 된다.
하지만 2GB의 메모리를 초과할경우 이를 강제적으로 사용하도록 해야하는데 이때 /3GB 를 셋팅하면 1GB는 시스템에할당하고, 나머지인 3GB 정도를 SQL 에서 사용하게 된다.
만약 /3GB Option을 제거하면 시스템이 2GB를 기본적으로 사용하게 되므로 필요이상의 메모리 낭비를 초래하게 될것이다.
--시스템의 부팅이 끝나면 SQL2000 Server상에서 메모리를 활용하도록 몇가지 명령을 실행해 줘야한다.
1. 'awe enabled' Option 는 advenced option 범주에 속하므로 아래 명령을 실행한다.
(설명문에는 `WITH OVERRIDE` 가 없었지만, 실제로 이 명령을 실행하다보니 with 문이 추가되어야 한다는 메세지가 나온다. 참고.)
sp_configure 'show advanced options', 1
RECONFIGURE (+ WITH OVERRIDE)
GO
2. AWE영역의 메모리를 사용하도록 활성화 한다.
sp_configure 'awe enabled', 1
RECONFIGURE (+ WITH OVERRIDE)
GO
3. 필요에따라서는 AWE의 공간을 강제지정 할수 있다. (하지만 굳이 필요하진 않을듯하다.)
sp_configure 'max server memory', 6144
RECONFIGURE (+ WITH OVERRIDE)
GO
출처: http://www.libertyworld.net
이따금 넘쳐나는 메모리는 안중에도 없고, 2GB 이내의 메모리만으로 서비스를 하기위해서 버벅거리는 SQL 서버를 보게된다.
즉 실제 시스템 메모리는 8GB를 장착했음에도 불구하고 이놈의 MS-SQL 이란놈은 무식하게 2GB 안에서만 죽어라 하고 버벅거리고 있는것이다.
실제로 본인의 회사에서도 이와같은 상태로 수개월 서비스를 해왔었고, 점차 이를 의심하기 시작해서 여러 문서들을 찾아보기에 이르렀다.
내용인즉 이러하다.
윈도우즈는 기본적으로 2GB 까지는 자동으로 늘렸다 줄였다하면서 메모리를 관리하도록 설정되어있다.
그러나 그 이상의 메모리가 설치된다 할지라도 윈도우즈와 MS-SQL에 이를 명시적으로 지정해주지 않는다면 그 2GB만으로 동작하게 된다는것이다.
다음은 그러한 문제를 해결하기 위한 방법이다.
--시스템별 지원가능 최대메모리 Spec은 다음과 같다.
Version | SQL2000 Ent | SQL2000 Std | SQL2000 Per | SQL2000 Dev
----------------|---------------|---------------|---------------|--------------
Win2000 Data. | 64GB | 2GB | 2GB | 64GB
Win2000 Adv. | 8GB | 2GB | 2GB | 8GB
Win2000 Sever | 4GB | 2GB | 2GB | 4GB
Win2000 Pro. | N.A. | N.A. | 2GB | 2GB
위에 보이듯이 아무리 엄청난 CPU에, 아무리 많은 Memory를 설치하더라도 MSSQL Standard Edition 을 사용할경우는 2GB 까지밖에 사용할수가 없다.
그러니깐 무조건 SQL 버전을 바꾸는것이 바람직하다.
--SQL2000 Server에 2기가 이상의 메모리를 사용하게 하기위해서는 다음의 Option을 추가해야합니다.
--Windows의 boot.ini 에 추가할 옵션
4 GB : 0 (Disabled) /3GB Dynamic (default)
8 GB : 1 (Enabled) /3GB /PAE 6.5 GB
16 GB : 1 (Enabled) /3GB /PAE 14.5 GB
16 GB↑ : 1 (Enabled) /PAE ~
*32 GB : 1 (Enabled) /PAE 29.5 GB
32 GB↑ : 1 (Enabled) /2GB /PAE
-------------------------------------------------
64bit SQL Ignored N/A dynamic
** These recommendations/limitations apply to SQL Server 2000 (32 bit) only.
SQL Server 2000’s (64 bit) native ability to access up to 512 GB of memory make these settings unnecessary on that platform.
다음은 위의 표를 기초로 각기 다른 서버에 셋팅을 하는 과정이다.
아래 파일은 윈도우즈 Root Director에 있는 boot.ini 파일이다.
--example DB1 (8GB, Enable 8GB)
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)WINNT="Microsoft Windows 2000 Advanced Server" /3GB /PAE /fastdetect
--example DB4 (Real Memory : 4GB, Enable 4GB)
[boot loader]
timeout=0
default=multi(0)disk(0)rdisk(0)partition(1)WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)WINNT="Microsoft Windows 2000 Server" /3GB /fastdetect
--/3GB Option의 사용.
Windows 2000 & SQL 2000 조합에서는 기본적으로 2GB 까지 자동으로 사용하게 된다.
하지만 2GB의 메모리를 초과할경우 이를 강제적으로 사용하도록 해야하는데 이때 /3GB 를 셋팅하면 1GB는 시스템에할당하고, 나머지인 3GB 정도를 SQL 에서 사용하게 된다.
만약 /3GB Option을 제거하면 시스템이 2GB를 기본적으로 사용하게 되므로 필요이상의 메모리 낭비를 초래하게 될것이다.
--시스템의 부팅이 끝나면 SQL2000 Server상에서 메모리를 활용하도록 몇가지 명령을 실행해 줘야한다.
1. 'awe enabled' Option 는 advenced option 범주에 속하므로 아래 명령을 실행한다.
(설명문에는 `WITH OVERRIDE` 가 없었지만, 실제로 이 명령을 실행하다보니 with 문이 추가되어야 한다는 메세지가 나온다. 참고.)
sp_configure 'show advanced options', 1
RECONFIGURE (+ WITH OVERRIDE)
GO
2. AWE영역의 메모리를 사용하도록 활성화 한다.
sp_configure 'awe enabled', 1
RECONFIGURE (+ WITH OVERRIDE)
GO
3. 필요에따라서는 AWE의 공간을 강제지정 할수 있다. (하지만 굳이 필요하진 않을듯하다.)
sp_configure 'max server memory', 6144
RECONFIGURE (+ WITH OVERRIDE)
GO
출처: http://www.libertyworld.net