버퍼 풀 확장

적용 대상:SQL Server

SQL Server 2014(12.x)에서 도입된 버퍼 풀 확장은 비휘발성 RAM(Random Access Memory)(즉, 반도체 드라이브) 확장을 데이터베이스 엔진 버퍼 풀에 원활하게 통합하여 I/O 처리량을 대폭 개선합니다. 버퍼 풀 확장은 일부 SQL Server 버전에서만 제공됩니다. 자세한 내용은 SQL Server 2016 버전에서 지원되는 기능을 참조하세요.

버퍼 풀 확장의 이점

SQL Server 데이터베이스의 주 목적은 데이터 저장 및 검색이므로 데이터베이스 엔진의 핵심 특성은 집중형 디스크 I/O입니다. 디스크 I/O 작업은 리소스를 많이 소모하고 완료하는 데 상대적으로 시간이 오래 걸릴 수 있으므로, SQL Server에서는 I/O의 효율성을 높이는 데 중점을 둡니다. 버퍼 풀은 SQL Server의 기본 메모리 할당 원본 역할을 합니다. 버퍼 관리는 이러한 효율성을 달성하는 데 있어 핵심적인 구성 요소입니다. 버퍼 관리 구성 요소는 데이터베이스 페이지에 액세스하고 업데이트하는 버퍼 관리자와 데이터베이스 파일 I/O를 줄이기 위한 버퍼 풀의 두 가지 메커니즘으로 구성되어 있습니다.

데이터 및 인덱스 페이지는 디스크에서 버퍼 풀로 읽혀지고, 수정된 페이지(더티 페이지라고도 함)는 디스크에 다시 쓰여집니다. 서버 및 데이터베이스 검사점에서 메모리가 부족하면 버퍼 캐시에 있는 핫(활성) 더티 페이지가 캐시에서 제거되고 기계식 디스크에 쓰여진 다음 다시 캐시에서 읽힙니다. 이러한 I/O 작업은 일반적으로 4~16KB 데이터 단위의 작은 임의 읽기 및 쓰기 작업입니다. 작은 임의 I/O 패턴은 잦은 검색을 유발하기 때문에 기계식 디스크 충돌 경합이 발생하고, I/O 대기 시간이 증가하며, 시스템의 총 I/O 처리량이 감소합니다.

이러한 I/O 병목 상태를 해결하는 일반적인 방법은 DRAM이나 고성능 SAS 스핀들을 추가하는 것입니다. 이러한 방법은 도움이 되지만 중요한 단점이 있습니다. DRAM은 데이터 스토리지 드라이브보다 더 비싸며, 스핀들 추가는 하드웨어 구입 비용을 증가시킵니다. 또한 전력 소비가 많고 구성 요소의 오류 발생 가능성이 높아 운영 비용이 증가합니다.

버퍼 풀 확장 기능은 비휘발성 저장소(일반적으로 SSD)를 사용하여 버퍼 풀 캐시를 확장합니다. 이 확장 덕분에 버퍼 풀은 더 큰 데이터베이스 작업 집합을 수용할 수 있고, 그에 따라 RAM과 SSD 간의 I/O 페이징이 강제로 수행됩니다. 따라서 작은 임의 I/O가 기계식 디스크에서 SSD로 효과적으로 오프로드됩니다. 대기 시간이 짧아지고 SSD의 임의 I/O 성능이 향상되므로 버퍼 풀 확장은 I/O 처리량을 크게 개선합니다.

다음 목록에서는 버퍼 풀 확장 기능의 이점을 설명합니다.

  • 임의 I/O 처리량 증대

  • I/O 대기 시간의 감소

  • 트랜잭션 처리량의 증가

  • 더 큰 하이브리드 버퍼 풀을 사용하여 읽기 성능 개선

  • 현재와 미래의 저비용 메모리 드라이브를 활용할 수 있는 캐싱 아키텍처

개념

다음은 버퍼 풀 확장 기능에 적용되는 용어입니다.

SSD(반도체 드라이브)
반도체 드라이브는 영구적인 방식으로 메모리(RAM)에 데이터를 저장합니다. 자세한 내용은 이 정의를 참조하세요.

Buffer
SQL Server에서 버퍼는 메모리 내의 8KB 페이지입니다. 이 크기는 데이터 또는 인덱스 페이지의 크기와 같습니다. 따라서 버퍼 캐시는 8KB의 페이지로 분할됩니다. 버퍼 관리자가 더 많은 데이터를 읽기 위해 버퍼 영역을 필요로 할 때까지 버퍼 캐시에 페이지가 남아 있습니다. 데이터는 수정되는 경우에만 다시 디스크에 쓰여집니다. 이러한 수정된 인 메모리 페이지를 더티 페이지라고 합니다. 페이지는 디스크의 데이터베이스 이미지와 동일한 경우에 정리됩니다. 버퍼 캐시의 데이터는 디스크에 다시 쓰여지기 전에 여러 번 수정될 수 있습니다.

버퍼 풀
버퍼 캐시라고도 합니다. 버퍼 풀은 캐시된 데이터 페이지를 저장하기 위해 모든 데이터베이스에서 공유하는 전역 리소스입니다. 버퍼 풀 캐시의 최대 크기 및 최소 크기는 시작 시에 결정되거나 sp_configure를 사용하여 SQL Server 인스턴스를 동적으로 다시 구성할 때 결정됩니다. 이 크기는 실행 중인 인스턴스에서 언제든지 버퍼 풀에 캐시할 수 있는 최대 페이지 수를 결정합니다.

버퍼 풀 확장에서 커밋할 수 있는 최대 메모리는 상당한 메모리 압력을 유발하는 경우 컴퓨터에서 실행되는 다른 응용 프로그램에 의해 제한될 수 있습니다.

검사점
검사점은 데이터베이스 엔진이 예기치 않은 종료 또는 충돌 후 복구하는 과정에서 트랜잭션 로그에 포함된 변경 내용의 적용을 시작할 수 있는 알려진 올바른 지점을 만듭니다. 검사점은 메모리 내의 더티 페이지와 트랜잭션 로그 정보를 디스크에 쓰고 트랜잭션 로그에 대한 정보도 기록합니다. 자세한 내용은 데이터베이스 검사점(SQL Server)을 참조하세요.

세부 정보

SSD 스토리지는 디스크 스토리지 하위 시스템이 아니라 메모리 하위 시스템에 대한 확장으로 사용됩니다. 즉, 버퍼 풀 확장 파일을 사용하면 버퍼 풀 관리자가 DRAM 및 NAND 플래시 메모리를 모두 사용하여 SSD를 기반으로 하는 비휘발성 RAM(Random Access Memory)에서 미지근한 페이지의 훨씬 더 큰 버퍼 풀을 유지할 수 있습니다. 따라서 수준 1(L1)이 DRAM, 수준 2(L2)가 SSD의 버퍼 풀 확장 파일인 다단계 캐싱 계층이 만들어집니다. 클린 페이지만 L2 캐시에 쓰여지므로, 데이터 안전을 유지하는 데 도움이 됩니다. 버퍼 관리자는 L1 캐시와 L2 캐시 간의 클린 페이지 이동을 처리합니다.

다음 그림에서는 다른 SQL Server 구성 요소와 비교한 버퍼 풀의 대략적인 아키텍처 개요를 제공합니다.

SSD buffer pool extension Architecture

사용하도록 설정하면, 버퍼 풀 확장은 SSD에서 버퍼 풀 캐싱 파일의 크기와 파일 경로를 지정합니다. 이 파일은 SSD에서 스토리지의 인접한 익스텐트이며 SQL Server 인스턴스를 시작하는 동안 정적으로 구성됩니다. 파일 구성 매개 변수는 버퍼 풀 확장 기능을 사용하지 않도록 설정한 경우에만 변경할 수 있습니다. 버퍼 풀 확장이 사용하지 않도록 설정된 경우 관련된 모든 구성 설정이 레지스트리에서 제거됩니다. 버퍼 풀 확장 파일은 SQL Server 인스턴스를 종료하면 삭제됩니다.

용량 제한 사항

SQL Server Enterprise Edition을 사용하면 최대 버퍼 풀 확장 크기가 max_server_memory 값의 32배까지 늘어날 수 있습니다.

SQL Server Standard Edition을 사용하면 최대 버퍼 풀 확장 크기가 max_server_memory 값의 4배까지 늘어날 수 있습니다.

좋은 연습 방법

이러한 모범 사례를 따르는 것이 좋습니다.

  • 처음으로 버퍼 풀 확장을 사용하도록 설정한 경우 최대 성능 이점을 얻으려면 SQL Server 인스턴스를 다시 시작하는 것이 좋습니다.

  • 실제 메모리(max_server_memory)의 크기와 버퍼 풀 확장의 크기 간 비율이 1:16 이하가 되도록 버퍼 풀 확장을 설정합니다. 1:4에서 1:8 사이의 범위에서 더 낮은 비율이 최적일 수 있습니다. max_server_memory 옵션에 대한 자세한 내용은 서버 메모리 서버 구성 옵션을 참조하세요.

  • 프로덕션 환경에 구현하기 전에 버퍼 풀 확장을 철저히 테스트합니다. 프로덕션 환경에서는 파일의 구성을 변경하거나 기능을 비활성화하지 마세요. 이 기능을 사용하지 않도록 설정하면 버퍼 풀 크기가 크게 줄어들어 이러한 작업이 서버 성능에 부정적인 영향을 미칠 수 있습니다. 사용하지 않도록 설정하면 SQL Server 인스턴스를 다시 시작할 때까지 기능을 지원하는 데 사용된 메모리가 회수되지 않습니다. 하지만 이 기능을 다시 사용하도록 설정하면 인스턴스를 다시 시작하지 않아도 메모리가 다시 사용됩니다.

버퍼 풀 확장에 대한 정보 반환

다음과 같은 동적 관리 뷰를 사용하여 버퍼 풀 확장의 구성을 표시하고 확장에 있는 데이터 페이지에 대한 정보를 반환할 수 있습니다.

성능 카운터는 SQL Server에서 Buffer Manager 개체가 버퍼 풀 확장 파일의 데이터 페이지를 추적하는 데 사용할 수 있습니다. 자세한 내용은 버퍼 풀 확장 성능 카운터를 참조하세요.

다음 XEvents를 사용할 수 있습니다.

XEvent 설명 매개 변수
sqlserver.buffer_pool_extension_pages_written 페이지 또는 페이지 그룹을 버퍼 풀에서 제거하여 버퍼 풀 확장 파일에 쓸 때 발생합니다. number_page

first_page_id

first_page_offset

initiator_numa_node_id
sqlserver.buffer_pool_extension_pages_read 페이지를 버퍼 풀 확장 파일에서 가져와서 버퍼 풀에 쓸 때 발생합니다. number_page

first_page_id

first_page_offset

initiator_numa_node_id
sqlserver.buffer_pool_extension_pages_evicted 페이지를 버퍼 풀 확장 파일에서 제거할 때 발생합니다. number_page

first_page_id

first_page_offset

initiator_numa_node_id
sqlserver.buffer_pool_eviction_thresholds_recalculated 제거 임계값이 계산될 때 발생합니다. warm_threshold

cold_threshold

pages_bypassed_eviction

eviction_bypass_reason

eviction_bypass_reason_description
태스크 설명 항목
버퍼 풀 확장을 사용하도록 설정하고 구성합니다. ALTER SERVER CONFIGURATION(Transact-SQL)
버퍼 풀 확장 구성 수정 ALTER SERVER CONFIGURATION(Transact-SQL)
버퍼 풀 확장 구성 보기 sys.dm_os_buffer_pool_extension_configuration(Transact-SQL)
버퍼 풀 확장 모니터링 sys.dm_os_buffer_descriptors(Transact-SQL)

성능 카운터