적용 대상:SQL Server on Linux
이 글에서는 Linux에서 SQL Server 2019(15.x) 및 이후 버전에서 영속 메모리(PMEM)를 구성하는 방법을 설명합니다.
Overview
SQL Server 2019 (15.x)는 여러 스토리지 집약적 연산을 가속화하기 위해 영구 메모리 지원을 추가합니다.
PMEM 인식 파일 시스템에서는 메모리 매핑(mmap())이 사용자 공간 애플리케이션이 파일 데이터에 직접 접근할 수 있게 합니다. 파일에 대한 메모리 맵이 생성되면, 애플리케이션은 저장 계층을 우회하는 로드/저장 명령을 내릴 수 있습니다.
메모
이 직접 접근은 호스트 확장 애플리케이션 관점에서 깨달음 파일 접근 방법(enlightened file access method)이라고 불리며, 이는 SQL Server가 SQL 플랫폼 추상화 계층(SQLPAL)을 사용하여 호스트 운영체제와 상호작용하는 방식입니다.
이 글에서는 Linux에서 SQL Server on Linux에서 영구 메모리를 구성하는 방법을 설명합니다.
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간의 불일치로 인해 조용히 4 KB로 대체됩니다. - 파일 크기는 2MB의 배수여야 함(모듈로 2MB)
- THP(투명한 대용량 페이지) 해제 안 함(대부분의 배포에 기본적으로 사용하도록 설정되어 있음)
장치를 구성, 생성, 마운트한 후에는 ndctl 데이터베이스 파일을 넣거나 새 데이터베이스를 만들 수 있습니다.
다음 명령어를 사용하면 SQL Server 데이터 파일(.mdf, ).ndf과 tempdb PMEM 장치에 fsdax 파일을 저장할 수 있습니다. 이 모드는 SQL Server 로그(.ldf) 파일을 저장하는 데 사용하지 마세요. 트랜잭션 로그는 섹터 원자 보장을 제공하는 저장소가 필요하기 때문입니다:
ndctl create-namespace -f -e namespace0.0 --mode=fsdax --map=dev
이전 명령에서 map 옵션을 설정하기 전에 다음 사항에 유의하세요.
- 이 장치에 대한 NVDIMM 페이지 항목에 접근하고 업데이트할 때 최상의 성능을 원하면,
-map=mem - NVDIMM 용량이 너무 크면(512GB 이상) 를 설정
-map=dev하여 I/O 처리량에 영향을 주고 성능을 저하시킵니다
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) 안전하므로 강제 플러시 동작을 사용하지 않도록 설정할 수 있습니다.
메모
스토리지 시스템은 시스템에 쓰기가 시스템 충돌, 인터페이스 초기화, 전원 장애 등에도 지속되는 매체 위에 저장되고, 매체 자체가 하드웨어 중복임을 보장함으로써 캐시되거나 단계화된 쓰기가 안전하고 지속 가능하게 유지되도록 할 수 있습니다.
SQL Server 2017 (14.x) CU 6 및 이후 버전에서는 강제 플러시 동작을 사용하기 때문에 데이터베이스(
.mdf및.ndf)와 트랜잭션 로그(.ldf) 파일이 기본적으로writethrough와alternatewritethrough를 사용하지 않습니다. 트레이스 플래그 3979는 데이터베이스 및 트랜잭션 로그 파일에 대한 강제 플러시 동작을 비활성화하고, andalternatewritethrough로직을 사용합니다writethrough.SQL Server가
FILE_FLAG_WRITE_THROUGH로 열리는 다른 파일들, 예를 들어 데이터베이스 스냅샷, 데이터베이스 일관성 검사용 내부 스냅샷(DBCC CHECKDB), 프로파일러 트레이스 파일, 확장 이벤트 트레이스 파일 등은 와alternatewritethrough최적화를 사용합니다writethrough.
SQL Server 2017(14.x) CU 6에 도입된 변경 내용에 대한 자세한 내용은 KB 4131496를 참조하세요. FUA(강제 단위 액세스) 내부에 대한 자세한 내용은 FUA 내부를 참조하세요.
SQL Server 및 FUA(Forced Unit Access) I/O 하위 시스템 기능
지원되는 일부 Linux 배포판은 I/O 하위 시스템 수준에서 FUA(강제 단위 액세스)를 구현하여 데이터 내구성을 보장합니다. SQL Server는 이 기능을 활용하여 Linux 워크로드에 효율적이고 안정적인 I/O 성능을 제공합니다. Linux 배포에서의 FUA 지원 및 SQL Server에 미치는 영향에 대한 자세한 내용은 SQL Server on Linux: FUA(강제 단위 액세스) 내부를 참조하세요.
I/O 하위 시스템의 FUA 지원은 SUSE Linux Enterprise Server 12 SP5, Red Hat Enterprise Linux 8.0 및 Ubuntu 18.04에서 도입되었습니다. SQL Server 2017(14.x) CU 6 이상 버전에서는 다음 구성을 사용하여 SQL Server의 FUA에서 고성능 및 효율적인 I/O를 사용하도록 설정합니다.
다음 조건이 충족되는 경우 이 권장 구성을 사용합니다.
SQL Server 2017 (14.x) CU 6 이상 버전
FUA 기능을 지원하는 Linux 배포 및 버전(Red Hat Enterprise Linux 8.0, SUSE Linux Enterprise Server 12 SP5 또는 Ubuntu 18.04부터 시작)
메모
SQL Server 2025(17.x)부터 SLES(SUSE Linux Enterprise Server)는 지원되지 않습니다.
Linux 커널 4.18 이상 버전의 SQL Server 스토리지용 XFS 파일 시스템입니다.
Linux 커널 5.6 이상 버전의 SQL Server 스토리지용 ext4 파일 시스템입니다.
메모
Linux 커널 버전이 5.6보다 낮은 경우 SQL Server 데이터 및 트랜잭션 로그 파일을 호스팅하는 데 XFS 파일 시스템을 사용합니다. 커널 버전 5.6부터 특정 요구 사항에 따라 XFS 와 ext4 중에서 선택할 수 있습니다.
FUA 기능을 지원하고 구성한 스토리지 하위 시스템 및 하드웨어
권장 구성:
추적 플래그 3979를 시작 매개 변수로 사용하도록 설정합니다.
mssql-conf를 사용하여control.writethrough = 1및control.alternatewritethrough = 0를 구성하십시오.
이전 조건을 충족하지 않는 거의 모든 다른 구성의 경우 다음 권장 구성을 사용합니다.
추적 플래그 3982를 시작 매개 변수(Linux 에코시스템에서 SQL Server의 기본값)로 사용하도록 설정하고 추적 플래그 3979가 시작 매개 변수로 사용하도록 설정되지 않았는지 확인합니다.
mssql-conf를 사용하여control.writethrough = 1및control.alternatewritethrough = 1를 구성하십시오.
Kubernetes에 배포된 SQL Server 컨테이너에 대한 FUA 지원
SQL Server는
overlayfs가 아닌 지속형 탑재 스토리지를 사용해야 합니다.스토리지는 XFS 또는 ext4 파일 시스템을 사용해야 하며 FUA를 지원해야 합니다(ext4 는 버전 5.6 이전의 Linux 커널에서 FUA를 지원하지 않음). 이 설정을 사용하도록 설정하기 전에 Linux 배포 및 스토리지 공급업체와 협력하여 OS 및 스토리지 하위 시스템이 FUA 옵션을 지원하는지 확인합니다. Kubernetes에서 다음 명령을 사용하여 파일 시스템 형식을 쿼리할 수 있습니다. 여기서
<pvc-name>는 다음과PersistentVolumeClaim같습니다.kubectl describe pv <pvc-name>출력에서 XFS로 설정된
fstype를 찾습니다.SQL Server Pod를 호스트하는 작업자 노드는 FUA 기능을 지원하는 Linux 배포 및 버전을 사용해야 합니다(Red Hat Enterprise Linux 8.0, SUSE Linux Enterprise Server 12 SP5 또는 Ubuntu 18.04부터 시작).
위의 조건이 충족되면 다음 권장 FUA 설정을 사용합니다.
추적 플래그 3979를 시작 매개 변수로 사용하도록 설정합니다.
mssql-conf를 사용하여control.writethrough = 1및control.alternatewritethrough = 0를 구성하십시오.