마이크로소프트는 SQL Server 2019(Preview) CTP 2.1부터 '하이브리드 버퍼 풀(hybrid buffer pool)'이라는 새로운 기능을 도입했습니다. 이 기능을 활용하면 영구 메모리(PMEM, Persistent Memory) 장치에 저장된 데이터베이스 파일의 데이터 페이지에 직접 액세스할 수 있어, 기존 방식 대비 월등한 I/O 성능을 끌어낼 수 있습니다.
PMEM(영구 메모리)이란?
PMEM은 메모리 버스에 탑재되는 고성능 바이트 주소 지정 가능(byte-addressable) 솔리드 스테이트 메모리 장치입니다. 기존 스토리지 장치와 비교해 다음과 같은 강력한 장점을 갖추고 있습니다.
- 플래시 SSD(Solid State Drive)와 비교해 대용량 데이터 세트도 지연 시간(latency) 없이 거의 실시간으로 액세스할 수 있습니다.
- 플래시 스토리지보다 높은 처리량(throughput)을 제공합니다.
- DRAM(Dynamic Random Access Memory)보다 비용이 저렴합니다.
- CPU 레벨에서 캐싱이 불가능한 PCIe(Peripheral Component Interconnect)와 달리 캐시가 가능합니다.
- 전원 차단이나 시스템 종료 후에도 데이터를 메모리에 그대로 유지합니다.
PMEM은 IoT(사물인터넷) 애플리케이션, 사이버 위협 분석, 금융 거래 시스템처럼 방대한 데이터를 빠른 속도로 처리해야 하는 환경에서 지연 시간을 크게 줄이는 데 다양하게 활용될 수 있습니다.
핵심 개념 정리
하이브리드 버퍼 풀 기능을 이해하는 데 필요한 주요 용어는 다음과 같습니다.
SSD(Solid-State Drive)
데이터를 메모리(RAM)에 영구적인 방식으로 저장하는 장치입니다.
버퍼(Buffer)
SQL Server에서 버퍼는 데이터 또는 인덱스 페이지와 동일한 크기인 8KB 메모리 페이지입니다. 따라서 버퍼 캐시는 8KB 단위의 페이지들로 구성됩니다. 버퍼 관리자가 더 많은 데이터를 읽어 들이기 위해 해당 공간이 필요해질 때까지 페이지는 버퍼 캐시에 머무르며, 수정된 경우에만 디스크에 다시 기록됩니다. 이렇게 메모리 안에서 변경된 페이지를 '더티 페이지(dirty page)', 디스크상의 데이터베이스 이미지와 동일한 페이지를 '클린(clean) 페이지'라고 부릅니다. 버퍼 캐시의 데이터는 디스크에 기록되기 전까지 여러 번 수정될 수 있습니다.
버퍼 풀(Buffer Pool)
버퍼 캐시라고도 하며, 모든 데이터베이스가 캐시된 데이터 페이지를 공유하는 전역 리소스입니다. 버퍼 풀의 최대·최소 크기는 인스턴스 시작 시점 또는 sp_configure를 통한 동적 재구성 시점에 결정되며, 이 값이 곧 버퍼 풀에 캐시할 수 있는 최대 페이지 수를 의미합니다. 참고로 서버에서 실행 중인 다른 애플리케이션이 심각한 메모리 부족을 유발하는 경우, 버퍼 풀 확장이 커밋할 수 있는 최대 메모리는 제한될 수 있습니다.
체크포인트(Checkpoint)
체크포인트는 예기치 않은 종료나 장애 이후 복구 과정에서 데이터베이스 엔진이 트랜잭션 로그의 변경 사항을 적용하기 시작하는 신뢰할 수 있는 기준점(known good point)을 생성합니다. 체크포인트는 더티 페이지와 트랜잭션 로그 정보를 메모리에서 디스크로 기록하고, 관련 로그 정보도 함께 기록합니다.
다이렉트 액세스(DAX)
DAX(Direct Access)는 가장 낮은 지연 시간을 실현하기 위해 메모리처럼 동작합니다. 애플리케이션은 I/O 스택을 우회해 영구 메모리를 직접 수정하며, 이 옵션은 NTFS에서만 사용할 수 있습니다.
아래 이미지는 DAX의 동작 방식을 보여줍니다.

출처: https://docs.microsoft.com/en-us/windows-server/storage/storage-spaces/deploy-pmem
하이브리드 버퍼 풀의 작동 원리
기존 시스템에서 SQL Server는 데이터 페이지를 DRAM 기반 버퍼 풀에 캐시합니다. 반면 하이브리드 버퍼 풀을 사용하면 SQL Server는 페이지를 버퍼 풀의 DRAM 영역으로 복사하는 단계를 건너뛰고, PMEM 장치에 존재하는 데이터베이스 파일에서 해당 페이지를 직접 참조합니다. 이때 시스템은 메모리 맵 I/O(memory mapped I/O) 방식으로 PMEM의 데이터 파일에 액세스하며, 이를 SQL Server 내부에서는 데이터 파일의 '인라이트닝(enlightenment)'이라고도 부릅니다.
이 방식은 페이지를 DRAM으로 복사하는 오버헤드를 없애고, 운영체제의 I/O 스택을 거치지 않고도 영구 스토리지의 페이지에 접근할 수 있기 때문에 뛰어난 성능상 이점을 제공합니다.
단, 시스템이 직접 액세스할 수 있는 것은 클린 페이지뿐입니다. 페이지가 더티 상태가 되면 DRAM 기반 버퍼 풀로 복사된 뒤, 정기적인 체크포인트 작업 중에 PMEM 장치로 다시 기록됩니다.
하이브리드 버퍼 풀은 Windows와 Linux 모두에서 사용할 수 있으며, PMEM 장치는 DAX(DirectAccess)를 지원하는 파일 시스템으로 포맷해야 합니다. DAX가 지원하는 파일 시스템은 다음과 같습니다.
- XFS(Extended File System)
- EXT4
- NTFS(New Technology File System)
SQL Server는 데이터 파일이 적절히 포맷된 PMEM 장치에 위치하는지 자동으로 감지하여 사용자 공간(user space)에서 메모리 매핑을 수행합니다. 매핑은 인스턴스 시작 시, 새 데이터베이스가 연결·복원·생성되는 시점, 그리고 특정 데이터베이스에 대해 하이브리드 버퍼 풀이 활성화되는 시점에 이루어집니다.
하이브리드 버퍼 풀 활성화
SQL Server 2019는 하이브리드 버퍼 풀을 제어할 수 있는 DDL(Data Definition Language) 명령을 제공합니다. 아래 예제는 SQL Server 인스턴스 전체에 대해 하이브리드 버퍼 풀을 활성화합니다.
ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED HYBRID_BUFFER_POOL = ON;기본값은 인스턴스 범위에서 비활성화(OFF) 상태입니다.
참고: 설정 변경을 적용하려면 SQL Server 인스턴스를 재시작해야 합니다. 재시작 과정에서 서버의 전체 PMEM 용량에 맞춘 충분한 해시 페이지가 할당됩니다.
특정 데이터베이스에만 하이브리드 버퍼 풀을 활성화하려면 다음 명령을 사용합니다.
ALTER DATABASE <databaseName> SET MEMORY_OPTIMIZED = ON;기본값은 데이터베이스 범위에서 활성화(ON) 상태입니다.
하이브리드 버퍼 풀 비활성화
인스턴스 전체에서 하이브리드 버퍼 풀을 비활성화하려면 다음 명령을 실행합니다.
ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED HYBRID_BUFFER_POOL = OFF;기본값은 인스턴스 범위에서 비활성화(OFF)입니다.
참고: 설정 변경을 적용하려면 SQL Server 인스턴스를 재시작해야 합니다. 재시작 시 서버의 PMEM 용량을 더 이상 고려할 필요가 없어 해시 페이지의 과도한 할당을 방지할 수 있습니다.
특정 데이터베이스에서만 비활성화하려면 다음 명령을 사용합니다.
ALTER DATABASE <databaseName> SET MEMORY_OPTIMIZED = OFF;기본값은 데이터베이스 범위에서 활성화(ON)입니다.
현재 구성 상태 조회
아래 쿼리는 SQL Server 인스턴스의 하이브리드 버퍼 풀 시스템 구성 상태를 반환합니다.
SELECT * FROM sys.configurations WHERE name = 'hybrid_buffer_pool';두 개의 결과 집합을 한 번에 확인하려면 다음과 같이 실행합니다.
SELECT * FROM sys.configurations WHERE name = 'hybrid_buffer_pool';
SELECT name, is_memory_optimized_enabled FROM sys.databases;- 첫 번째 결과: 인스턴스 수준의 하이브리드 버퍼 풀 시스템 구성 현재 상태
- 두 번째 결과: 데이터베이스 목록과 각 데이터베이스별 하이브리드 버퍼 풀 설정 여부
하이브리드 버퍼 풀 적용 시 모범 사례
- 16GB 미만 RAM 환경에서는 비활성화 권장: RAM이 16GB 미만인 인스턴스에서는 하이브리드 버퍼 풀을 켜지 않는 것이 좋습니다.
- 올바른 포맷 설정: Windows에서 PMEM 장치를 포맷할 때는 NTFS에서 지원하는 가장 큰 할당 단위 크기(Windows Server 2019 기준 2MB)를 사용하고, 장치가 DAX용으로 포맷되었는지 반드시 확인하세요. 파일 크기는 2MB의 배수여야 합니다(2MB로 나눈 나머지가 0).
- 서버 범위 설정이 OFF이면 무효: 서버 범위 설정이 비활성화되어 있으면 어떤 사용자 데이터베이스도 하이브리드 버퍼 풀을 사용할 수 없습니다.
- 데이터베이스별 선택적 제어: 서버 범위 설정이 활성화된 경우, 개별 사용자 데이터베이스에서 데이터베이스 범위 설정을 OFF로 변경해 하이브리드 버퍼 풀 사용을 선택적으로 중단할 수 있습니다.
맺음말
하이브리드 버퍼 풀은 PMEM 장치에 저장된 데이터베이스 데이터 페이지에 직접 액세스할 수 있게 해주는 강력한 기능입니다. 페이지를 DRAM으로 복사할 필요가 없고 운영체제의 I/O 스택도 거치지 않기 때문에, 전반적인 시스템 성능이 크게 향상됩니다. 대용량 데이터를 다루는 워크로드라면 도입을 검토할 만한 가치가 충분합니다.
더 자세한 내용은 아래 문서를 참고하세요.
- Microsoft Describes Latest SQL Server 2019 Preview and Azure SQL Improvements
- Hybrid Buffer Pool
궁금한 점이나 의견이 있다면 피드백 탭을 통해 남겨주세요.
전문가와 함께하는 환경 최적화 서비스
Rackspace의 Application Services(RAS) 전문가는 폭넓은 애플리케이션 포트폴리오 전반에서 다음과 같은 전문·관리형 서비스를 제공합니다.
- e커머스 및 디지털 익스피리언스 플랫폼
- ERP(Enterprise Resource Planning)
- BI(Business Intelligence)
- Salesforce CRM(Customer Relationship Management)
- 데이터베이스
- 이메일 호스팅 및 생산성 솔루션
Rackspace가 제공하는 차별점은 다음과 같습니다.
- 편향 없는 전문 지식: 즉각적인 가치를 창출하는 역량에 집중해 고객의 현대화 여정을 단순화하고 안내합니다.
- Fanatical Experience™: 'Process first. Technology second.®' 철학과 전담 기술 지원을 결합해 종합적인 솔루션을 제공합니다.
- 독보적인 포트폴리오: 폭넓은 클라우드 경험을 바탕으로 올바른 클라우드에 최적의 기술을 선택·배포하도록 지원합니다.
- 민첩한 서비스 제공: 고객의 여정 어느 단계에서든 함께하며, 고객의 성공과 우리의 성공을 하나로 연결합니다.
지금 바로 채팅으로 문의해 시작하세요.