버퍼 풀 확장Buffer Pool Extension

SQL Server 2014SQL Server 2014에서 도입된 버퍼 풀 확장은 I/O 처리량을 크게 향상하기 위해 비휘발성 RAM(즉, 반도체 드라이브) 확장을 데이터베이스 엔진Database Engine 버퍼 풀에 원활하게 통합할 수 있는 기능을 제공합니다.Introduced in SQL Server 2014SQL Server 2014, the buffer pool extension provides the seamless integration of a nonvolatile random access memory (that is, solid-state drive) extension to the 데이터베이스 엔진Database Engine buffer pool to significantly improve I/O throughput. 버퍼 풀 확장은 일부 SQL ServerSQL Server 버전에서만 제공됩니다.The buffer pool extension is not available in every SQL ServerSQL Server edition. 자세한 내용은 SQL Server 2016 버전에서 지원하는 기능을 참조하세요.For more information, see Features Supported by the Editions of SQL Server 2016.

버퍼 풀 확장의 이점Benefits of the Buffer Pool Extension

SQL ServerSQL Server 데이터베이스의 주 목적은 데이터 저장 및 검색이므로 데이터베이스 엔진의 핵심 특성은 집중형 디스크 I/O입니다.The primary purpose of a SQL ServerSQL Server database is to store and retrieve data, so intensive disk I/O is a core characteristic of the Database Engine. 디스크 I/O 작업은 많은 리소스를 소비하며 완료하는 데 비교적 오랜 시간이 걸리므로 SQL ServerSQL Server 에서는 I/O의 효율성을 높이는 데 주안점을 둡니다.Because disk I/O operations can consume many resources and take a relatively long time to finish, SQL ServerSQL Server focuses on making I/O highly efficient. 버퍼 풀은 SQL ServerSQL Server의 주 메모리 할당 원본으로 사용됩니다.The buffer pool serves as a primary memory allocation source of SQL ServerSQL Server. 버퍼 관리는 이러한 효율성을 얻기 위한 핵심 구성 요소입니다.Buffer management is a key component in achieving this efficiency. 버퍼 관리 구성 요소는 데이터베이스 페이지에 액세스하고 업데이트하기 위한 버퍼 관리자와 데이터베이스 파일 I/O를 줄이기 위한 버퍼 풀의 두 가지 메커니즘으로 구성되어 있습니다.The buffer management component consists of two mechanisms: the buffer manager to access and update database pages, and the buffer pool), to reduce database file I/O.

데이터 및 인덱스 페이지는 디스크에서 버퍼 풀로 읽히고 수정된 페이지(더티 페이지라고도 함)는 디스크에 다시 쓰여집니다.Data and index pages are read from disk into the buffer pool and modified pages (also known as dirty pages) are written back to disk. 서버 및 데이터베이스 검사점에서 메모리가 부족하면 버퍼 캐시에 있는 핫(활성) 더티 페이지가 캐시에서 제거되고 기계식 디스크에 쓰여진 다음 다시 캐시에서 읽힙니다.Memory pressure on the server and database checkpoints cause hot (active) dirty pages in the buffer cache to be evicted from the cache and written to mechanical disks and then read back into the cache. 일반적으로 이러한 I/O 작업은 4KB 데이터에서 16KB 데이터 정도의 작은 임의 읽기 및 쓰기입니다.These I/O operations are typically small random reads and writes on the order of 4 to 16 KB of data. 작은 임의 I/O 패턴은 잦은 검색을 유발하기 때문에 기계식 디스크 충돌 경합이 발생하고, I/O 대기 시간이 증가하며, 시스템의 총 I/O 처리량이 감소합니다.Small random I/O patterns incur frequent seeks, competing for the mechanical disk arm, increasing I/O latency, and reducing aggregate I/O throughput of the system.

이러한 I/O 병목 상태를 해결하는 일반적인 방법은 DRAM이나 고성능 SAS 스핀들을 추가하는 것입니다.The typical approach to resolving these I/O bottlenecks is to add more DRAM, or alternatively, added high-performance SAS spindles. 이러한 방법은 도움이 되지만 중요한 단점이 있습니다. DRAM은 데이터 저장소 드라이브보다 더 비싸며, 스핀들 추가는 하드웨어 구입 비용을 증가시킵니다. 또한 전력 소비가 많고 구성 요소의 오류 발생 가능성이 높아 운영 비용이 증가합니다.While these options are helpful, they have significant drawbacks: DRAM is more expensive than data storage drives and adding spindles increases capital expenditure in hardware acquisition and increases operational costs by increased power consumption and increased probability of component failure.

버퍼 풀 확장 기능은 비휘발성 저장소(일반적으로 SSD)로 버퍼 풀 캐시를 확장합니다.The buffer pool extension feature extends the buffer pool cache with nonvolatile storage (usually SSD). 이 확장 덕분에 버퍼 풀은 더 큰 데이터베이스 작업 집합을 수용할 수 있고, 그에 따라 RAM과 SSD 간의 I/O 페이징이 강제로 수행됩니다.Because of this extension, the buffer pool can accommodate a larger database working set, which forces the paging of I/Os between RAM and the SSDs. 따라서 작은 임의 I/O가 기계식 디스크에서 SSD로 효과적으로 오프로드됩니다.This effectively offloads small random I/Os from mechanical disks to SSDs. SSD의 더 낮은 대기 시간과 향상된 임의 I/O 성능 덕분에 버퍼 풀 확장은 I/O 처리량을 크게 향상합니다.Because of the lower latency and better random I/O performance of SSDs, the buffer pool extension significantly improves I/O throughput.

다음 목록에서는 버퍼 풀 확장 기능의 이점에 대해 설명합니다.The following list describes the benefits of the buffer pool extension feature.

  • 임의 I/O 처리량의 증가Increased random I/O throughput

  • I/O 대기 시간의 감소Reduced I/O latency

  • 트랜잭션 처리량의 증가Increased transaction throughput

  • 더 큰 하이브리드 버퍼 풀로 읽기 성능 향상Improved read performance with a larger hybrid buffer pool

  • 현재와 미래의 저렴한 메모리 드라이브를 사용할 수 있는 캐싱 아키텍처A caching architecture that can take advantage of present and future low-cost memory drives

개념Concepts

다음은 버퍼 풀 확장 기능에 적용되는 용어입니다.The following terms are applicable to the buffer pool extension feature.

SSD(반도체 드라이브)Solid-state drive (SSD)
반도체 드라이브는 영구적인 방식으로 메모리(RAM)에 데이터를 저장합니다.Solid-state drives store data in memory (RAM) in a persistent manner. 자세한 내용은 이 정의를 참조하십시오.For more information, see this definition.

버퍼Buffer
SQL ServerSQL Server에서 버퍼는 메모리 내의 8KB 페이지입니다. 이 크기는 데이터 또는 인덱스 페이지의 크기와 같습니다.In SQL ServerSQL Server, A buffer is an 8-KB page in memory, the same size as a data or index page. 따라서 버퍼 캐시는 8KB 페이지로 나누어집니다.Thus, the buffer cache is divided into 8-KB pages. 페이지는 버퍼 관리자에 더 많은 데이터를 읽어 올 버퍼 영역이 필요할 때까지 버퍼 캐시에 남아 있습니다.A page remains in the buffer cache until the buffer manager needs the buffer area to read in more data. 데이터는 수정되는 경우에만 다시 디스크에 쓰여집니다.Data is written back to disk only if it is modified. 이러한 메모리 내의 수정된 페이지를 더티 페이지라고 합니다.These in-memory modified pages are known as dirty pages. 디스크에 있는 해당 데이터베이스 이미지와 동일한 페이지를 클린 페이지라고 합니다.A page is clean when it is equivalent to its database image on disk. 버퍼 캐시의 데이터는 여러 번 수정한 후 디스크에 다시 쓸 수 있습니다.Data in the buffer cache can be modified multiple times before being written back to disk.

버퍼 풀Buffer pool
버퍼 캐시라고도 합니다.Also called buffer cache. 버퍼 풀은 캐시된 데이터 페이지를 저장하기 위해 모든 데이터베이스에서 공유하는 전역 리소스입니다.The buffer pool is a global resource shared by all databases for their cached data pages. 버퍼 풀 캐시의 최대 및 최소 크기는 시작하는 동안 결정되거나 SQL Server 인스턴스가 sp_configure를 사용하여 동적으로 다시 구성될 때 결정됩니다.The maximum and minimum size of the buffer pool cache is determined during startup or when the instance of SQL server is dynamically reconfigured by using sp_configure. 이 크기에 따라 실행 중인 인스턴스에서 언제든지 버퍼 풀에 캐시할 수 있는 최대 페이지 수가 결정됩니다.This size determines the maximum number of pages that can be cached in the buffer pool at any time in the running instance.

버퍼 풀 확장에서 커밋할 수 있는 최대 메모리는 메모리가 상당한 압박을 만드는 경우에 컴퓨터에서 실행 중인 다른 응용 프로그램에 의해 제한될 수 있습니다.The maximum memory that can be comitted by Buffer Pool Extension can be limited by the other applications running on the machine in case those create significant memory pressure.

검사점Checkpoint
검사점은 데이터베이스 엔진Database Engine 이 예기치 않은 종료 또는 충돌 후 복구하는 과정에서 트랜잭션 로그에 포함된 변경 내용의 적용을 시작할 수 있는 알려진 올바른 지점을 만듭니다.A checkpoint creates a known good point from which the 데이터베이스 엔진Database Engine can start applying changes contained in the transaction log during recovery after an unexpected shutdown or crash. 검사점은 메모리 내의 더티 페이지와 트랜잭션 로그 정보를 디스크에 쓰고 트랜잭션 로그에 대한 정보도 기록합니다.A checkpoint writes the dirty pages and transaction log information from memory to disk and, also, records information about the transaction log. 자세한 내용은 데이터베이스 검사점(SQL Server)을 참조하세요.For more information, see Database Checkpoints (SQL Server).

버퍼 풀 확장 세부 정보Buffer Pool Extension Details

SSD 저장소는 디스크 저장소 하위 시스템보다는 메모리 하위 시스템에 대한 확장으로 사용됩니다.SSD storage is used as an extension to the memory subsystem rather than the disk storage subsystem. 즉, 버퍼 풀 확장 파일을 통해 버퍼 풀 관리자는 DRAM 및 NAND 플래시 메모리를 둘 다 사용하여 SSD에서 지원하는 비휘발성 RAM에서 비활성화된 페이지에 대해 훨씬 더 큰 버퍼 풀을 유지 관리할 수 있습니다.That is, the buffer pool extension file allows the buffer pool manager to use both DRAM and NAND-Flash memory to maintain a much larger buffer pool of lukewarm pages in nonvolatile random access memory backed by SSDs. 그러면 SSD에서 L1(수준 1)이 DRAM이고 L2(수준)가 버퍼 풀 확장 파일인 여러 수준 캐싱 계층이 만들어집니다.This creates a multilevel caching hierarchy with level 1 (L1) as the DRAM and level 2 (L2) as the buffer pool extension file on the SSD. L2 캐시에는 클린 페이지만 기록되므로 데이터 안전을 유지할 수 있습니다.Only clean pages are written to the L2 cache, which helps maintain data safety. 버퍼 관리자는 L1 캐시와 L2 캐시 간의 클린 페이지 이동을 처리합니다.The buffer manager handles the movement of clean pages between the L1 and L2 caches.

다음 그림에서는 다른 SQL ServerSQL Server 구성 요소를 기준으로 버퍼 풀에 대한 대략적인 아키텍처 개요를 보여 줍니다.The following illustration provides a high-level architectural overview of the buffer pool relative to other SQL ServerSQL Server components.

SSD 버퍼 풀 확장 아키텍처SSD Buffer Pool Extension Architecture

사용하도록 설정된 경우 버퍼 풀 확장은 SSD에 있는 버퍼 풀 캐싱 파일의 크기와 파일 경로를 지정합니다.When enabled, the buffer pool extension specifies the size and file path of the buffer pool caching file on the SSD. 이 파일은 SSD에 있는 저장소의 인접 익스텐트이며 SQL ServerSQL Server인스턴스를 시작하는 동안 정적으로 구성됩니다.This file is a contiguous extent of storage on the SSD and is statically configured during startup of the instance of SQL ServerSQL Server. 파일 구성 매개 변수의 변경은 버퍼 풀 확장 기능이 사용하지 않도록 설정된 경우에만 수행할 수 있습니다.Alterations to the file configuration parameters can only be done when the buffer pool extension feature is disabled. 버퍼 풀 확장이 사용하지 않도록 설정된 경우 관련된 모든 구성 설정이 레지스트리에서 제거됩니다.When the buffer pool extension is disabled, all related configuration settings are removed from the registry. 버퍼 풀 확장 파일은 SQL Server 인스턴스를 종료하면 즉시 삭제됩니다.The buffer pool extension file is deleted upon shutdown of the instance of SQL Server.

최선의 구현 방법Best Practices

다음과 같은 최선의 구현 방법을 따르십시오.We recommend that you follow these best practices.

  • 처음으로 버퍼 풀 확장을 사용하도록 설정한 경우 최대 성능 이점을 얻으려면 SQL Server 인스턴스를 다시 시작하는 것이 좋습니다.After enabling Buffer Pool Extension for the first time it is recommended to restart the SQL Server instance to get the maximum performance benefits.

  • 버퍼 풀 확장 크기는 max_server_memory 값의 최대 32배일 수 있습니다.The buffer pool extension size can be up to 32 times the value of max_server_memory. 실제 메모리(max_server_memory) 크기와 버퍼 풀 확장 크기의 비율을 1:16 이하로 유지하는 것이 좋습니다.We recommend a ratio between the size of the physical memory (max_server_memory) and the size of the buffer pool extension of 1:16 or less. 1:4에서 1:8 사이의 범위에서 더 낮은 비율이 최적일 수 있습니다.A lower ratio in the range of 1:4 to 1:8 may be optimal. max_server_memory 옵션을 설정하는 방법은 서버 메모리 서버 구성 옵션을 참조하세요.For information about setting the max_server_memory option, see Server Memory Server Configuration Options.

  • 프로덕션 환경에서 구현하기 전에 버퍼 풀 확장을 철저히 테스트합니다.Test the buffer pool extension thoroughly before implementing in a production environment. 프로덕션 환경에서는 파일 구성을 변경하거나 기능을 사용하지 않도록 설정하지 마십시오.Once in production, avoid making configuration changes to the file or turning the feature off. 기능을 사용하지 않도록 설정하면 버퍼 풀 크기가 크게 감소하기 때문에 이러한 활동은 서버 성능에 부정적인 영향을 미칠 수 있습니다.These activities may have a negative impact on server performance because the buffer pool is significantly reduced in size when the feature is disabled. 사용하지 않도록 설정하면 SQL Server 인스턴스를 다시 시작할 때까지 기능을 지원하는 데 사용된 메모리가 회수되지 않습니다.When disabled, the memory used to support the feature is not reclaimed until the instance of SQL Server is restarted. 하지만 기능을 다시 사용하도록 설정하면 인스턴스를 다시 시작하지 않고도 메모리가 다시 사용됩니다.However, if the feature is re-enabled, the memory will be reused without restarting the instance.

버퍼 풀 확장에 대한 정보 반환Return Information about the Buffer Pool Extension

다음과 같은 동적 관리 뷰를 사용하여 버퍼 풀 확장의 구성을 표시하고 확장에 있는 데이터 페이지에 대한 정보를 반환할 수 있습니다.You can use the following dynamic management views to display the configuration of the buffer pool extension and return information about the data pages in the extension.

XEventXEvent 설명Description 매개 변수Parameters
sqlserver.buffer_pool_extension_pages_writtensqlserver.buffer_pool_extension_pages_written 페이지 또는 페이지 그룹을 버퍼 풀에서 제거하여 버퍼 풀 확장 파일에 쓸 때 발생합니다.Fires when a page or group of pages are evicted from the buffer pool and written to the buffer pool extension file. number_pagenumber_page

first_page_idfirst_page_id

first_page_offsetfirst_page_offset

initiator_numa_node_idinitiator_numa_node_id
sqlserver.buffer_pool_extension_pages_readsqlserver.buffer_pool_extension_pages_read 페이지를 버퍼 풀 확장 파일에서 가져와서 버퍼 풀에 쓸 때 발생합니다.Fires when a page is read from the buffer pool extension file to the buffer pool. number_pagenumber_page

first_page_idfirst_page_id

first_page_offsetfirst_page_offset

initiator_numa_node_idinitiator_numa_node_id
sqlserver.buffer_pool_extension_pages_evictedsqlserver.buffer_pool_extension_pages_evicted 페이지를 버퍼 풀 확장 파일에서 제거할 때 발생합니다.Fires when a page is evicted from the buffer pool extension file. number_pagenumber_page

first_page_idfirst_page_id

first_page_offsetfirst_page_offset

initiator_numa_node_idinitiator_numa_node_id
sqlserver.buffer_pool_eviction_thresholds_recalculatedsqlserver.buffer_pool_eviction_thresholds_recalculated 제거 임계값을 계산할 때 발생합니다.Fires when the eviction threshold is calculated. warm_thresholdwarm_threshold

cold_thresholdcold_threshold

pages_bypassed_evictionpages_bypassed_eviction

eviction_bypass_reasoneviction_bypass_reason

eviction_bypass_reason_descriptioneviction_bypass_reason_description
태스크 설명Task Description 항목Topic
버퍼 풀 확장을 사용하도록 설정하고 구성합니다.Enable and configure the buffer pool extension. ALTER SERVER CONFIGURATION(Transact-SQL)ALTER SERVER CONFIGURATION (Transact-SQL)
버퍼 풀 확장 구성을 수정합니다.Modify the buffer pool extension configuration ALTER SERVER CONFIGURATION(Transact-SQL)ALTER SERVER CONFIGURATION (Transact-SQL)
버퍼 풀 확장 구성을 봅니다.View the buffer pool extension configuration sys.dm_os_buffer_pool_extension_configuration(Transact-SQL)sys.dm_os_buffer_pool_extension_configuration (Transact-SQL)
버퍼 풀 확장을 모니터링합니다.Monitor the buffer pool extension sys.dm_os_buffer_descriptors(Transact-SQL)sys.dm_os_buffer_descriptors (Transact-SQL)

성능 카운터Performance counters