Aracılığıyla paylaş


Linux üzerinde SQL Server için en iyi performans uygulamaları ve yapılandırma yönergeleri

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

Bu makalede, Linux üzerinde SQL Server'a bağlanan veritabanı uygulamalarının performansını en üst düzeye çıkarmak için en iyi yöntemler ve öneriler sağlanmaktadır. Bu öneriler Linux platformunda çalışmaya özeldir. Dizin tasarımı gibi tüm normal SQL Server önerileri yine de geçerlidir.

Aşağıdaki yönergeler hem SQL Server'ı hem de Linux işletim sistemini (OS) yapılandırmaya yönelik öneriler içerir. SQL Server yüklemesinde en iyi performansı deneyimlemek için bu yapılandırma ayarlarını kullanmayı göz önünde bulundurun.

Depolama yapılandırma önerisi

Verileri, işlem günlüklerini ve diğer ilişkili dosyaları (bellek içi OLTP için denetim noktası dosyaları gibi) barındıran depolama alt sistemi, hem ortalama hem de en yüksek iş yükünü düzgün bir şekilde yönetebilmelidir.

Uygun IOPS, aktarım hızı ve yedeklilik ile depolama alt sistemini kullanma

Şirket içi ortamlarda, depolama satıcısı normalde uygun IOPS, aktarım hızı ve yedeklilik sağlamak için birden çok disk arasında şeritleme ile uygun donanım RAID yapılandırmasını destekler. Ancak bu destek farklı depolama satıcıları ve farklı mimarilere sahip farklı depolama teklifleri arasında farklılık gösterebilir.

Azure Sanal Makineler'de dağıtılan Linux üzerinde SQL Server için uygun IOPS ve aktarım hızı gereksinimlerini sağlamak için yazılım RAID'i kullanmayı göz önünde bulundurun. Azure sanal makinelerinde SQL Server'ı benzer depolama konularıyla yapılandırırken bkz. Azure VM'lerinde SQL Server için depolamayı yapılandırma.

Aşağıdaki örnekte, Azure Sanal Makinesinde Linux'ta yazılım RAID'inin nasıl oluşturulacağı gösterilmektedir. Gerekli aktarım hızı için uygun sayıda veri diski ve veriler, işlem günlüğü ve tempdb G/Ç gereksinimlerine göre birimler için IOPS kullanmanız gerektiğini unutmayın. Aşağıdaki örnekte, VM'ye sekiz veri diski eklenmiştir; veri dosyalarını barındırmak için dört, işlem günlükleri için iki ve iş yükü için tempdb iki.

RAID oluşturmaya yönelik cihazları (örneğin /dev/sdc) bulmak için komutunu kullanın lsblk .

# For Data volume, using 4 devices, in RAID 5 configuration with 8KB stripes
mdadm --create --verbose /dev/md0 --level=raid5 --chunk=8K --raid-devices=4 /dev/sdc /dev/sdd /dev/sde /dev/sdf

# For Log volume, using 2 devices in RAID 10 configuration with 64KB stripes
mdadm --create --verbose /dev/md1 --level=raid10 --chunk=64K --raid-devices=2 /dev/sdg /dev/sdh

# For tempdb volume, using 2 devices in RAID 0 configuration with 64KB stripes
mdadm --create --verbose /dev/md2 --level=raid0 --chunk=64K --raid-devices=2 /dev/sdi /dev/sdj

Disk bölümleme ve yapılandırma önerileri

SQL Server için bir RAID yapılandırması kullanın. Dağıtılan dosya sistemi şerit birimi (sunit) ve şerit genişliği RAID geometrisi ile eşleşer. Örneğin, aşağıdaki örnek, log bölümü için XFS tabanlı yapılandırmayı göstermektedir.

# Creating a log volume, using 6 devices, in RAID 10 configuration with 64KB stripes
mdadm --create --verbose /dev/md3 --level=raid10 --chunk=64K --raid-devices=6 /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf

mkfs.xfs /dev/md3 -f -L log
meta-data=/dev/md3               isize=512    agcount=32, agsize=18287648 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=585204384, imaxpct=5
         =                       sunit=16     swidth=48 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=285744, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

Disk dizisi, 64 KB şeritli altı sürücülü bir RAID-10'dur. Gördüğünüz gibi:

  • için sunit=16 blks, 16 * 4096 blok boyutu = 64 KB, şerit boyutuyla eşleşir.
  • için swidth=48 blks, swidth / sunit = 3, eşlik sürücüleri hariç dizideki veri sürücülerinin sayısıdır.

SQL Server, veritabanını, işlem günlüklerini ve SQL Server'da bellek içi OLTP için denetim noktası dosyaları gibi diğer dosyaları barındırmak için hem ext4 hem de XFS dosya sistemlerini destekler. SQL Server verilerini ve işlem günlüğü dosyalarını barındırmak için XFS dosya sistemini kullanın.

Birimi XFS dosya sistemiyle biçimlendirin:

mkfs.xfs /dev/md0 -f -L datavolume
mkfs.xfs /dev/md1 -f -L logvolume
mkfs.xfs /dev/md2 -f -L tempdb

XFS birimini oluştururken ve biçimlendirirken XFS dosya sistemini büyük/küçük harfe duyarsız olacak şekilde yapılandırabilirsiniz. Bu yapılandırma Linux ekosisteminde sıklıkla kullanılmaz, ancak uyumluluk nedeniyle kullanılabilir.

Örneğin, aşağıdaki komutu çalıştırabilirsiniz. XFS dosya sistemini büyük/küçük harfe duyarsız olacak şekilde yapılandırmak için kullanın -n version=ci .

mkfs.xfs /dev/md0 -f -n version=ci -L datavolume

Kalıcı bellek dosya sistemi önerisi

Kalıcı Bellek cihazlarında dosya sistemi yapılandırması için, temel alınan dosya sistemi için blok ayırmayı 2 MB olarak ayarlayın. Daha fazla bilgi için bkz. Teknik konular.

Açık dosya sınırlaması

Üretim ortamınız, varsayılan açık dosya sınırı olan 1.024'ten daha fazla bağlantı gerektirebilir. Yumuşak ve sabit sınırları 1.048.576 olarak ayarlayabilirsiniz. Örneğin, RHEL'de dosyayı aşağıdaki değerlere sahip olacak şekilde düzenleyin /etc/security/limits.d/99-mssql-server.conf :

mssql - nofile 1048576

Uyarı

Bu ayar tarafından systemdbaşlatılan SQL Server hizmetleri için geçerli değildir. Daha fazla bilgi için bkz. RHEL ve systemd'da hizmetler için sınırlar ayarlama.

SQL Server verileri ve günlük dosyaları için dosya sistemlerinde son erişilen tarih ve saati devre dışı bırakma

Yeniden başlatma sonrasında sisteme bağlı sürücülerin otomatik olarak yeniden takmasını sağlamak için bunları dosyaya /etc/fstab ekleyin. yalnızca cihaz adı yerine (örneğin/etc/fstab) sürücüye başvurmak için içindeki UUID 'yi (Evrensel Olarak Benzersiz Tanımlayıcı) /dev/sdc1 kullanın.

özniteliğini noatime SQL Server verilerini ve günlük dosyalarını depolayan herhangi bir dosya sistemiyle kullanın. Bu özniteliği ayarlama hakkında Linux belgelerinize bakın. Aşağıdaki örnekte, Azure Sanal Makinede montelenmiş bir birim için noatime seçeneği etkinleştirme gösterilmektedir.

içindeki /etc/fstabbağlama noktası girişi:

UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" /data1 xfs rw,attr2,noatime 0 0

Önceki örnekte UUID, blkid komutunu kullanarak bulabileceğiniz cihazı temsil eder.

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.

    Uyarı

    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.

Yüksek performans için çekirdek ve CPU ayarları

Aşağıdaki bölümde, bir SQL Server yüklemesi için yüksek performans ve aktarım hızıyla ilgili önerilen Linux işletim sistemi ayarları açıklanmaktadır. Bu ayarları yapılandırma işlemi için Linux dağıtımınızın belgelerine bakın. TuneD'yi, bir sonraki bölümde açıklanan birçok CPU ve çekirdek yapılandırmasını yapılandırmak için açıklandığı gibi kullanabilirsiniz.

Çekirdek ayarlarını yapılandırmak için TuneD kullanma

Red Hat Enterprise Linux (RHEL) kullanıcıları için TuneD aktarım hızı-performans profili bazı çekirdek ve CPU ayarlarını (C Durumları dışında) otomatik olarak yapılandırır. RHEL 8.0'dan başlayarak, Adlı mssql TuneD profili Red Hat ile kodlanmıştır ve SQL Server iş yükleri için Linux performansıyla ilgili daha ince ayarlamalar sunar. Bu profil RHEL aktarım hızı-performans profilini içerir ve tanımlarını bu profil olmadan diğer Linux dağıtımları ve RHEL sürümleriyle gözden geçirmeniz için bu makalede sunuyoruz.

SUSE Linux Enterprise Server 12 SP5, Ubuntu 18.04 ve Red Hat Enterprise Linux 7.x için paketi el ile yükleyebilirsiniz tuned . Aşağıdaki bölümde açıklandığı gibi mssql profilini oluşturmak ve yapılandırmak için kullanın.

TuneD mssql profili kullanılarak önerilen Linux ayarları

Aşağıdaki örnek, Linux üzerinde SQL Server için TuneD yapılandırması sağlar.

[main]
summary=Optimize for Microsoft SQL Server
include=throughput-performance

[cpu]
force_latency=5

[sysctl]
vm.swappiness = 1
vm.dirty_background_ratio = 3
vm.dirty_ratio = 80
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
vm.transparent_hugepages=always
# For multi-instance SQL deployments, use
# vm.transparent_hugepages=madvise
vm.max_map_count=1600000
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
kernel.numa_balancing=0

Linux dağıtımlarını 4.18'den büyük çekirdek sürümleriyle kullanıyorsanız, aşağıdaki seçenekleri gösterildiği gibi yorumlayın; aksi takdirde, dağıtımları 4.18'den önceki çekirdek sürümleriyle kullanıyorsanız aşağıdaki seçeneklerin açıklamasını kaldırın.

# kernel.sched_latency_ns = 60000000
# kernel.sched_migration_cost_ns = 500000
# kernel.sched_min_granularity_ns = 15000000
# kernel.sched_wakeup_granularity_ns = 2000000

Bu TuneD profilini etkinleştirmek için bu tanımları klasörün altındaki bir tuned.conf dosyaya /usr/lib/tuned/mssql kaydedin ve aşağıdaki komutları kullanarak profili etkinleştirin:

chmod +x /usr/lib/tuned/mssql/tuned.conf
tuned-adm profile mssql

Aşağıdaki komutla profilin etkin olduğunu doğrulayın:

tuned-adm active

Veya:

tuned-adm list

CPU ayarları önerisi

Aşağıdaki tabloda CPU ayarları için öneriler sağlanır:

Ayarlar Değer Daha fazla bilgi
CPU frekans yöneticisi performans Bkz. cpupower komutu
ENERJİ_PERF_BİAS performans x86_energy_perf_policy komutuna bakın
min_perf_pct 100 Intel p-state ile ilgili belgelerinize bakın
C Durumları Yalnızca C1 C Durumlarının yalnızca C1 olarak ayarlandığından emin olmak için Linux veya sistem belgelerinize bakın

TuneD'yi açıklandığı gibi kullandığınızda, CPU frequency governor, ENERGY_PERF_BIASve min_perf_pct ayarlarını otomatik olarak yapılandırılır. mssql profilinin temeli olarak aktarım hızı-performans profilini kullanır. C-States parametresini Linux veya sistem dağıtımcınız tarafından sağlanan belgelere göre el ile yapılandırmanız gerekir.

Disk ayarları önerileri

Aşağıdaki tabloda disk ayarları için öneriler sağlanmaktadır:

Ayarlar Değer Daha fazla bilgi
Disk readahead 4096 blockdev komutuna bakın
sysctl ayarları kernel.sched_min_granularity_ns = 15000000
kernel.sched_wakeup_granularity_ns = 2000000
vm.dirty_ratio = 80
vm.dirty_background_ratio = 3
vm.swappiness = 1
Sysctl komutuna bakın

Açıklama

  • vm.swappiness: Bu parametre, çalışma zamanı işlem belleğinin dosya sistemi önbelleğine kıyasla çıkarılması için verilen göreli ağırlığı kontrol eder. Bu parametre için varsayılan değer 60'tır. Bu değer, dosya sistemi önbellek sayfalarının 60:140 oranında kaldırılmasına kıyasla çalışma zamanı işlem bellek sayfalarının değiştirildiğine işaret eder. Değerin 1 olarak ayarlanması, çalışma zamanı işlem belleğini dosya sistemi önbelleği pahasına fiziksel bellekte tutmak için güçlü bir tercih olduğunu gösterir. SQL Server bellek havuzunu veri sayfası önbelleği olarak kullandığından ve güvenilir bir kurtarma sağlamak için dosya sistemi önbelleğini atlayarak doğrudan fiziksel donanıma yazmayı kesinlikle tercih ettiğinden, agresif bir değiştirme yapılandırması yüksek performanslı ve özel SQL Server için yararlı olabilir.

    /proc/sys/vm/ - #swappiness belgeleri bölümünde ek bilgi bulabilirsiniz

  • vm.dirty_*: SQL Server dosya yazma erişimleri, veri bütünlüğü gereksinimlerini karşılayacak şekilde önbelleğe alınmamıştır. Bu parametreler, verimli asenkron yazma performansı sağlar ve yeterince büyük önbellek kullanımına olanak tanırken boşaltmayı kontrol ederek Linux önbelleğe alma yazmalarının depolama G/Ç işlemleri üzerindeki etkisini azaltır.

  • kernel.sched_*: Bu parametre değerleri, Linux çekirdeğindeki Tamamen Adil Zamanlama (CFS) algoritmasını ayarlamaya yönelik geçerli öneriyi temsil eder. İşlemler arası önalım ve iş parçacıklarının sürdürülmesi açısından ağ ve depolama G/Ç çağrılarının aktarım hızını artırır.

mssql TuneD profili kullanıldığında, vm.swappiness, vm.dirty_* ve kernel.sched_* ayarları yapılandırılır. Her cihaz için readahead disk ayarını blockdev komutunu kullanarak el ile yapılandırmanız gerekir.

Çok düğümlü NUMA sistemleri için çekirdek ayarı otomatik NUMA dengelemesi

SQL Server'ı çok düğümlü bir NUMA sistemine yüklerseniz, aşağıdaki kernel.numa_balancing çekirdek ayarı varsayılan olarak etkinleştirilir. SQL Server'ın bir NUMA sisteminde en yüksek verimlilikte çalışmasına izin vermek için, çok düğümlü bir NUMA sisteminde otomatik NUMA dengelemesini devre dışı bırakın:

sysctl -w kernel.numa_balancing=0

TuneD profiliyle mssql kullanıldığında kernel.numa_balancing seçeneği yapılandırılır.

Sanal adres alanı için çekirdek ayarları

Varsayılan ayarı vm.max_map_count (65536) SQL Server yüklemesi için yeterince yüksek olmayabilir. Bu nedenle, değeri SQL Server dağıtımı için en az 262144 olarak değiştirin vm.max_map_count ve bu çekirdek parametrelerinin daha fazla ayarlanması için TuneD mssql profili kullanılarak Önerilen Linux ayarları bölümüne bakın. Maksimum değer için vm.max_map_count 2147483647'dir.

sysctl -w vm.max_map_count=1600000

TuneD profiliyle mssql kullanıldığında vm.max_map_count seçeneği yapılandırılır.

Saydam Büyük Sayfaları (THP) etkin bırakın

Çoğu Linux yüklemesinde bu seçenek varsayılan olarak açıktır. En tutarlı performans deneyimi için bu yapılandırma seçeneğini etkin bırakın. Ancak, birden çok örneği olan SQL Server dağıtımlarında yüksek bellek sayfalama etkinliği varsa veya sunucuda bellek gerektiren diğer uygulamalarla SQL Server çalıştırılıyorsa, aşağıdaki komutu yürüttükten sonra uygulamanızın performansını test edin.

echo madvise > /sys/kernel/mm/transparent_hugepage/enabled

Veya TuneD profilini şu satırla değiştirin mssql :

vm.transparent_hugepages=madvise

Değişiklik sonrasında profilin mssql etkin olduğundan emin olun:

tuned-adm off
tuned-adm profile mssql

TuneD profiliyle mssql kullanıldığında transparent_hugepage seçeneği yapılandırılır.

Ağ ayarı önerileri

Depolama ve CPU önerilerinin yanı sıra ağa özgü önerileriniz de vardır. Aşağıdaki öneriler başvuru için listelenmiştir. Aşağıdaki örneklerde yer alan tüm ayarlar farklı NIC'lerde kullanılamaz. Bu seçeneklerin her birine ilişkin yönergeler için NIC satıcılarıyla iletişime geçin. Bunu üretim ortamlarına uygulamadan önce geliştirme ortamlarında test edin ve yapılandırın. Aşağıdaki seçenekler örneklerle açıklanmıştır ve kullanılan komutlar NIC türüne ve satıcısına özeldir.

  1. Ağ bağlantı noktası arabellek boyutunu yapılandırma. Örnekteki NIC, bir Intel tabanlı NIC olan eth0 ismini taşımaktadır. Intel tabanlı NIC için önerilen arabellek boyutu 4 KB 'tır (4096). Önceden ayarlanmış maksimum değerleri doğrulayın ve aşağıdaki örneği kullanarak yapılandırın:

    Aşağıdaki komutla önceden ayarlanmış maksimum değerleri denetleyin. eth0 öğesini NIC adınız ile değiştirin.

    ethtool -g eth0
    

    Hem rx (alma) hem de tx (iletme) arabellek boyutunu 4 KB olarak ayarlayın.

    ethtool -G eth0 rx 4096 tx 4096
    

    Değerin düzgün yapılandırıldığından emin olun:

    ethtool -g eth0
    
  2. Jumbo çerçeveleri etkinleştirin. Jumbo çerçevelerini etkinleştirmeden önce, istemcilerle SQL Server arasındaki ağ paketi yolundaki tüm ağ anahtarlarının, yönlendiricilerin ve diğer önemli her şeyin jumbo çerçeveleri desteklediğini doğrulayın. Ancak o zaman jumbo çerçevelerin etkinleştirilmesi performansı artırabilir. Jumbo çerçeveler etkinleştirildikten sonra SQL Server'a bağlanın ve aşağıdaki örnekte gösterildiği gibi kullanarak sp_configureağ paketi boyutunu 8060 olarak değiştirin:

    # command to set jumbo frame to 9014 for a Intel NIC named eth0 is
    ifconfig eth0 mtu 9014
    # verify the setting using the command:
    ip addr | grep 9014
    
    EXECUTE sp_configure 'network packet size', '8060';
    GO
    
    RECONFIGURE WITH OVERRIDE;
    GO
    
  3. Varsayılan olarak, uyarlamalı RX/TX IRQ birleştirme için portu yapılandırın; kesme teslimatı, paket hızı düşükken gecikmeyi azaltmak ve paket hızı yüksekken verimliliği artırmak için ayarlanır. Bu ayar ağ altyapınızda kullanılamayabilir, bu nedenle mevcut ağ altyapısını gözden geçirin ve bu ayarın desteklendiğini onaylayın. Örnek, Intel tabanlı bir NIC olan adlı eth0NIC'ye yöneliktir:

    1. Uyarlamalı RX/TX IRQ birleşim için bağlantı noktasını ayarlayın:

      ethtool -C eth0 adaptive-rx on
      ethtool -C eth0 adaptive-tx on
      
    2. Ayarı onaylayın:

      ethtool -c eth0
      

    Uyarı

    Karşılaştırma ortamları gibi yüksek performanslı ortamlarda öngörülebilir davranışlar için uyarlamalı RX/TX IRQ birleştirmeyi devre dışı bırakın ve ardından özel olarak RX/TX kesme birleştirmesini ayarlayın. RX/TX IRQ birleştirmesini devre dışı bırakmak ve özellikle değerleri ayarlamak için örnek komutlara bakın:

    Uyarlamalı RX/TX IRQ birleştirmeyi devre dışı bırakın:

    ethtool -C eth0 adaptive-rx off
    ethtool -C eth0 adaptive-tx off
    

    Değişikliği onaylayın:

    ethtool -c eth0
    

    rx-usecs ve irq parametrelerini ayarlayın. rx-usecs en az bir paket alındıktan sonra, kesme oluşturulmadan önce kaç mikrosaniye geçtiğini belirtir. parametresi, irq kesme devre dışı bırakıldığında durumun güncelleştirilmesiyle ilgili gecikmeleri belirtir. Intel tabanlı NIC'ler için aşağıdaki ayarları kullanabilirsiniz:

    ethtool -C eth0 rx-usecs 100 tx-frames-irq 512
    

    Değişikliği onaylayın:

    ethtool -c eth0
    
  4. Alma tarafı ölçeklendirmeyi (RSS) etkinleştirin ve varsayılan olarak RSS kuyruklarının RX ve TX tarafını birleştirin. Microsoft Desteği ile çalışırken RSS'nin devre dışı bırakılmasının performansı da artırdığı belirli senaryolar vardır. Bu ayarı üretim ortamlarına uygulamadan önce test ortamlarında test edin. Aşağıdaki örnek Intel NIC'ler içindir.

    Önceden ayarlanmış maksimum değerleri alın:

    ethtool -l eth0
    

    Kuyrukları önceden ayarlanmış "Birleşik" maksimum değerde bildirilen değerle birleştirin. Bu örnekte, değeri olarak 8ayarlanır:

    ethtool -L eth0 combined 8
    

    Ayarı doğrulayın:

    ethtool -l eth0
    
  5. NIC bağlantı noktası IRQ bağlılığıyla çalışın. IRQ benşimini ayarlayarak beklenen performansı elde etmek için Sunucu topolojisinin Linux işlemesi, NIC sürücü yığını, varsayılan ayarlar ve irqbalance ayar gibi birkaç önemli parametreyi göz önünde bulundurun. NIC bağlantı noktası IRQ bağlılıkları ayarlarının iyileştirmeleri, sunucu topolojisi bilgisiyle, irqbalance'yı devre dışı bırakarak ve NIC satıcılarına özgü ayarları kullanarak yapılır.

    Aşağıdaki Mellanox'a özgü ağ altyapısı örneği yapılandırmayı açıklamaya yardımcı olur. Daha fazla bilgi edinmek ve Mellanox mlnx araçlarını indirmek için bkz. Mellanox Ağ Bağdaştırıcıları için Performans Ayarlama araçları. Komutlar ortama göre değişir. Daha fazla rehberlik için NIC satıcısına başvurun.

    Öğesini devre dışı bırakın irqbalance, veya IRQ ayarlarının anlık görüntüsünü alın ve daemon'un çıkmasını zorlayın:

    systemctl disable irqbalance.service
    

    Veya:

    irqbalance --oneshot
    

    common_irq_affinity.sh çalıştırılabilir olduğundan emin olun:

    chmod +x common_irq_affinity.sh
    

    Mellanox NIC ağ portu için IRQ ilişkisini görüntüleyin (örneğin, eth0):

    ./show_irq_affinity.sh eth0
    

    Mellanox aracıyla en iyi aktarım hızı performansı için iyileştirme:

    ./mlnx_tune -p HIGH_THROUGHPUT
    

    NIC ve portu fiziksel olarak barındıran NUMA düğümüne donanım yakınlığı ayarlayın.

    ./set_irq_affinity_bynode.sh `\cat /sys/class/net/eth0/device/numa_node` eth0
    

    IRQ benzitesini doğrulayın:

    ./show_irq_affinity.sh eth0
    

    IRQ birleştirme iyileştirmeleri ekleme

    ethtool -C eth0 adaptive-rx off
    ethtool -C eth0 adaptive-tx off
    ethtool -C eth0  rx-usecs 750 tx-frames-irq 2048
    

    Ayarları doğrulayın:

    ethtool -c eth0
    
  6. Önceki değişiklikleri yaptıktan sonra, aşağıdaki komutu kullanarak NIC'nin beklentilerinize uygun olduğundan emin olmak için hızını doğrulayın:

    ethtool eth0 | grep -i Speed
    

Gelişmiş çekirdek ve işletim sistemi yapılandırması

  • En iyi depolama G/Ç performansı için blok aygıtları için Linux çoklu kuyruk zamanlamayı kullanın. Bu zamanlama yöntemi, blok katmanı performansının hızlı katı hal sürücüleri (SSD' ler) ve çok çekirdekli sistemlerle iyi ölçeklendirilmesini sağlar. Linux dağıtımınızın varsayılan olarak etkinleştirilip etkinleştirilmediğini görmek için belgelere bakın. scsi_mod.use_blk_mq=y ile etkinleştirmek için çekirdeği başlatabilirsiniz diğer çoğu durumda,. Linux dağıtımınız için belgelerde bu ayar hakkında daha fazla rehberlik bulunabilir. Bu ayar yukarı akış Linux çekirdeğiyle tutarlıdır.

  • Çoklu yol G/Ç genellikle SQL Server dağıtımları için kullanıldığından, blk-mq çekirdek önyükleme seçeneğini etkinleştirip, cihaz eşleyicisi (DM) çok sıralı hedefini dm_mod.use_blk_mq=y altyapısını kullanacak şekilde yapılandırın. Varsayılan değer (devre dışı) değeridir n . Bu ayar, temel alınan SCSI cihazları blk-mq kullandığında, DM katmanındaki kilitleme iş yükünü azaltır. Multipath I/O'yu yapılandırma hakkında daha fazla bilgi için Linux dağıtımınızın belgelerine başvurun.

Takas dosyasını yapılandırın

Bellek yetersiz sorunlarını önlemek için düzgün yapılandırılmış bir swapfile'a sahip olduğunuzdan emin olun. Swapfile oluşturma ve düzgün boyutlandırma için Linux belgelerinize bakın.

Sanal makineler ve dinamik bellek

Sql Server'ı Linux üzerinde bir sanal makinede çalıştırıyorsanız, sanal makine için ayrılmış bellek miktarını düzeltmek için seçenekleri belirlediğinizden emin olun. Hyper-V Dinamik Bellek gibi özellikleri kullanmayın.

SQL Server yapılandırması

Uygulamanız için en iyi performansı elde etmek için Linux'a SQL Server yükledikten sonra aşağıdaki yapılandırma görevlerini gerçekleştirin.

En iyi yöntemler

Düğüm ve/veya CPU'lar için PROCESS AFFINITY kullanma

Linux işletim sisteminde SQL Server için kullandığınız tüm ALTER SERVER CONFIGURATION'leri ve CPU'ları ayarlamak için PROCESS AFFINITY'yi kullanın (bu genellikle tüm NODE'ler ve CPU'lar içindir). İşlemci benzimliği, verimli Linux ve SQL Zamanlama davranışının korunmasına yardımcı olur. seçeneğini kullanmak NUMANODE en basit yöntemdir. Bilgisayarınızda yalnızca tek bir NUMA Düğümü olsa bile kullanın PROCESS AFFINITY . ayarlama PROCESS AFFINITYhakkında daha fazla bilgi için ALTER SERVER CONFIGURATION makalesine bakın.

Birden çok tempdb veri dosyasını yapılandırma

Linux'ta SQL Server yüklemesi birden çok tempdb dosya yapılandırma seçeneği sunmadığından, yüklemeden sonra birden çok tempdb veri dosyası oluşturmayı göz önünde bulundurmanızı öneririz. Daha fazla bilgi için SQL Server tempdb veritabanında ayırma çekişmesini azaltma önerileri başlıklı makaledeki kılavuza bakın.

Gelişmiş yapılandırma

Aşağıdaki öneriler, Linux'a SQL Server'ı yükledikten sonra gerçekleştirmeyi seçebileceğiniz isteğe bağlı yapılandırma ayarlarıdır. Bu seçenekler, iş yükünüzün gereksinimlerini ve Linux işletim sisteminizin yapılandırmasını temel alır.

mssql-conf ile bellek sınırı ayarlama

Linux işletim sistemi için yeterli boş fiziksel bellek olduğundan emin olmak için SQL Server işlemi varsayılan olarak fiziksel RAM'in yalnızca 80% kullanır. Büyük miktarda fiziksel RAM'e sahip bazı sistemler için 20% önemli bir sayı olabilir.

Örneğin, 1 TB RAM'e sahip bir sistemde varsayılan ayar yaklaşık 200 GB RAM'in kullanılmamış olmasını sağlar. Bu durumda, bellek sınırını daha yüksek bir değerle yapılandırmak isteyebilirsiniz. Bu değeri mssql-conf aracıyla ayarlayabilirsiniz. Daha fazla bilgi için, SQL Server tarafından görünen belleği denetleyen memory.memorylimitmb ayarına (MB cinsinden) bkz.

Uyarı

Ortam değişkenini MSSQL_MEMORY_LIMIT_MB kullanarak bir bellek sınırı da yapılandırabilirsiniz. Bu yöntem genellikle kapsayıcılar dağıtılırken veya SQL Server kapsayıcısı veya paket tabanlı dağıtımlar otomatikleştirilirken kullanılır. Ortam MSSQL_MEMORY_LIMIT_MB değişkeni, ayardan önceliklidir memory.memorylimitmb .

Bu ayarı değiştirirken, bu değeri çok yüksek ayarlamamaya dikkat edin. Yeterli bellek bırakmıyorsanız Linux işletim sistemi ve diğer Linux uygulamalarıyla ilgili sorunlarla karşılaşabilirsiniz.

Denetim grubu (cgroup) v2 ile bellek sınırlarını yapılandırma

SQL Server 2025 (17.x) ve SQL Server 2022 (16.x) CU 20'den başlayarak, SQL Server denetim grubu (cgroup) v2 kısıtlamalarını algılar ve buna uyar ve Docker, Kubernetes ve OpenShift ortamlarında performans kararlılığını ve kaynak yalıtımını artırır. Denetim grupları Linux çekirdeğinde CPU ve bellek gibi sistem kaynakları üzerinde ayrıntılı denetim sağlar.

Cgroup v2 desteğiyle SQL Server, kapsayıcılı dağıtımlarda daha önce gözlemlenen bellek (OOM) hatalarını azaltır; özellikle kapsayıcı belirtimlerinde tanımlanan bellek sınırlarının zorlanmadığı Kubernetes kümelerinde (örneğin AKS v1.25+).

Cgroup sürümünü denetleme

stat -fc %T /sys/fs/cgroup

Sonuçlar aşağıdaki gibidir:

Result Açıklama
cgroup2fs Cgroup v2 kullanıyorsunuz
cgroup cgroup v1 kullanıyorsunuz

cgroup v2'ye geçme

En kolay yol, kutudan çıkararak cgroup v2'yi destekleyen bir dağıtım seçmektir.

El ile geçiş yapmanız gerekiyorsa GRUB yapılandırmanıza aşağıdaki satırı ekleyin:

systemd.unified_cgroup_hierarchy=1

Ardından, GRUB'yi güncelleştirmek için aşağıdaki komutu çalıştırın:

sudo update-grub

Daha fazla bilgi için aşağıdaki kaynaklara bakın:

Bellek sınırlarını ayarlama yönergeleri

Linux üzerinde SQL Server için bellek sınırları ayarlarken aşağıdaki yönergeleri göz önünde bulundurun:

  • Kapsayıcı için kullanılabilir genel belleği sınırlamak için kullanın cgroup . Bu ayar, kapsayıcı içindeki tüm işlemler için üst sınır oluşturur.

  • Bellek sınırı, memorylimitmb veya MSSQL_MEMORY_LIMIT_MB ortam değişkeni tarafından ayarlanmış olsun, Linux üzerinde SQL Server'ın arabellek havuzu, SQLPAL, SQL Server Aracısı, LibOS, PolyBase, Full-Text Arama ve Linux üzerinde SQL Server'a yüklenen diğer işlemler de dahil olmak üzere tüm bileşenlerine tahsis edebileceği toplam belleği denetler.

  • Ortam değişkeni MSSQL_MEMORY_LIMIT_MB, memorylimitmb içinde tanımlanan mssql.conf'den önceliklidir.

  • memorylimitmb konak sisteminin gerçek fiziksel belleğini aşamaz.

  • Linux işletim sistemi için yeterli boş fiziksel bellek olduğundan emin olmak için konak sistem belleğinden ve cgroup sınırından (varsa) daha düşük bir değer ayarlayın memorylimitmb . açıkça ayarlamazsanız memorylimitmb, SQL Server toplam sistem belleği ile cgroup sınırı (varsa) arasında 80% daha az değer kullanır.

  • max_server_memory sunucu yapılandırma seçeneği yalnızca SQL Server arabellek havuzunun boyutunu sınırlar ve Linux üzerinde SQL Server için genel bellek kullanımını yönetmez. SQLPAL, SQL Server Agent, LibOS, PolyBase, Full-Text Search ve Linux üzerinde SQL Server'a yüklenen diğer tüm işlemler gibi diğer bileşenler için yeterli belleğin kaldığından emin olmak için bu değeri her zaman daha memorylimitmb düşük bir değere ayarlayın.