Aracılığıyla paylaş


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

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

Bu makalede, Linux'ta SQL Server 2019 (15.x) ve sonraki sürümleri için kalıcı belleğin (PMEM) nasıl yapılandırıldığı açıklanır.

Genel bakış

SQL Server 2019 (15.x), kalıcı bellek kullanan birçok bellek içi özellik kullanıma sunulmuştur. Bu makale, Linux üzerinde SQL Server için kalıcı belleği yapılandırmak için gereken adımları kapsar.

Not

Aydınlanma terimi, kalıcı bellek odaklı bir dosya sistemiyle çalışmayı ifade etmek için tanıtıldı. Kullanıcı alanı uygulamalarından dosya sistemine doğrudan erişim, bellek eşleme (mmap()) kullanılarak kolaylaştırılır. Bir dosya için bellek eşlemesi oluşturulduğunda, uygulama G/Ç yığınını tamamen atlayarak yükleme/depolama yönergeleri verebilir. Bu, konak uzantısı uygulaması perspektifinden (SQLPAL'ın Windows veya Linux işletim sistemiyle etkileşim kurmasına izin veren kod) "aydınlatılmış" bir dosya erişim yöntemi olarak kabul edilir.

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

fsdax modunu seçtik ve sayfa başına meta verileri depolamak için sistem belleğini kullanıyoruz. --map=devkullanmanızı öneririz. Bu seçenek meta verileri doğrudan ad alanında depolar. --map=mem kullanarak meta verileri bellekte depolamak şu anda deneysel bir işlemdir.

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 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, ndctlile yapılandırıldıktan ve oluşturulduktan sonra, veritabanı dosyalarını buna yerleştirebilir veya yeni bir veritabanı oluşturabilirsiniz.

Aşağıdaki komutu kullanarak mod tempdb yapılandırıldığında SQL Server veri dosyalarını (MDFS, NDFS) ve fsdax dosyalarını bir PMEM cihazında depolayabilirsiniz. SQL Server günlük (LDFS) dosyalarını depolamak için bunu kullanmayın; çünkü işlem günlüğünün, kesim atomiklik garantileri sağlayan bir depolama birimi üzerinde olması gerekir.

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şim ve güncelleme konusunda en iyi performans için -map=mem kullanmak tercih edilir.
  • NVDIMM'nin kapasitesi çok büyükse (512 GB'tan fazla), –map=dev'yi ayarlayın, bu da GÇ verimliliğini etkileyecek ve performansı engelleyecektir.

PMEM cihazlarında SQL Server günlük dosyaları için PMEM cihazlarını kesim/Blok Çevirisi Tablosu (BTT) kullanacak şekilde ayarlayın. Bu, depolama cihazlarının bu teknolojisi için SQL Server günlük dosyaları için gerekli kesimin bölünmezliğini sağlar. ayrıca iş yükü performans doğrulamaları gerçekleştirmenizi öneririz. İş yükünüz için SQL Server günlük performansını bu çözümle sınıfının en iyisi NVMe SSD'leri arasında karşılaştırabilir ve ardından gereksinimlerinizi en iyi karşılayan ve daha iyi performans sağlayan çözümü seçebilirsiniz.

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.

Not

Depolama sistemi, cihaza verilen yazmaların sistem kilitlenmeleri, arabirim sıfırlamaları ve güç hataları arasında kalıcı olacak bir ortamda tutulmasını ve ortamın donanım yedekli olmasını sağlayarak önbelleğe alınmış veya hazırlanmış yazmaların güvenli ve dayanıklı olarak kabul edilmesine olanak tanır.

  • 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. İzleme bayrağı 3979, veritabanı ve işlem günlüğü dosyaları için zorunlu boşaltma davranışını devre dışı bırakır ve writethrough ve alternatewritethrough mantığını kullanır.

  • Veritabanı anlık görüntüleri, veritabanı tutarlılığı denetimleri için iç anlık görüntüler (FILE_FLAG_WRITE_THROUGH), profil oluşturucu izleme dosyaları ve genişletilmiş olay izleme dosyaları gibi SQL Server'da DBCC CHECKDB kullanılarak açılan diğer dosyalar, writethrough ve alternatewritethrough iyileştirmelerini kullanır.

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 Linux dağıtımlarının bazı sürümleri, veri dayanıklılığı sağlayan FUA G/Ç alt sistemi özelliği için destek sağlar. SQL Server, SQL Server iş yükleri için son derece verimli ve güvenilir G/Ç sağlamak için FUA özelliğini kullanır. Linux dağıtımına göre FUA desteği ve bunun SQL Server üzerindeki etkisi hakkında daha fazla bilgi için bkz. Linux'ta SQL Server: Zorlamalı Birim Erişimi (FUA) İç Yapıları.

SUSE Linux Enterprise Server 12 SP5, Red Hat Enterprise Linux 8.0 ve Ubuntu 18.04, G/Ç alt sisteminde FUA özelliği için destek kullanıma sunulmuştur. SQL Server 2017 (14.x) CU 6 ve sonraki sürümlerini kullanıyorsanız, SQL Server tarafından FUA ile yüksek performanslı ve verimli G/Ç uygulaması için aşağıdaki yapılandırmayı kullanmalısınız.

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)

  • 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.

    Not

    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 kullanmanız gerekir. Ç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/veya donanımı

Önerilen yapılandırma:

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

  2. ve control.writethrough = 1yapılandırmak için control.alternatewritethrough = 0 kullanın.

Önceki koşulları karşılamayan neredeyse tüm diğer yapılandırmalar için önerilen yapılandırma aşağıdaki gibidir:

  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. ve control.writethrough = 1yapılandırmak için control.alternatewritethrough = 1 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ışmanız gerekir. 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ü kullanıyor olmalı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ı kullanabilirsiniz.

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

  2. ve control.writethrough = 1yapılandırmak için control.alternatewritethrough = 0 kullanın.