SQL Server on Linux의 PMEM(영구적 메모리) 구성

적용 대상: SQL Server(지원되는 모든 버전) - Linux

이 아티클에서는 SQL Server 2019 (15.x) on Linux에 대해 PMEM(영구 메모리)을 구성하는 방법을 설명합니다.

개요

SQL Server 2019 (15.x)에는 영구 메모리를 사용하는 메모리 내 기능이 많습니다. 이 문서에서는 SQL Server on Linux에 대해 영구 메모리를 구성하는 데 필요한 단계를 설명합니다.

참고

‘인식’이라는 용어는 영구 메모리 인식 파일 시스템의 작업 개념을 전달하기 위해 도입되었습니다. 메모리 매핑(mmap())을 사용하면 간편하게 사용자 공간 애플리케이션에서 파일 시스템에 직접 액세스할 수 있습니다. 파일에 대한 메모리 매핑이 생성된 경우, 애플리케이션에서 I/O 스택을 완전히 무시하고 로드/저장 명령을 실행할 수 있습니다. 호스트 확장 애플리케이션 관점에서 “인식” 파일 액세스 방법으로 간주하며, SQLPAL이 Windows 또는 Linux OS와 상호 작용할 수 있도록 하는 블랙박스 코드입니다.

PMEM 디바이스에 대한 네임스페이스 만들기

디바이스 구성

Linux에서 ndctl 유틸리티를 사용합니다.

  • ndctl을 설치하여 PMEM 디바이스를 구성합니다. 여기에서 찾을 수 있습니다.
  • ndctl을 사용하여 네임스페이스를 만듭니다. 네임스페이스는 PMEM NVDIMM 간에 인터리브되며, 디바이스의 메모리 영역에 대한 여러 유형의 사용자 공간 액세스를 제공할 수 있습니다. fsdax는 SQL Server에 적합한 기본 모드입니다.
ndctl create-namespace -f -e namespace0.0 --mode=fsdax* --map=dev

여기서는 fsdax 모드를 선택했으며 시스템 메모리를 사용하여 페이지별 메타데이터를 저장합니다. --map=dev를 사용하는 것이 좋습니다. 이렇게 하면 메타데이터가 네임스페이스에 직접 저장됩니다. --map=mem을 사용하여 메타데이터를 메모리에 저장하는 기능은 현재 실험적인 것으로 간주됩니다.

ndctl을 사용하여 네임스페이스를 확인합니다.

샘플 출력은 다음과 같습니다.

# ndctl list -N
{
  "dev":"namespace0.0",
  "mode":"fsdax",
  "map":"dev",
  "size":4294967296,
  "sector_size":512,
  "blockdev":"pmem0",
  "numa_node":0
}

PMEM 디바이스 만들기 및 탑재

예: XFS 사용

mkfs.xfs -f /dev/pmem0
mount -o dax,noatime /dev/pmem0 /mnt/dax
xfs_io -c "extsize 2m" /mnt/dax

예: EXT4 사용

mkfs.ext4 -b 4096 -E stride=512 -F /dev/pmem0
mount -o dax,noatime /dev/pmem0 /mnt/dax

기술 고려 사항

  • 위에서 설명한 대로 XFS/EXT4에 2MB 블록 할당
  • 블록 할당과 mmap 간의 불일치로 인해 4KB로 자동 대체
  • 파일 크기는 2MB의 배수여야 함(모듈로 2MB)
  • THP(투명한 대용량 페이지) 해제 안 함(대부분의 배포에 기본적으로 사용하도록 설정되어 있음)

디바이스가 ndctl을 통해 구성되고 생성 및 탑재되고 나면, 디바이스에 데이터베이스 파일을 배치하거나 새 데이터베이스를 만들 수 있습니다.

아래 명령을 사용하여 fsdax 모드로 구성된 경우 PMEM 디바이스에 SQL Server 데이터 파일(MDFS, NDFS) 및 tempdb 파일을 저장할 수 있습니다. 트랜잭션 로그가 섹터 원자성 보장을 제공하는 스토리지에 있어야 하기 때문에 LDFS(SQL Server 로그) 파일을 저장하는 데 이 방법을 사용하면 안 됩니다.

ndctl create-namespace -f -e namespace0.0 --mode=fsdax --map=dev

이전 명령에서 map 옵션을 설정하기 전에 다음 사항에 유의하세요.

  • 이 디바이스에서 이러한 NVDIMM 페이지 항목 액세스 및 업데이트 시 최상의 성능을 위해 -map=mem 을 사용하는 것이 좋습니다.
  • NVDIMM의 용량이 너무 큰 경우(512GB 초과) –map=dev를 설정하면 IO 처리량에 영향을 주고 성능에 방해가 됩니다.

PMEM 디바이스의 SQL Server 로그 파일의 경우 PMEM 디바이스를 프로비전하여 섹터/BTT(블록 변환 테이블)를 사용합니다. 이렇게 하면 이 스토리지 디바이스 기술에 SQL Server 로그 파일에 필요한 섹터 원자성이 제공됩니다. 또한 워크로드 성능 유효성 검사를 수행하고, 이 솔루션과 동급 최고 NVMe SSD의 워크로드 SQL Server 로그 성능을 비교한 다음 요구 사항을 가장 잘 충족하고 더 나은 성능을 제공하는 솔루션을 선택하는 것이 좋습니다.

ndctl create-namespace -f -e namespace0.0 --mode= sector

PMEM 디바이스는 O_DIRECT(직접 I/O)로부터 안전하므로 강제 플러시 메커니즘을 해제하려면 추적 플래그 3979를 사용하도록 설정하는 것이 좋습니다. 자세한 내용은 FUA 지원을 참조하세요. 강제 단위 액세스 내부 요소는 FUA 내부 요소에서 설명합니다.

다음 단계

SQL Server on Linux에 대한 자세한 내용은 SQL Server on Linux를 참조하세요. SQL Server on Linux의 성능 모범 사례는 성능 모범 사례를 참조하세요.