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 menggunakanwritethrough
danalternatewritethrough
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 menggunakanwritethrough
logika danalternatewritethrough
.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, menggunakanwritethrough
pengoptimalan danalternatewritethrough
.
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:
Aktifkan Bendera Pelacakan 3979 sebagai parameter startup.
Gunakan mssql-conf untuk mengonfigurasi
control.writethrough = 1
dancontrol.alternatewritethrough = 0
.
Untuk hampir semua konfigurasi lain yang tidak memenuhi kondisi sebelumnya, konfigurasi yang direkomendasikan adalah sebagai berikut:
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.
Gunakan mssql-conf untuk mengonfigurasi
control.writethrough = 1
dancontrol.alternatewritethrough = 1
.
Dukungan FUA untuk kontainer SQL Server yang disebarkan di Kubernetes
SQL Server harus menggunakan penyimpanan yang dipasang tetap, dan bukan
overlayfs
.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>
adalahPersistentVolumeClaim
:kubectl describe pv <pvc-name>
Dalam output, cari
fstype
yang diatur ke XFS.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.
Aktifkan Bendera Pelacakan 3979 sebagai parameter startup.
Gunakan mssql-conf untuk mengonfigurasi
control.writethrough = 1
dancontrol.alternatewritethrough = 0
.