Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ş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
- Yüksek performans için çekirdek ve CPU ayarları
- SQL Server yapılandırması
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.
Önerilen dosya sistemi yapılandırması
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:
Başlangıç parametresi olarak izleme bayrağı 3979'ı etkinleştirin.
ve
control.writethrough = 1yapılandırmak içincontrol.alternatewritethrough = 0kullanın.
Önceki koşulları karşılamayan neredeyse tüm diğer yapılandırmalar için önerilen yapılandırma aşağıdaki gibidir:
İ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.
ve
control.writethrough = 1yapılandırmak içincontrol.alternatewritethrough = 1kullanın.
Kubernetes'te dağıtılan SQL Server kapsayıcıları için FUA desteği
SQL Server,
overlayfsdeğil kalıcı bağlı depolama kullanmalıdır.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>sizinPersistentVolumeClaim:kubectl describe pv <pvc-name>Çıktıda XFS olarak ayarlanmış
fstype'ı arayın.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.
Başlangıç parametresi olarak izleme bayrağı 3979'ı etkinleştirin.
ve
control.writethrough = 1yapılandırmak içincontrol.alternatewritethrough = 0kullanı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 = 15000000kernel.sched_wakeup_granularity_ns = 2000000vm.dirty_ratio = 80vm.dirty_background_ratio = 3vm.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.
Ağ bağlantı noktası arabellek boyutunu yapılandırma. Örnekteki NIC, bir Intel tabanlı NIC olan
eth0ismini 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 eth0Hem
rx(alma) hem detx(iletme) arabellek boyutunu 4 KB olarak ayarlayın.ethtool -G eth0 rx 4096 tx 4096Değerin düzgün yapılandırıldığından emin olun:
ethtool -g eth0Jumbo ç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 9014EXECUTE sp_configure 'network packet size', '8060'; GO RECONFIGURE WITH OVERRIDE; GOVarsayı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: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 onAyarı 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 offDeğişikliği onaylayın:
ethtool -c eth0rx-usecsveirqparametrelerini ayarlayın.rx-usecsen az bir paket alındıktan sonra, kesme oluşturulmadan önce kaç mikrosaniye geçtiğini belirtir. parametresi,irqkesme 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 512Değişikliği onaylayın:
ethtool -c eth0Alma 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 eth0Kuyrukları önceden ayarlanmış "Birleşik" maksimum değerde bildirilen değerle birleştirin. Bu örnekte, değeri olarak
8ayarlanır:ethtool -L eth0 combined 8Ayarı doğrulayın:
ethtool -l eth0NIC 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
irqbalanceayar 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.serviceVeya:
irqbalance --oneshotcommon_irq_affinity.shçalıştırılabilir olduğundan emin olun:chmod +x common_irq_affinity.shMellanox NIC ağ portu için IRQ ilişkisini görüntüleyin (örneğin,
eth0):./show_irq_affinity.sh eth0Mellanox aracıyla en iyi aktarım hızı performansı için iyileştirme:
./mlnx_tune -p HIGH_THROUGHPUTNIC 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` eth0IRQ benzitesini doğrulayın:
./show_irq_affinity.sh eth0IRQ 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 2048Ayarları doğrulayın:
ethtool -c eth0Ö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=yile 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ı hedefinidm_mod.use_blk_mq=yaltyapısını kullanacak şekilde yapılandırın. Varsayılan değer (devre dışı) değeridirn. Bu ayar, temel alınan SCSI cihazlarıblk-mqkullandığı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:
- Hızlı Başlangıç: Helm grafiklerini kullanarak Kubernetes'e SQL Server Linux kapsayıcısı dağıtma
- Linux Çekirdeği cgroup v2 dökümantasyonu
- Denetim Grubu v2
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ı,
memorylimitmbveyaMSSQL_MEMORY_LIMIT_MBortam 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,memorylimitmbiçinde tanımlananmssql.conf'den önceliklidir.memorylimitmbkonak 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ızmemorylimitmb, 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
memorylimitmbdüşük bir değere ayarlayın.