Mengonfigurasi memori persisten (PMEM) untuk SQL Server di Linux

Berlaku untuk:SQL Server di Linux

Artikel ini menjelaskan cara mengonfigurasi memori persisten (PMEM) untuk SQL Server 2019 (15.x) dan versi berikutnya di Linux.

Overview

SQL Server 2019 (15.x) menambahkan dukungan memori persisten untuk mempercepat beberapa operasi yang membutuhkan banyak penyimpanan.

Dengan sistem file yang sadar PMEM, pemetaan memori (mmap()) memberikan aplikasi ruang pengguna akses langsung ke data file. Ketika peta memori dibuat untuk sebuah file, aplikasi dapat mengeluarkan instruksi load/store yang melewati lapisan penyimpanan.

Note

Akses langsung ini disebut metode akses file yang tercerahkan dari perspektif aplikasi ekstensi host, yaitu bagaimana SQL Server berinteraksi dengan sistem operasi host, menggunakan SQL Platform Abstraction Layer (SQLPAL).

Artikel ini menunjukkan cara mengonfigurasi memori persisten untuk SQL Server on Linux.

Membuat namespace untuk perangkat PMEM

Mengonfigurasi perangkat

Di Linux, gunakan ndctl utilitas .

  • Instal ndctl untuk mengonfigurasi perangkat PMEM dari Menginstal NDCTL.
  • Gunakan ndctl untuk membuat namespace. Namespace disusun secara interleaved di seluruh PMEM NVDIMM dan dapat menyediakan berbagai jenis akses ruang pengguna ke area memori pada perangkat. fsdax adalah mode default dan diinginkan untuk SQL Server.
ndctl create-namespace -f -e namespace0.0 --mode=fsdax --map=dev

Mode ini fsdax menyimpan metadata per halaman di memori sistem. Opsi ini --map=dev direkomendasikan karena menyimpan metadata langsung di namespace. Menyimpan metadata di memori adalah --map=mem eksperimental.

Gunakan ndctl untuk memverifikasi namespace.

Sampel output berikut:

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

Membuat dan memasang perangkat PMEM

Misalnya, dengan XFS:

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

Misalnya, dengan ext4:

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

Pertimbangan teknis

  • Blokir alokasi 2 MB untuk XFS atau ext4, seperti yang dijelaskan sebelumnya
  • Ketidakselarasan antara alokasi blok dan mmap menghasilkan fallback secara diam-diam menjadi 4 KB
  • Ukuran file harus kelipatan 2 MB (modulo 2 MB)
  • Jangan nonaktifkan halaman besar transparan (THP) (diaktifkan secara default pada sebagian besar distribusi)

Setelah Anda menggunakannya ndctl untuk mengonfigurasi, membuat, dan memasang perangkat, Anda dapat menempatkan file database di dalamnya atau membuat database baru.

Anda dapat menyimpan file data SQL Server (.mdf, ) dan tempdb file di perangkat PMEM dalam fsdax mode .ndfdengan perintah berikut. Jangan gunakan mode ini untuk menyimpan file log SQL Server (.ldf), karena log transaksi memerlukan penyimpanan yang memberikan jaminan atomik sektor:

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

Sebelum Anda mengatur opsi peta di perintah sebelumnya, ingatlah poin-poin berikut:

  • Untuk performa terbaik saat mengakses dan memperbarui entri halaman NVDIMM untuk perangkat ini, gunakan -map=mem
  • Jika kapasitas NVDIMM terlalu besar (lebih dari 512 GB), set -map=dev, yang memengaruhi throughput I/O dan mengurangi performa

Untuk file log SQL Server pada perangkat PMEM, konfigurasikan perangkat PMEM untuk menggunakan Tabel Terjemahan Sektor/Blok (BTT). Konfigurasi ini menyediakan atomisitas sektor yang dibutuhkan file log SQL Server untuk teknologi penyimpanan ini. Lakukan validasi kinerja beban kerja. Bandingkan performa log SQL Server untuk beban kerja Anda antara solusi ini dan SSD NVMe terbaik, lalu pilih yang paling sesuai dengan kebutuhan Anda.

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

Menonaktifkan perilaku flush paksa

Karena perangkat PMEM aman untuk (I/O langsung), Anda dapat menonaktifkan perilaku pemaksaan flush.

Note

Sistem penyimpanan dapat memastikan bahwa setiap penulisan yang di-cache atau di-stage aman dan tahan lama dengan menjamin bahwa penulisan ke perangkat berada di media yang bertahan selama kerusakan sistem, reset antarmuka, dan kegagalan daya, serta media itu sendiri bersifat redundan perangkat keras.

  • File database (.mdf dan .ndf) dan log transaksi (.ldf) tidak menggunakan writethrough dan alternatewritethrough secara default di SQL Server 2017 (14.x) CU 6 dan versi yang lebih baru, karena menggunakan perilaku flush paksa. Trace flag 3979 menonaktifkan perilaku flush paksa untuk file database dan log transaksi, serta menggunakan writethrough logika and alternatewritethrough .

  • File lain yang dibuka dengan FILE_FLAG_WRITE_THROUGHSQL Server, seperti snapshot database, snapshot internal untuk pemeriksaan konsistensi database (DBCC CHECKDB), file tracer profiler, dan file trace event yang diperluas, menggunakan optimasi dan writethroughalternatewritethrough tersebut.

Untuk informasi selengkapnya tentang perubahan yang diperkenalkan di SQL Server 2017 (14.x) CU 6, lihat KB 4131496. Untuk informasi selengkapnya tentang akses unit paksa (FUA) internal, lihat internal FUA.

Kemampuan subsistem I/O SQL Server dan Forced Unit Access (FUA)

Beberapa distribusi Linux yang didukung menerapkan Forced Unit Access (FUA) di tingkat subsistem I/O untuk memastikan durabilitas data. SQL Server memanfaatkan kemampuan ini untuk memberikan performa I/O yang efisien dan andal untuk beban kerja Linux. Untuk informasi selengkapnya tentang dukungan FUA di seluruh distribusi Linux dan efeknya pada SQL Server, lihat SQL Server di Linux: Internal Forced Unit Access (FUA).

Dukungan untuk FUA di subsistem I/O diperkenalkan di SUSE Linux Enterprise Server 12 SP5, Red Hat Enterprise Linux 8.0, dan Ubuntu 18.04. Di SQL Server 2017 (14.x) CU 6 dan versi yang lebih baru, gunakan konfigurasi berikut untuk mengaktifkan I/O berkinerja tinggi dan efisien dengan FUA di SQL Server.

Gunakan konfigurasi yang direkomendasikan ini jika kondisi berikut terpenuhi:

  • SQL Server 2017 (14.x) CU 6 dan versi yang lebih baru

  • Distribusi dan versi Linux yang mendukung kemampuan FUA (dimulai dengan Red Hat Enterprise Linux 8.0, SUSE Linux Enterprise Server 12 SP5, atau Ubuntu 18.04)

    Note

    Mulai SQL Server 2025 (17.x), SUSE Linux Enterprise Server (SLES) tidak didukung.

  • Sistem file XFS untuk penyimpanan SQL Server, pada kernel Linux 4.18 atau versi yang lebih baru.

  • sistem file ext4 untuk penyimpanan SQL Server, pada kernel Linux 5.6 atau versi yang lebih baru.

    Note

    Gunakan sistem file XFS untuk menghosting data SQL Server dan file log transaksi ketika versi kernel Linux lebih rendah dari 5.6. Dimulai dengan kernel versi 5.6, Anda dapat memilih antara XFS dan ext4 berdasarkan persyaratan spesifik Anda.

  • Subsistem penyimpanan dan perangkat keras yang mendukung dan dikonfigurasi untuk kemampuan FUA

Konfigurasi yang direkomendasikan:

  1. Aktifkan bendera pelacakan 3979 sebagai parameter startup.

  2. Gunakan mssql-conf untuk mengonfigurasi control.writethrough = 1 dan control.alternatewritethrough = 0.

Untuk hampir semua konfigurasi lain yang tidak memenuhi kondisi sebelumnya, gunakan konfigurasi yang direkomendasikan berikut:

  1. Aktifkan bendera pelacakan 3982 sebagai parameter startup (yang merupakan default untuk SQL Server di ekosistem Linux), dan pastikan bahwa bendera pelacakan 3979 tidak diaktifkan sebagai parameter startup.

  2. Gunakan mssql-conf untuk mengonfigurasi control.writethrough = 1 dan control.alternatewritethrough = 1.

Dukungan FUA untuk kontainer SQL Server yang disebarkan di Kubernetes

  1. SQL Server harus menggunakan penyimpanan yang dipasang tetap, dan bukan overlayfs.

  2. Penyimpanan harus menggunakan sistem file XFS atau ext4 dan harus mendukung FUA (ext4 tidak mendukung FUA pada kernel Linux yang lebih lama dari versi 5.6). Sebelum mengaktifkan pengaturan ini, bekerja dengan vendor distribusi dan penyimpanan Linux Anda untuk memastikan bahwa OS dan subsistem penyimpanan mendukung opsi FUA. Pada Kubernetes, Anda dapat mengkueri jenis sistem file menggunakan perintah berikut, di mana <pvc-name> adalah PersistentVolumeClaim:

    kubectl describe pv <pvc-name>
    

    Dalam output, cari fstype yang diatur ke XFS.

  3. Simpul pekerja yang menghosting pod SQL Server harus menggunakan distribusi dan versi Linux yang mendukung kemampuan FUA (dimulai dengan Red Hat Enterprise Linux 8.0, SUSE Linux Enterprise Server 12 SP5, atau Ubuntu 18.04).

Jika kondisi sebelumnya terpenuhi, gunakan pengaturan FUA yang direkomendasikan berikut:

  1. Aktifkan bendera pelacakan 3979 sebagai parameter startup.

  2. Gunakan mssql-conf untuk mengonfigurasi control.writethrough = 1 dan control.alternatewritethrough = 0.