Mengonfigurasi memori persisten (PMEM) untuk SQL Server di Linux

Berlaku untuk:SQL Server - Linux

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

Gambaran Umum

SQL Server 2019 (15.x) memperkenalkan banyak fitur dalam memori yang menggunakan memori persisten. Artikel ini membahas langkah-langkah yang diperlukan untuk mengonfigurasi memori persisten untuk SQL Server di Linux.

Catatan

Istilah pencerahan diperkenalkan untuk menyampaikan konsep bekerja dengan sistem file sadar memori persisten. Akses langsung ke sistem file dari aplikasi ruang pengguna difasilitasi menggunakan pemetaan memori (mmap()). Ketika pemetaan memori untuk file dibuat, aplikasi dapat mengeluarkan instruksi beban/penyimpanan yang melewati tumpukan I/O sepenuhnya. Ini dianggap sebagai metode akses file "tercerahkan" dari perspektif aplikasi ekstensi host (yang merupakan kode yang memungkinkan SQLPAL berinteraksi dengan OS Windows atau Linux).

Membuat namespace layanan untuk perangkat PMEM

Mengonfigurasi perangkat

Di Linux, gunakan ndctl utilitas .

  • Instal ndctl untuk mengonfigurasi perangkat PMEM. Anda dapat menemukannya di sini.
  • Gunakan ndctl untuk membuat namespace. Namespace layanan diselingi di seluruh NVDIMM PMEM dan dapat menyediakan berbagai jenis akses ruang pengguna ke wilayah memori pada perangkat. fsdax adalah mode default dan diinginkan untuk SQL Server.
ndctl create-namespace -f -e namespace0.0 --mode=fsdax --map=dev

Kami telah memilih fsdax mode dan menggunakan memori sistem untuk menyimpan metadata per halaman. Sebaiknya gunakan --map=dev. Opsi ini menyimpan data meta pada namespace secara langsung. Menyimpan data meta dalam memori menggunakan --map=mem bersifat eksperimental saat ini.

Gunakan ndctl untuk memverifikasi namespace layanan.

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/EXT4, seperti yang dijelaskan sebelumnya
  • Ketidakselarasan antara alokasi blok dan mmap menghasilkan fallback senyap 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 perangkat dikonfigurasi dengan ndctl, dibuat, dan dipasang, Anda dapat menempatkan file database di dalamnya atau membuat database baru.

Anda dapat menyimpan file data SQL Server (MDFS, NDFS) dan tempdb file pada perangkat PMEM saat dikonfigurasi dengan mode fsdax menggunakan perintah berikut. Jangan gunakan ini untuk menyimpan file log SQL Server (LDFS), karena log transaksi harus berada di penyimpanan yang memberikan jaminan atom 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 dalam mengakses dan memperbarui entri halaman NVDIMM ini untuk perangkat ini, lebih disukai untuk digunakan -map=mem
  • Jika kapasitas NVDIMM terlalu besar (lebih besar dari 512 GB), atur –map=dev, yang akan memengaruhi throughput IO dan menata performa

Untuk file log SQL Server pada perangkat PMEM, con perangkat PMEM untuk menggunakan sektor/Blokir Tabel Terjemahan (BTT). Ini memberikan atomitas sektor yang diperlukan untuk file log SQL Server untuk teknologi perangkat penyimpanan ini. Kami juga menyarankan Agar Anda melakukan validasi performa beban kerja. Anda dapat membandingkan performa log SQL Server untuk beban kerja Anda antara solusi ini dan SSD NVMe terbaik di kelasnya, lalu memilih solusi yang paling sesuai dengan kebutuhan Anda dan memberikan performa yang lebih baik.

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

Menonaktifkan perilaku flush paksa

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

Catatan

Sistem penyimpanan dapat memastikan bahwa setiap penulisan yang di-cache atau ditahapkan dianggap aman dan tahan lama, dengan menjamin bahwa tulisan yang dikeluarkan untuk perangkat disimpan pada media yang akan bertahan di seluruh crash sistem, pengaturan ulang antarmuka dan kegagalan daya, dan media itu sendiri adalah 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. Lacak Bendera 3979 menonaktifkan penggunaan perilaku flush paksa untuk file log database dan transaksi, dan menggunakan writethrough logika dan alternatewritethrough .

  • File lain yang dibuka dengan menggunakan FILE_FLAG_WRITE_THROUGH di SQL Server, seperti rekam jepret database, rekam jepret internal untuk pemeriksaan konsistensi database (DBCC CHECKDB), file pelacakan profiler, dan file pelacakan peristiwa yang diperluas, menggunakan writethrough pengoptimalan dan alternatewritethrough .

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

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

Versi tertentu dari distribusi Linux yang didukung memberikan dukungan untuk kemampuan subsistem FUA I/O, yang memberikan durabilitas data. SQL Server menggunakan kemampuan FUA untuk menyediakan I/O yang sangat efisien dan andal untuk beban kerja SQL Server. Untuk informasi selengkapnya tentang dukungan FUA oleh distribusi Linux dan efeknya pada SQL Server, lihat Internal SQL Server Di Linux: Forced Unit Access (FUA).

SUSE Linux Enterprise Server 12 SP5, Red Hat Enterprise Linux 8.0, dan Ubuntu 18.04 memperkenalkan dukungan untuk kemampuan FUA di subsistem I/O. Jika Anda menggunakan SQL Server 2017 (14.x) CU 6 dan versi yang lebih baru, Anda harus menggunakan konfigurasi berikut untuk implementasi I/O berkinerja tinggi dan efisien dengan FUA oleh 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)

  • Sistem file XFS untuk penyimpanan SQL Server

  • Subsistem penyimpanan dan/atau 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, konfigurasi yang direkomendasikan adalah sebagai 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 dan harus mendukung FUA. Sebelum mengaktifkan pengaturan ini, Anda harus 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 di atas terpenuhi, maka Anda dapat menggunakan 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.