MSSQL 서버는 OS 에서 메모리를 요청하지 않으면 한 번 호출한 메모리를 반환하지 않고 계속 점유한다.
이에 MSSQL 을 사용하다보면 MSSQL 서버가 90% 이상 메모리를 차지하는 경우를 볼 수 있다.
이로 인해 다른 프로세스들이 메모리를 충분히 사용하지 못하여 시스템 성능이 떨어질 수 있으며, 서버에 과부하가 발생하여 문제가 생기기도 한다.
이를 방지하기 위해 MSSQL 에서 최대 서버 메모리 (max server memory) 를 설정하여 메모리를 제한시켜줄 수 있다.
만약, MSSQL 의 메모리 제한을 따로 하지 않았다면 최대 서버 메모리 (max server memory) 는 2,147,483,647(MB) 로 되어있다.
이는 OS 에서 메모리를 요청하지 않으면 메모리를 다 점유하겠다란 말과 비슷하다.
따라서 최대 서버 메모리를 설정하여 메모리를 제한해야한다.
물리적 메모리에 따른 권장 메모리 설정 값이 아래와 같다.
Physical RAM (GB) | Max server memory (MB) |
2 | 1500 |
4 | 3200 |
6 | 4800 |
8 | 6400 |
12 | 10000 |
16 | 13500 |
24 | 21500 |
32 | 29000 |
48 | 44000 |
64 | 60000 |
72 | 68000 |
96 | 92000 |
128 | 124000 |
MSSQL 서버의 min/max server memory 확인
[T-SQL]
1
2
3
|
SELECT value, minimum, maximum
FROM sys.configurations
WHERE name in ('min server memory (MB)','max server memory (MB)')
|
cs |
value 는 설정되어 있는 min server memory/max server memory 의 값이며,
minimum/maximum 은 해당 메모리를 설정할 수 있는 최소값/최대값이다.
* max server memory 은 최소 128 (MB) 이상이여야 한다.
[SSMS]
(1) 개체 탐색기(Object Explorer) 선택 > 서버 선택 (마우스 우클릭) >속성(Properties) 선택
(2) 메모리(Memory) 선택 > 최소/최대 서버 메모리(Minimum/Maximum server memory) 확인
나 역시 최대 서버 메모리를 설정한 적이 없어 기본 값이 2147483647MB 로 지정되어있다.
나의 PC 는 물리적 메모리가 16GB 이므로 13500MB 로 바꾸어줄 예정이다.
Min/Max server memory 설정
[T-SQL]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
--Show advanced options 활성화
EXEC SP_CONFIGURE 'SHOW ADVANCED OPTIONS', 1
--재시작하지 않고 즉시 적용
RECONFIGURE WITH OVERRIDE
GO
--메모리정보 확인
EXEC SP_CONFIGURE
GO
--Min server memory 를 0 (MB) 로 설정
EXEC SP_CONFIGURE 'MIN SERVER MEMORY (MB)', 0
RECONFIGURE WITH OVERRIDE
GO
--Max server memory 를 13500 (MB) 로 설정
EXEC SP_CONFIGURE 'MAX SERVER MEMORY (MB)', 13500
RECONFIGURE WITH OVERRIDE
GO
--Show advanced options 비활성화
EXEC SP_CONFIGURE 'SHOW ADVANCED OPTIONS', 0
RECONFIGURE WITH OVERRIDE
GO
-- 메모리정보 확인
EXEC SP_CONFIGURE
GO
|
cs |
[SSMS]
(1) Maximum server memory (in MB) 13500 으로 변경 > OK 선택
이와 같이 변경을 해주고 기다리면 메모리가 사용에 따라 서서히 반환된다.
필요에 따라 최소 서버 메모리 (Minimum server memory) 를 최대 서버 메모리 (Maximum server memory) 와 동일하게 설정하여 메모리의 가용성 변동을 없앨 수도 있다.
반드시 Min/Max 메모리 값을 설정해주자!