Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server di 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 suatu pemetaan memori untuk sebuah file dibuat, aplikasi dapat mengeluarkan instruksi pemuatan/penyimpanan yang melewati lapisan 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 untuk perangkat PMEM
Mengonfigurasi perangkat
Di Linux, gunakan ndctl utilitas .
- Instal
ndctluntuk mengonfigurasi perangkat PMEM. Anda dapat menemukannya di sini. - Gunakan
ndctluntuk membuat namespace. Namespace disusun secara interleaved di seluruh PMEM NVDIMM dan dapat menyediakan berbagai jenis akses ruang pengguna ke area memori pada perangkat.fsdaxadalah 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 metadata pada namespace secara langsung. Menyimpan metadata dalam memori menggunakan --map=mem bersifat eksperimental saat ini.
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
mmapmenghasilkan 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 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 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 dalam mengakses dan memperbarui entri halaman NVDIMM ini untuk perangkat ini, lebih baik menggunakan
-map=mem - Kapasitas NVDIMM yang terlalu besar (lebih dari 512 GB) dapat diatur melalui
–map=dev, yang akan mempengaruhi throughput IO dan menghambat performa.
Untuk file log SQL Server pada perangkat PMEM, konfigurasikan perangkat PMEM untuk menggunakan Tabel Translasi Blok (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 PMEM aman untuk (I/O langsung), Anda dapat menonaktifkan perilaku pemaksaan flush.
Catatan
Sistem penyimpanan dapat memastikan bahwa setiap penulisan yang di-cache atau dikelompokkan dianggap aman dan tahan lama, dengan menjamin bahwa data yang ditulis ke perangkat disimpan pada media yang akan tetap ada meskipun terjadi crash sistem, reset antarmuka, dan kegagalan daya, serta media itu sendiri memiliki redundansi perangkat keras.
File database (
.mdfdan.ndf) dan log transaksi (.ldf) tidak menggunakanwritethroughdanalternatewritethroughsecara default di SQL Server 2017 (14.x) CU 6 dan versi yang lebih baru, karena menggunakan perilaku flush paksa. Flag jejak 3979 menonaktifkan penggunaan perilaku pengosongan paksa untuk file basis data dan log transaksi, dan menggunakan logikawritethroughdanalternatewritethrough.File lain yang dibuka dengan menggunakan
FILE_FLAG_WRITE_THROUGHdi SQL Server, seperti cuplikan database, cuplikan internal untuk pemeriksaan konsistensi database (DBCC CHECKDB), file pelacakan profiler, dan file pelacakan peristiwa yang diperluas, menggunakan pengoptimalanwritethroughdanalternatewritethrough.
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)
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 SQL Server di Linux: Internals 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, 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.
Catatan
Anda harus menggunakan 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/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 = 1dancontrol.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 = 1dancontrol.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 atau ext4 dan harus mendukung FUA (ext4 tidak mendukung FUA pada kernel Linux yang lebih lama dari versi 5.6). 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
fstypeyang 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 = 1dancontrol.alternatewritethrough = 0.
Konten terkait
- Apa itu SQL Server di Linux?
- praktik terbaik performa dan panduan konfigurasi untuk SQL Server di Linux