하이브리드 버퍼 풀

적용 대상: SQL Server 2019(15.x) 이상 버전

하이브리드 버퍼 풀을 사용하면 디스크에서 데이터 페이지 복사본을 페치해야 하고 휘발성 DRAM에 캐시하는 대신, 버퍼 풀 개체가 PMEM(영구 메모리) 디바이스에 있는 데이터베이스 파일의 데이터 페이지를 참조할 수 있습니다. 이 기능은 SQL Server 2019(15.x)에 도입되었으며 SQL Server 2022(16.x)에서 더욱 개선됩니다.

Diagram showing the buffer pool, with and without the hybrid buffer pool enabled.

PMEM(영구 메모리) 디바이스는 바이트 주소를 지정할 수 있으며, DAX(직접 액세스) 영구 메모리 인식 파일 시스템(예: XFS, EXT4 또는 NTFS)을 사용하는 경우 OS의 일반적인 파일 시스템 API를 통해 파일 시스템의 파일에 액세스할 수 있습니다. 또는 SQL Server는 PMEM 디바이스에 있는 파일의 메모리 맵에 대해 로드 및 저장 작업으로 알려진 작업을 수행할 수 있습니다. 이렇게 하면 SQL Server 등의 PMEM 인식 애플리케이션에서 기존의 스토리지 스택을 트래버스하지 않고 디바이스의 파일에 액세스할 수 있습니다.

하이브리드 버퍼 풀은 이 기능을 사용하여 메모리 매핑된 파일에 대해 로드 및 저장 작업을 수행하고, PMEM 디바이스를 버퍼 풀의 캐시와 데이터베이스 파일 저장 위치로 이용합니다. 이 경우 논리적 읽기와 물리적 읽기가 근본적으로 동일한 작업이 되는 독특한 경우가 생성됩니다. 영구 메모리 디바이스는 일반 휘발성 DRAM처럼 메모리 버스를 통해 액세스할 수 있습니다.

기본적으로 클린 데이터 페이지만 하이브리드 버퍼 풀의 PMEM 모듈에 캐시됩니다. 페이지를 수정하고 더티로 표시하려면 PMEM 디바이스에서 DRAM 버퍼 풀로 복사하고, 수정하면 결국 수정된 페이지의 복사본이 DRAM에서 다시 PMEM 모듈에 기록됩니다. 이때 데이터가 다시 클린으로 표시될 수 있습니다. 이 프로세스는 PMEM 모듈이 표준 블록 디바이스인 것처럼 검사점 또는 지연 기록기 등의 일반적인 백그라운드 작업을 사용하여 발생합니다.

하이브리드 버퍼 풀 기능은 Windows와 Linux에서 모두 사용할 수 있습니다. PMEM 디바이스는 DAX(DirectAccess)를 지원하는 파일 시스템을 사용해야 합니다. XFS, EXT4 및 NTFS 파일 시스템은 모두 DAX 확장을 지원하므로 사용자 공간에서 직접 파일 시스템에 액세스할 수 있습니다. SQL Server는 데이터베이스 데이터 파일이 제대로 구성된 PMEM 디스크 디바이스에 있고 데이터베이스 시작 시 또는 데이터베이스가 연결, 복원 또는 생성될 때마다 데이터베이스 파일의 필요한 메모리 매핑을 자동으로 수행하는지 검색합니다.

자세한 내용은 다음을 참조하세요.

하이브리드 버퍼 풀 사용

SQL Server 2019 (15.x)는 하이브리드 버퍼 풀을 제어하기 위한 DDL(동적 데이터 언어)을 도입합니다.

다음 예제에서는 SQL Server의 인스턴스에 대해 하이브리드 버퍼 풀을 사용하도록 설정합니다.

ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED HYBRID_BUFFER_POOL = ON;

기본적으로 하이브리드 버퍼 풀은 인스턴스 범위에서 사용하지 않도록 설정되어 있습니다. 설정 변경 내용을 적용하려면 SQL Server 인스턴스를 다시 시작해야 합니다. 서버의 총 PMEM 용량에 해당하는 충분한 해시 페이지 할당을 용이하게 하기 위해 다시 시작이 필요합니다.

다음 예제에서는 특정 데이터베이스에 대해 하이브리드 버퍼 풀을 사용하도록 설정합니다.

ALTER DATABASE <databaseName> SET MEMORY_OPTIMIZED = ON;

기본적으로 하이브리드 버퍼 풀은 데이터베이스 범위에서 사용하도록 설정되어 있습니다.

하이브리드 버퍼 풀을 사용하지 않도록 설정

다음 예제에서는 인스턴스 수준에서 하이브리드 버퍼 풀을 사용하지 않도록 설정합니다.

ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED HYBRID_BUFFER_POOL = OFF;

기본적으로 하이브리드 버퍼 풀은 인스턴스 수준에서 사용하지 않도록 설정되어 있습니다. 이 변경 내용을 적용하려면 인스턴스를 다시 시작해야 합니다. 다시 시작하면 서버의 PMEM 용량을 고려해야 하므로 버퍼 풀에 충분한 해시 페이지가 할당됩니다.

다음 예제에서는 특정 데이터베이스에 대해 하이브리드 버퍼 풀을 사용하지 않도록 설정합니다.

ALTER DATABASE <databaseName> SET MEMORY_OPTIMIZED = OFF;

기본적으로 하이브리드 버퍼 풀은 데이터베이스 범위에서 활성화되고 서버 범위에서는 비활성화됩니다.

하이브리드 버퍼 풀 구성 보기

작동 시간 값 표시

다음 예제에서는 인스턴스의 현재 하이브리드 버퍼 풀 구성 상태를 반환합니다.

SELECT * FROM
sys.server_memory_optimized_hybrid_buffer_pool_configuration;

다음 예제에서는 데이터베이스와 하이브리드 버퍼 풀의 데이터베이스 수준 설정(is_memory_optimized_enabled)을 나열합니다.

DAX를 사용하지 않고 PMEM 모듈을 탑재하거나 포맷하고 일반 블록 디바이스(즉, 커널을 통해 I/O 수행)로 처리할 수도 있습니다. 이러한 방식으로 구성된 경우 SQL Server에서 바이트 주소 지정 가능 작업을 수행하는 데 PMEM 모듈을 사용할 수 없습니다(즉, 모든 호출은 커널 공간 드라이버를 사용합니다).

SELECT name, is_memory_optimized_enabled FROM sys.databases;

직접 쓰기를 사용하는 하이브리드 버퍼 풀

Direct Write 동작을 사용하는 하이브리드 버퍼 풀은 PMEM 디바이스에 있는 수정된 데이터 또는 인덱스 페이지에서 수행해야 하는 memcpy 명령 수를 줄입니다. 이를 위해 페이지를 DRAM 버퍼 풀 중 하나에 복사하지 않고도 페이지를 수정하는 수단으로 지속성이 뛰어난 지속형 로그 버퍼를 이용합니다. 대신 PMEM 디바이스에 있는 데이터베이스 파일의 페이지는 DRAM 버퍼 풀에서 캐시할 필요 없이 직접 수정되고 나중에 디스크에 비동기적으로 플러시됩니다. 이 동작은 WAL(미리 쓰기 로깅) 의미 체계를 준수하므로 지속형 트랜잭션 로그 버퍼의 (로그) 레코드가 지속형 미디어에 기록되거나 강화되었습니다. 이 방식으로 하이브리드 버퍼 풀과 지속형 로그 버퍼를 사용하는 트랜잭션 워크로드에 대해 상당한 성능 향상이 관찰되었습니다.

직접 쓰기 모드를 사용하려면 데이터베이스에 대해 하이브리드 버퍼 풀 및 지속형 로그 버퍼를 사용하도록 설정하고 시작 추적 플래그 809를 사용하도록 설정합니다.

하이브리드 버퍼 풀 모범 사례

  • Windows에서 PMEM 디바이스를 포맷할 때 NTFS에 가능한 가장 큰 할당 단위 크기(Windows Server 2019 이상에서 2MB)를 사용하고 디바이스에서 DAX(Direct Access)에 적합하게 포맷되었는지 확인합니다.

  • Windows에 대한 Lock Pages in memory 정책 사용

  • 파일 크기가 2MB의 배수여야 합니다(modulo 2MB가 0이어야 함).

  • 하이브리드 버퍼 풀의 서버 범위 설정을 사용하지 않도록 설정한 경우에는 모든 사용자 데이터베이스에서 이 기능이 사용되지 않습니다.

  • 하이브리드 버퍼 풀의 서버 범위 설정을 사용하도록 설정한 경우, 데이터베이스 범위 설정을 사용하여 개별 사용자 데이터베이스에 대해 기능을 해제할 수 있습니다.

  • SQL Server 2019(15.x) CU 3(KB4538118 참조)부터 읽기 캐싱이 기본적으로 사용하도록 설정되었으며, 하이브리드 버퍼 풀에서 가장 핫한 페이지를 추적한 다음 성능을 향상시키기 위해 DRAM 버퍼 풀로 자동으로 승격되는 프로세스입니다.

  • SQL Server 2022(16.x) CU 1을 기준으로 하이브리드 버퍼 풀을 지속형 로그 버퍼와 결합할 때 직접 쓰기가 기본 동작입니다. 이렇게 하면 거의 모든 워크로드의 성능이 향상되지만 항상 회귀 가능성이 있으며 CU를 적용하기 전에 철저히 테스트해야 합니다. 이 동작 변경으로 인해 회귀가 발생하는 경우 시작 추적 플래그 898을 사용하여 이전 동작으로 되돌리기 수 있습니다.

  • SQL Server 2022(16.x) CU 1 부터 추적 플래그 809는 시작 시 SQL Server에서 무시됩니다. 추적 플래그 809 및 추적 플래그 898은 Windows에만 적용되며 Linux의 SQL Server에는 적용되지 않습니다. 추적 플래그는 인증된 Microsoft Server 전문가의 지시에 따라 사용해야 합니다.