다음을 통해 공유


서버 메모리 구성 옵션

SQL Server 인스턴스에서 사용하는 SQL Server 프로세스에 대해 SQL Server 메모리 관리자에서 관리하는 메모리 양(메가바이트)을 다시 구성하려면 두 서버 메모리 옵션( 최소 서버 메모리 및 최대 서버 메모리)을 사용합니다.

최소 서버 메모리의 기본 설정은 0이고 최대 서버 메모리에 대한 기본 설정은 2147483647 MB입니다. 기본적으로 SQL Server는 사용 가능한 시스템 리소스에 따라 메모리 요구 사항을 동적으로 변경할 수 있습니다.

비고

최대 서버 메모리를 최소값으로 설정하면 SQL Server 성능이 심각하게 저하되고 시작되지 못할 수도 있습니다. 이 옵션을 변경한 후 SQL Server를 시작할 수 없는 경우 -f 시작 옵션을 사용하여 시작하고 최대 서버 메모리 를 이전 값으로 다시 설정합니다. 자세한 내용은 데이터베이스 엔진 서비스 시작 옵션을 참조하세요.

SQL Server에서 메모리를 동적으로 사용하는 경우 시스템을 주기적으로 쿼리하여 사용 가능한 메모리 양을 확인합니다. 사용 가능한 메모리를 유지 관리하면 운영 체제(OS)의 페이징을 방지할 수 있습니다. 사용 가능한 메모리가 적으면 SQL Server는 운영 체제에 메모리를 해제합니다. 더 많은 메모리가 사용 가능한 경우 SQL Server는 더 많은 메모리를 할당할 수 있습니다. SQL Server는 워크로드에 더 많은 메모리가 필요한 경우에만 메모리를 추가합니다. 미사용 서버는 가상 주소 공간의 크기를 늘리지 않습니다.

현재 사용된 메모리를 반환하는 쿼리는 예제 B를 참조하세요. 최대 서버 메모리 는 버퍼 풀, 컴파일 메모리, 모든 캐시, qe 메모리 부여, 잠금 관리자 메모리 및 clr 메모리(기본적으로 sys.dm_os_memory_clerks 있는 모든 메모리 클럭)를 포함하여 SQL Server 메모리 할당을 제어합니다. 스레드 스택, 메모리 힙, SQL Server 이외의 연결된 서버 공급자 및 SQL Server DLL이 아닌 메모리에 할당된 메모리는 최대 서버 메모리에 의해 제어되지 않습니다.

SQL Server는 메모리 알림 API QueryMemoryResourceNotification 을 사용하여 SQL Server 메모리 관리자가 메모리를 할당하고 메모리를 해제할 수 있는 시기를 결정합니다.

SQL Server에서 메모리를 동적으로 사용하도록 허용하는 것이 좋습니다. 그러나 메모리 옵션을 수동으로 설정하고 SQL Server에서 액세스할 수 있는 메모리 양을 제한할 수 있습니다. SQL Server에 대한 메모리 양을 설정하기 전에 총 실제 메모리, OS 및 SQL Server의 다른 인스턴스에 필요한 메모리(및 컴퓨터가 SQL Server 전용이 아닌 경우 다른 시스템 사용)를 빼서 적절한 메모리 설정을 결정합니다. 이 차이는 SQL Server에 할당할 수 있는 최대 메모리 양입니다.

수동으로 메모리 옵션 설정

서버 옵션 최소 서버 메모리최대 서버 메모리 는 메모리 값의 범위에 걸쳐 설정할 수 있습니다. 이 방법은 시스템 또는 데이터베이스 관리자가 다른 애플리케이션의 메모리 요구 사항 또는 동일한 호스트에서 실행되는 SQL Server의 다른 인스턴스와 함께 SQL Server 인스턴스를 구성하는 데 유용합니다.

비고

최소 서버 메모리최대 서버 메모리 옵션은 고급 옵션입니다. sp_configure 시스템 저장 프로시저를 사용하여 이러한 설정을 변경하는 경우 고급 옵션이 1로 설정된 경우에만 변경할 수 있습니다. 이러한 설정은 서버를 다시 시작하지 않고 즉시 적용됩니다.

min_server_memory 사용하여 SQL Server 인스턴스의 SQL Server 메모리 관리자에서 사용할 수 있는 최소 메모리 양을 보장합니다. SQL Server는 시작 시 최소 서버 메모리에 지정된 메모리 양을 즉시 할당하지 않습니다. 그러나 클라이언트 로드로 인해 메모리 사용량이 이 값에 도달한 후에는 최소 서버 메모리 값이 줄어들지 않으면 SQL Server에서 메모리를 해제할 수 없습니다. 예를 들어 SQL Server의 여러 인스턴스가 동일한 호스트에 동시에 존재할 수 있는 경우 인스턴스에 대한 메모리를 예약하기 위해 max_server_memory 대신 min_server_memory 매개 변수를 설정합니다. 또한 기본 호스트의 메모리 압력이 허용 가능한 성능에 필요한 것 이상으로 게스트 SQL Server VM(가상 머신)의 버퍼 풀에서 메모리 할당을 취소하지 않도록 하려면 가상화된 환경에서 min_server_memory 값을 설정하는 것이 필수적입니다.

비고

SQL Server는 최소 서버 메모리에 지정된 메모리 양을 할당하도록 보장되지 않습니다. 서버의 부하가 최소 서버 메모리에 지정된 메모리 양을 할당할 필요가 없는 경우 SQL Server는 더 적은 메모리로 실행됩니다.

max_server_memory 사용하여 OS가 메모리에 해로운 압력을 경험하지 않도록 보장합니다. 최대 서버 메모리 구성을 설정하려면 메모리 요구 사항을 확인하기 위해 SQL Server 프로세스의 전체 사용량을 모니터링합니다. 단일 인스턴스에 대해 이러한 계산을 보다 정확하게 수행하려면 다음을 수행합니다.

  • 총 OS 메모리에서 OS 자체에 1GB-4GB를 예약합니다.
  • 그런 다음 스택 크기 1 * 계산된 최대 작업자 스레드 2 + -g 시작 매개 변수 3(또는 -g가 설정되지 않은 경우 기본적으로 256MB)으로 구성된 최대 서버 메모리 컨트롤 외부의 잠재적 SQL Server 메모리 할당에 해당하는 값을 뺍니다. 남은 것은 단일 인스턴스 설정에 대한 max_server_memory 설정이어야 합니다.

1 아키텍처당 스레드 스택 크기에 대한 자세한 내용은 메모리 관리 아키텍처 가이드 를 참조하세요.

2 현재 호스트에서 지정된 수의 선호도 CPU에 대한 계산된 기본 작업자 스레드에 대한 자세한 내용은 최대 작업자 스레드 서버 구성 옵션을 구성하는 방법에 대한 설명서 페이지를 참조하세요.

3-g 시작 매개 변수에 대한 자세한 내용은 데이터베이스 엔진 서비스 시작 옵션의 설명서 페이지를 참조하세요. 32비트 SQL Server(SQL Server 2005~ SQL Server 2014)에만 사용할 수 있습니다.

OS 유형 최대 서버 메모리에 허용되는 최소 메모리 양
32비트 64MB
64비트 128MB

SQL Server Management Studio를 사용하여 메모리 옵션을 구성하는 방법

SQL Server 인스턴스에 대해 SQL Server 메모리 관리자에서 관리하는 메모리 양(MB)을 다시 구성하려면 두 서버 메모리 옵션( 최소 서버 메모리 및 최대 서버 메모리)을 사용합니다. 기본적으로 SQL Server는 사용 가능한 시스템 리소스에 따라 메모리 요구 사항을 동적으로 변경할 수 있습니다.

고정 메모리 양을 구성하는 절차

고정 메모리 양을 설정하려면 다음을 수행합니다.

  1. 개체 탐색기에서 서버를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.

  2. 메모리 노드를 클릭합니다.

  3. 서버 메모리 옵션에서 최소 서버 메모리최대 서버 메모리에 대해 원하는 양을 입력합니다.

    SQL Server가 사용 가능한 시스템 리소스에 따라 메모리 요구 사항을 동적으로 변경할 수 있도록 하려면 기본 설정을 사용합니다. 최소 서버 메모리의 기본 설정은 0이고 최대 서버 메모리의 기본 설정은 2147483647 MB입니다.

네트워크 애플리케이션에 대한 데이터 처리량 최대화

SQL Server에 대한 시스템 메모리 사용을 최적화하려면 시스템에서 파일 캐싱에 사용하는 메모리 양을 제한해야 합니다. 파일 시스템 캐시를 제한하려면 파일 공유에 대한 데이터 처리량 최대화 가 선택되지 않았는지 확인합니다. 사용된 메모리 최소화 또는 분산을 선택하여 가장 작은 파일 시스템 캐시를 지정할 수 있습니다.

운영 체제에서 현재 설정을 확인하려면

  1. 시작을 클릭하고 제어판을 클릭한 다음 네트워크 연결을 두 번 클릭한 다음 로컬 영역 연결을 두 번 클릭합니다.

  2. 일반 탭에서 속성을 클릭하고 Microsoft 네트워크 공유 파일 및 프린터를 선택한 다음 속성을 클릭합니다.

  3. 네트워크 애플리케이션에 대한 데이터 처리량 최대화가 선택된 경우 다른 옵션을 선택하고 확인을 클릭한 다음 나머지 대화 상자를 닫습니다.

메모리의 페이지 잠금

이 Windows 정책은 프로세스를 사용하여 실제 메모리에 데이터를 보관할 수 있는 계정을 결정하여 시스템이 디스크의 가상 메모리에 데이터를 페이징하지 않도록 방지합니다. 메모리에서 페이지를 잠그면 메모리를 디스크에 페이징할 때 서버의 응답성이 유지됩니다. SQL Server의 메모리의 페이지 잠금 옵션은 SQL Server 2014 Standard 이상 버전의 32비트 및 64비트 인스턴스에서 ON으로 설정됩니다. 이는 sqlservr.exe을(를) 실행할 수 있는 권한이 있는 계정에 Windows "메모리 내 잠긴 페이지" 사용자 권한이 부여된 경우에 해당합니다. 이전 버전의 SQL Server에서는 SQL Server의 32비트 인스턴스에 대해 페이지 잠금 옵션을 설정하려면 실행할 권한이 있는 계정에 LPIM 사용자가 sqlservr.exe 있고 'awe_enabled' 구성 옵션이 ON으로 설정되어 있어야 합니다.

SQL Server에 대한 메모리 내 페이지 잠금 옵션을 사용하지 않도록 설정하려면 SQL Server 시작 계정에 대한 "메모리의 잠긴 페이지" 사용자 권한을 제거합니다.

메모리에서 페이지 잠금을 사용하지 않도록 설정하려면

메모리에서 잠금 페이지를 사용하지 않도록 설정하려면 다음을 수행합니다.

  1. 시작 메뉴에서 실행을 클릭합니다. 열기 상자에 gpedit.msc를 입력합니다.

    그룹 정책 대화 상자가 열립니다.

  2. 그룹 정책 콘솔에서 컴퓨터 구성을 확장한 다음 Windows 설정을 확장합니다.

  3. 보안 설정을 확장한 다음 로컬 정책을 확장합니다.

  4. 사용자 권한 할당 폴더를 선택합니다.

    정책은 세부 정보 창에 표시됩니다.

  5. 세부 정보 창에서 메모리의 페이지 잠그기를 두 번 클릭합니다.

  6. 로컬 보안 정책 설정 대화 상자에서 sqlservr.exe 실행할 권한이 있는 계정을 선택하고 제거를 클릭합니다.

가상 메모리 관리자

32비트 운영 체제는 4GB의 가상 주소 공간에 대한 액세스를 제공합니다. 2GB의 가상 메모리는 프로세스당 프라이빗이며 애플리케이션에 사용할 수 있습니다. 2GB는 운영 체제 사용을 위해 예약되어 있습니다. 모든 운영 체제 버전에는 애플리케이션에 최대 3GB의 가상 주소 공간에 액세스할 수 있는 스위치가 포함되어 운영 체제를 1GB로 제한합니다. 스위치 메모리 구성을 사용하는 방법에 대한 자세한 내용은 Windows 설명서에서 4기가바이트 튜닝(4GT)을 참조하세요. 32비트 SQL Server가 64비트 운영 체제에서 실행 중인 경우 사용 가능한 가상 주소 공간은 전체 4GB입니다.

주소 공간의 커밋된 영역은 Windows VMM(Virtual Memory Manager)에 의해 사용 가능한 실제 메모리에 매핑됩니다.

다른 운영 체제에서 지원하는 실제 메모리 양에 대한 자세한 내용은 Windows 설명서 "Windows 릴리스의 메모리 제한"을 참조하세요.

가상 메모리 시스템은 실제 메모리의 과다 약정을 허용하므로 가상-실제 메모리의 비율이 1:1을 초과할 수 있습니다. 따라서 다양한 실제 메모리 구성을 사용하는 컴퓨터에서 더 큰 프로그램을 실행할 수 있습니다. 그러나 모든 프로세스의 결합된 평균 작업 집합보다 훨씬 더 많은 가상 메모리를 사용하면 성능이 저하될 수 있습니다.

최소 서버 메모리최대 서버 메모리 옵션은 고급 옵션입니다. sp_configure 시스템 저장 프로시저를 사용하여 이러한 설정을 변경하는 경우 고급 옵션이 1로 설정된 경우에만 변경할 수 있습니다. 이러한 설정은 서버를 다시 시작하지 않고 즉시 적용됩니다.

SQL Server의 여러 인스턴스 실행

데이터베이스 엔진의 여러 인스턴스를 실행하는 경우 메모리를 관리하는 데 사용할 수 있는 세 가지 방법이 있습니다.

  • 최대 서버 메모리를 사용하여 메모리 사용량을 제어합니다. 각 인스턴스에 대한 최대 설정을 설정하여 총 허용량이 컴퓨터의 총 실제 메모리를 초과하지 않도록 주의합니다. 각 인스턴스 메모리를 예상 워크로드 또는 데이터베이스 크기에 비례하여 제공할 수 있습니다. 이 방법은 새 프로세스 또는 인스턴스가 시작될 때 사용 가능한 메모리를 즉시 사용할 수 있다는 장점이 있습니다. 단점은 모든 인스턴스를 실행하지 않는 경우 실행 중인 인스턴스 중 어느 것도 나머지 사용 가능한 메모리를 활용할 수 없다는 것입니다.

  • 최소 서버 메모리를 사용하여 메모리 사용량을 제어합니다. 각 인스턴스에 대한 최소 설정을 설정하여 이러한 최소값의 합계가 컴퓨터의 총 실제 메모리보다 1-2GB 작도록 합니다. 다시 말하지만, 해당 인스턴스의 예상 부하에 비례하여 이러한 최소값을 설정할 수 있습니다. 이 방법은 모든 인스턴스가 동시에 실행되지 않는 경우 실행 중인 인스턴스가 나머지 사용 가능한 메모리를 사용할 수 있다는 장점이 있습니다. 이 방법은 SQL Server가 적어도 적절한 양의 메모리를 얻을 수 있도록 보장하기 때문에 컴퓨터에 다른 메모리 집약적 프로세스가 있는 경우에도 유용합니다. 단점은 새 인스턴스(또는 다른 프로세스)가 시작될 때 실행 중인 인스턴스가 메모리를 해제하는 데 다소 시간이 걸릴 수 있다는 것입니다. 특히 수정된 페이지를 데이터베이스에 다시 작성해야 하는 경우 그렇습니다.

  • 아무 작업도 수행하지 않습니다(권장하지 않음). 워크로드와 함께 제공되는 첫 번째 인스턴스는 모든 메모리를 할당하는 경향이 있습니다. 유휴 인스턴스 또는 나중에 시작된 인스턴스는 사용 가능한 최소한의 메모리로만 실행될 수 있습니다. SQL Server는 인스턴스 간에 메모리 사용량의 균형을 맞추려고 시도하지 않습니다. 그러나 모든 인스턴스는 Windows 메모리 알림 신호에 응답하여 메모리 공간의 크기를 조정합니다. Windows는 메모리 알림 API를 사용하여 애플리케이션 간에 메모리의 균형을 유지하지 않습니다. 시스템의 메모리 가용성에 대한 글로벌 피드백만 제공합니다.

인스턴스를 다시 시작하지 않고 이러한 설정을 변경할 수 있으므로 사용 패턴에 가장 적합한 설정을 쉽게 찾을 수 있습니다.

SQL Server에 최대 메모리 양 제공

32비트 64비트
기존 메모리 모든 SQL Server 버전에서 가상 주소 공간 제한을 처리할 수 있습니다.

2GB

/3gb 부팅 매개 변수가 있는 3GB*

WOW64의 4GB**
모든 SQL Server 버전에서 가상 주소 공간 제한을 처리할 수 있습니다.

x64 아키텍처의 8TB

* /3gb 는 운영 체제 부팅 매개 변수입니다. 자세한 내용은 MSDN 라이브러리를 참조하세요.

**WOW64(Windows 64의 Windows)는 32비트 SQL Server가 64비트 운영 체제에서 실행되는 모드입니다. 자세한 내용은 MSDN 라이브러리를 참조하세요.

예시

예제 A

다음 예제에서는 옵션을 4GB로 설정합니다 max server memory .

sp_configure 'show advanced options', 1;  
GO  
RECONFIGURE;  
GO  
sp_configure 'max server memory', 4096;  
GO  
RECONFIGURE;  
GO  

예제 B. 현재 메모리 할당 확인

다음 쿼리는 현재 할당된 메모리에 대한 정보를 반환합니다.

SELECT  
(physical_memory_in_use_kb/1024) AS Memory_usedby_Sqlserver_MB,  
(locked_page_allocations_kb/1024) AS Locked_pages_used_Sqlserver_MB,  
(total_virtual_address_space_kb/1024) AS Total_VAS_in_MB,  
process_physical_memory_low,  
process_virtual_memory_low  
FROM sys.dm_os_process_memory;  

또한 참조하십시오

성능 모니터링 및 튜닝
RECONFIGURE(Transact-SQL)
서버 구성 옵션(SQL Server)
sp_configure(Transact-SQL)