Linux üzerinde SQL Server için kalıcı bellek (PMEM) yapılandırma

Şunlar için geçerlidir:Linux üzerinde SQL Server

Bu makale, SQL Server 2019 (15.x) ve sonraki sürümler için Linux'ta kalıcı bellek (PMEM) yapılandırmasının nasıl yapılacağını açıklar.

Overview

SQL Server 2019 (15.x), depolama yoğun işlemleri hızlandırmak için kalıcı bellek desteği ekler.

PMEM'e duyarlı bir dosya sisteminde, bellek eşleme (mmap()) kullanıcı alanı uygulamalarına dosya verilerine doğrudan erişim sağlar. Bir dosya için bellek haritası oluşturulduğunda, uygulama depolama katmanını atlayan yükleme/depolama talimatları verebilir.

Note

Bu doğrudan erişim, ana uzantı uygulamasının bakış açısından aydınlanmış dosya erişim yöntemi olarak adlandırılır; SQL Server'ın ana işletim sistemi ile SQL Platform Soyutlama Katmanı (SQLPAL) kullanılarak nasıl etkileşime girdiğidir.

Bu makale, Linux üzerinde SQL Server için kalıcı belleği nasıl yapılandıracağınızı gösteriyor.

PMEM cihazları için ad alanları oluşturma

Cihazları yapılandırma

Linux'ta ndctl yardımcı programını kullanın.

  • ndctl PMEM cihazını yapılandırmak için NDCTL yükleme'yi kurun.
  • Ad alanı oluşturmak için ndctl kullanın. Ad alanları, PMEM NVDIMM'ler arasında kesişir ve cihazdaki bellek bölgelerine farklı türlerde kullanıcı alanı erişimi sağlayabilir. fsdax SQL Server için varsayılan ve istenen moddur.
ndctl create-namespace -f -e namespace0.0 --mode=fsdax --map=dev

Mod, fsdax sayfa başına meta verileri sistem belleğinde saklar. Bu --map=dev seçenek, meta verileri doğrudan isim alanında sakladığı için önerilir. Meta verilerin belleğe --map=mem depolanması deneyseldir.

Ad alanını doğrulamak için ndctl kullanın.

Örnek çıktı aşağıdaki gibidir:

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

PMEM cihazı oluşturma ve bağlama

Örneğin , XFS ile:

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

Örneğin, ext4 ile:

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

Teknik olarak dikkat edilmesi gereken konular

  • Daha önce açıklandığı gibi XFS veya ext4 için 2 MB'lık ayırmayı engelle
  • Blok ayırma ile mmap arasındaki yanlış hizalama, 4 KB'a kadar sessiz geri dönüşle sonuçlandı
  • Dosya boyutları 2 MB'ın katı olmalıdır (mod 2 MB)
  • Saydam büyük sayfaları (THP) sakın devre dışı bırakmayın (çoğu dağıtımda varsayılan olarak etkindir).

Cihazı yapılandırmak, oluşturmak ve monte etmek için kullandıktan ndctl sonra, veritabanı dosyalarını içine yerleştirebilir veya yeni bir veritabanı oluşturabilirsiniz.

SQL Server veri dosyalarını (.mdf, .ndf) ve tempdb dosyalarını bir PMEM cihazında fsdax modda şu komutla depolayabilirsiniz. Bu modu SQL Server log (.ldf) dosyalarını depolamak için kullanmayın, çünkü işlem günlüğü sektör atomik garantileri sağlayan depolama gerektirir:

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

Yukarıdaki komutta eşleme seçeneğini ayarlamadan önce aşağıdaki noktaları aklınızda bulundurun:

  • Bu cihaz için bu NVDIMM sayfa girişlerine erişirken ve güncellerken en iyi performansı almak için -map=mem
  • Eğer NVDIMM'nin kapasitesi çok büyükse (512 GB'dan fazla), , ayarlayın -map=dev; bu da I/O verimliliğini etkiler ve performansı düşürür

PMEM cihazlarında SQL Server log dosyaları için, PMEM cihazlarını sektör/Blok Çeviri Tablosu (BTT) kullanacak şekilde yapılandırın. Bu yapılandırma, SQL Server log dosyalarının bu depolama teknolojisi için ihtiyaç duyduğu sektör atomikliğini sağlar. İş yükü performans doğrulamaları yapın. Bu çözüm ile en iyi sınıf NVMe SSD'ler arasındaki iş yükünüz için SQL Server günlük performansını karşılaştırın ve ardından ihtiyaçlarınıza en uygun olanı seçin.

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

Zorlamalı temizleme davranışını devre dışı bırakma

PMEM cihazları O_DIRECT (doğrudan G/Ç) güvenli olduğundan, zorlamalı temizleme davranışını devre dışı bırakabilirsiniz.

Note

Bir depolama sistemi, önbelleklenmiş veya aşamalı yazımların güvenli ve dayanıklı olmasını sağlayabilir; çünkü cihaza yazmaların sistem çökmeleri, arayüz sıfırlamaları ve güç kesintileri arasında devam eden bir ortamda yer almasını ve ortamın kendisinin donanım yedekli olmasını garanti eder.

  • Veritabanı (.mdf ve .ndf) ve işlem günlüğü (.ldf) dosyaları, SQL Server 2017 (14.x) CU 6 ve sonraki sürümlerinde varsayılan olarak writethrough ve alternatewritethrough kullanmaz, çünkü bunlar zorlamalı temizleme davranışını kullanır. İz bayrağı 3979, veritabanı ve işlem logu dosyaları için zorunlu temizleme davranışını devre dışı bırakır ve ve alternatewritethrough ve mantığını kullanırwritethrough.

  • SQL Server'ın açıldığı FILE_FLAG_WRITE_THROUGHdiğer dosyalar, örneğin veritabanı anlık görüntüleri, veritabanı tutarlılığı kontrolleri için dahili anlık görüntüler (DBCC CHECKDB), profiler iz dosyaları ve genişletilmiş olay izleme dosyaları, ve alternatewritethrough optimizasyonlarını kullanırwritethrough.

SQL Server 2017 (14.x) CU 6'da sunulan değişiklikler hakkında daha fazla bilgi için bkz. KB 4131496. Zorlamalı birim erişimi (FUA) dahili özellikleri hakkında daha fazla bilgi için bkz. FUA dahili özellikleri.

SQL Server ve Zorlamalı Birim Erişimi (FUA) I/O alt sistemi özelliği

Desteklenen bazı Linux dağıtımları, veri dayanıklılığını sağlamak için G/Ç alt sistemi düzeyinde Zorlamalı Birim Erişimi (FUA) uygular. SQL Server, Linux iş yükleri için verimli ve güvenilir G/Ç performansı sağlamak için bu özelliği kullanır. Linux dağıtımları genelinde FUA desteği ve FUA'nın SQL Server üzerindeki etkisi hakkında daha fazla bilgi için bkz. Linux üzerinde SQL Server: Zorlamalı Birim Erişimi (FUA) İç Yapısı.

G/Ç alt sisteminde FUA desteği SUSE Linux Enterprise Server 12 SP5, Red Hat Enterprise Linux 8.0 ve Ubuntu 18.04'te kullanıma sunulmuştur. SQL Server 2017 (14.x) CU 6 ve sonraki sürümlerinde, SQL Server'da FUA ile yüksek performanslı ve verimli G/Ç'yi etkinleştirmek için aşağıdaki yapılandırmayı kullanın.

Aşağıdaki koşullar karşılanırsa bu önerilen yapılandırmayı kullanın:

  • SQL Server 2017 (14.x) CU 6 ve sonraki sürümleri

  • FUA özelliğini destekleyen Linux dağıtımı ve sürümü (Red Hat Enterprise Linux 8.0, SUSE Linux Enterprise Server 12 SP5 veya Ubuntu 18.04 ile başlayarak)

    Note

    SQL Server 2025(17.x) tarihinden itibaren SUSE Linux Enterprise Server (SLES) desteklenmez.

  • Linux çekirdek 4.18 veya sonraki sürümlerde SQL Server depolama için XFS dosya sistemi.

  • Linux çekirdek 5.6 veya üzeri sürümlerde SQL Server depolaması için ext4 dosya sistemi.

    Note

    Linux çekirdek sürümü 5.6'dan düşük olduğunda SQL Server verilerini ve işlem günlüğü dosyalarını barındırmak için XFS dosya sistemini kullanın. Çekirdek sürüm 5.6'dan başlayarak, özel gereksinimlerinize göre XFS ile ext4 arasında seçim yapabilirsiniz.

  • FUA özelliğini destekleyen ve yapılandırılan depolama alt sistemi ve donanım

Önerilen yapılandırma:

  1. Başlangıç parametresi olarak izleme bayrağı 3979'ı etkinleştirin.

  2. mssql-confcontrol.writethrough = 1 ve control.alternatewritethrough = 0'yi yapılandırmak için kullanın.

Önceki koşulları karşılamamış diğer tüm yapılandırmalar için aşağıdaki önerilen yapılandırmayı kullanın:

  1. İzleme bayrağı 3982'yi başlangıç parametresi (Linux ekosistemindeki SQL Server için varsayılan değerdir) olarak etkinleştirin ve izleme bayrağı 3979'un başlangıç parametresi olarak etkinleştirilmediğinden emin olun.

  2. mssql-confcontrol.writethrough = 1 ve control.alternatewritethrough = 1'yi yapılandırmak için kullanın.

Kubernetes'te dağıtılan SQL Server kapsayıcıları için FUA desteği

  1. SQL Server, overlayfsdeğil kalıcı bağlı depolama kullanmalıdır.

  2. Depolamanın XFS veya ext4 dosya sistemlerini kullanması ve FUA'yı desteklemesi gerekir (ext4 , Sürüm 5.6'dan önceki Linux çekirdeğinde FUA'yı desteklemez). Bu ayarı etkinleştirmeden önce, işletim sistemi ve depolama alt sisteminin FUA seçeneklerini desteklediğinden emin olmak için Linux dağıtım ve depolama satıcınızla birlikte çalışın. Kubernetes'te aşağıdaki komutu kullanarak dosya sistemi türünü sorgulayabilirsiniz; burada <pvc-name> sizin PersistentVolumeClaim:

    kubectl describe pv <pvc-name>
    

    Çıktıda XFS olarak ayarlanmış fstype'ı arayın.

  3. SQL Server podlarını barındıran çalışan düğümü, FUA özelliğini destekleyen bir Linux dağıtımı ve sürümü kullanmalıdır (Red Hat Enterprise Linux 8.0, SUSE Linux Enterprise Server 12 SP5 veya Ubuntu 18.04 ile başlayarak).

Yukarıdaki koşullar karşılanırsa, aşağıdaki önerilen FUA ayarlarını kullanın:

  1. Başlangıç parametresi olarak izleme bayrağı 3979'ı etkinleştirin.

  2. mssql-confcontrol.writethrough = 1 ve control.alternatewritethrough = 0'yi yapılandırmak için kullanın.