Praktik terbaik performa dan panduan konfigurasi untuk SQL Server di Linux

Berlaku untuk:SQL Server - Linux

Artikel ini memberikan praktik dan rekomendasi terbaik untuk memaksimalkan performa untuk aplikasi database yang terhubung ke SQL Server di Linux. Rekomendasi ini khusus untuk berjalan di platform Linux. Semua rekomendasi SQL Server normal, seperti desain indeks, masih berlaku.

Panduan berikut berisi rekomendasi untuk mengonfigurasi SQL Server dan sistem operasi (OS) Linux. Pertimbangkan untuk menggunakan pengaturan konfigurasi ini untuk mengalami performa terbaik untuk penginstalan SQL Server.

Rekomendasi konfigurasi penyimpanan

Subsistem penyimpanan yang menghosting data, log transaksi, dan file terkait lainnya (seperti file titik pemeriksaan untuk OLTP dalam memori) harus mampu mengelola beban kerja rata-rata dan puncak dengan anggun.

Gunakan subsistem penyimpanan dengan IOPS, throughput, dan redundansi yang sesuai

Biasanya, di lingkungan lokal, vendor penyimpanan mendukung konfigurasi RAID perangkat keras yang sesuai dengan striping di beberapa disk untuk memastikan IOPS, throughput, dan redundansi yang sesuai. Meskipun, ini dapat berbeda di berbagai vendor penyimpanan dan penawaran penyimpanan yang berbeda dengan arsitektur yang bervariasi.

Untuk SQL Server di Linux yang disebarkan di Azure Virtual Machines, pertimbangkan untuk menggunakan RAID perangkat lunak untuk memastikan persyaratan IOPS dan throughput yang sesuai tercapai. Saat mengonfigurasi SQL Server di komputer virtual Azure dengan pertimbangan penyimpanan serupa, lihat Konfigurasi penyimpanan untuk komputer virtual SQL Server.

Contoh berikut menunjukkan cara membuat RAID perangkat lunak di Linux di Azure Virtual Machines. Perlu diingat bahwa Anda harus menggunakan jumlah disk data yang sesuai untuk throughput dan IOPS yang diperlukan untuk volume berdasarkan data, log transaksi, dan tempdb persyaratan I/O. Dalam contoh berikut, delapan disk data dilampirkan ke Azure Virtual Machine; 4 untuk menghosting file data, 2 untuk log transaksi, dan 2 untuk tempdb beban kerja.

Untuk menemukan perangkat (misalnya /dev/sdc) untuk pembuatan RAID, gunakan lsblk perintah .

# 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

Rekomendasi partisi dan konfigurasi disk

Untuk SQL Server, Anda harus menggunakan konfigurasi RAID. Unit stripe sistem file yang disebarkan (sunit) dan lebar garis harus cocok dengan geometri RAID. Misalnya, ini adalah contoh berbasis XFS untuk volume log.

# 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

Array log adalah RAID-10 6-drive dengan garis 64 KB. Seperti yang dapat lihat:

  • Untuk sunit=16 blks, 16 * ukuran blok 4096 = 64 KB, cocok dengan ukuran garis.
  • Untuk swidth=48 blks, swidth / sunit = 3, yang merupakan jumlah drive data dalam array, tidak termasuk drive paritas.

rekomendasi konfigurasi sistem file

SQL Server mendukung sistem file ext4 dan XFS untuk menghosting database, log transaksi, dan file tambahan seperti file titik pemeriksaan untuk OLTP dalam memori di SQL Server. Microsoft merekomendasikan penggunaan sistem file XFS untuk menghosting data SQL Server dan file log transaksi.

Format volume dengan sistem file XFS:

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

Dimungkinkan untuk mengonfigurasi sistem file XFS agar tidak peka huruf besar/kecil saat membuat dan memformat volume XFS. Ini bukan konfigurasi yang sering digunakan dalam ekosistem Linux, tetapi dapat digunakan untuk alasan kompatibilitas.

Misalnya, Anda dapat menjalankan perintah berikut. -n version=ci digunakan untuk mengonfigurasi sistem file XFS agar tidak peka huruf besar/kecil.

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

Rekomendasi sistem file memori persisten

Untuk konfigurasi sistem file pada perangkat Memori Persisten, alokasi blok untuk sistem file yang mendasar harus 2 MB. Untuk informasi selengkapnya tentang artikel ini, tinjau artikel Pertimbangan teknis.

Buka batasan file

Lingkungan produksi Anda mungkin memerlukan lebih banyak koneksi daripada batas file terbuka default 1024. Kami sarankan Anda menetapkan batas lunak 16000, dan batas keras 32727. Misalnya, di RHEL, edit /etc/security/limits.d/99-mssql-server.conf file agar memiliki nilai berikut:

mssql hard nofile 32727
mssql soft nofile 16000

Nonaktifkan tanggal/waktu terakhir yang diakses pada sistem file untuk data SQL Server dan file log

Untuk memastikan bahwa drive yang dilampirkan ke remount sistem secara otomatis setelah menghidupkan ulang, tambahkan ke /etc/fstab file. Anda juga harus menggunakan UUID (Pengidentifikasi Unik Universal) untuk /etc/fstab merujuk ke drive, bukan hanya nama perangkat (seperti /dev/sdc1).

noatime Gunakan atribut dengan sistem file apa pun yang menyimpan data SQL Server dan file log. Lihat dokumentasi Linux Anda tentang cara mengatur atribut ini. Contoh cara mengaktifkan noatime opsi untuk volume yang dipasang di Azure Virtual Machine mengikuti.

Entri titik pemasangan di /etc/fstab:

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

Dalam contoh sebelumnya, UUID mewakili perangkat yang dapat Anda temukan menggunakan blkid perintah .

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 Internal SQL Server Di Linux: 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

  • Subsistem penyimpanan dan/atau perangkat keras yang mendukung dan dikonfigurasi untuk kemampuan FUA

Konfigurasi yang direkomendasikan:

  1. Aktifkan Bendera Pelacakan 3979 sebagai parameter startup.

  2. Gunakan mssql-conf untuk mengonfigurasi control.writethrough = 1 dan control.alternatewritethrough = 0.

Untuk hampir semua konfigurasi lain yang tidak memenuhi kondisi sebelumnya, konfigurasi yang direkomendasikan adalah sebagai berikut:

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

  2. Gunakan mssql-conf untuk mengonfigurasi control.writethrough = 1 dan control.alternatewritethrough = 1.

Dukungan FUA untuk kontainer SQL Server yang disebarkan di Kubernetes

  1. SQL Server harus menggunakan penyimpanan yang dipasang tetap, dan bukan overlayfs.

  2. Penyimpanan harus menggunakan sistem file XFS dan harus mendukung FUA. 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> adalah PersistentVolumeClaim:

    kubectl describe pv <pvc-name>
    

    Dalam output, cari fstype yang diatur ke XFS.

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

  1. Aktifkan Bendera Pelacakan 3979 sebagai parameter startup.

  2. Gunakan mssql-conf untuk mengonfigurasi control.writethrough = 1 dan control.alternatewritethrough = 0.

Pengaturan kernel dan CPU untuk performa tinggi

Bagian berikut menjelaskan pengaturan OS Linux yang direkomendasikan yang terkait dengan performa tinggi dan throughput untuk penginstalan SQL Server. Lihat dokumentasi distribusi Linux Anda untuk proses mengonfigurasi pengaturan ini. Anda dapat menggunakan TuneD seperti yang dijelaskan, untuk mengonfigurasi banyak CPU dan konfigurasi kernel, yang dijelaskan di bagian berikutnya.

Menggunakan TuneD untuk mengonfigurasi pengaturan kernel

Untuk pengguna Red Hat Enterprise Linux (RHEL), profil performa throughput TuneD mengonfigurasi beberapa pengaturan kernel dan CPU secara otomatis (kecuali untuk C-States). Dimulai dengan RHEL 8.0, profil TuneD bernama mssql di-codeveloped dengan Red Hat dan menawarkan penyetelan terkait performa Linux yang lebih halus untuk beban kerja SQL Server. Profil ini mencakup profil performa throughput RHEL, dan kami menyajikan definisinya dalam artikel ini untuk tinjauan Anda dengan distribusi Linux lainnya dan rilis RHEL tanpa profil ini.

Untuk SUSE Linux Enterprise Server 12 SP5, Ubuntu 18.04, dan Red Hat Enterprise Linux 7.x, tuned paket dapat diinstal secara manual. Ini dapat digunakan untuk membuat dan mengonfigurasi profil seperti yang mssql dijelaskan di bagian berikut.

Pengaturan Linux yang diusulkan menggunakan profil TuneD mssql

Contoh berikut menyediakan konfigurasi TuneD untuk SQL Server di Linux.

[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

Jika Anda menggunakan distribusi Linux dengan versi kernel yang lebih besar dari 4.18, komentari opsi berikut seperti yang ditunjukkan; jika tidak, batalkan komentar opsi berikut jika Anda menggunakan distribusi dengan versi kernel yang lebih lama dari 4.18.

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

Untuk mengaktifkan profil TuneD ini, simpan definisi ini dalam file di tuned.conf bawah /usr/lib/tuned/mssql folder, dan aktifkan profil menggunakan perintah berikut:

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

Verifikasi bahwa profil aktif, dengan perintah berikut:

tuned-adm active

Atau:

tuned-adm list

Rekomendasi pengaturan CPU

Tabel berikut ini menyediakan rekomendasi untuk pengaturan CPU:

Pengaturan Nilai Informasi selengkapnya
Gubernur frekuensi CPU performa Lihat perintah cpupower
ENERGY_PERF_BIAS performa Lihat perintah x86_energy_perf_policy
min_perf_pct 100 Lihat dokumentasi Anda tentang Intel p-state
C-States Hanya C1 Lihat dokumentasi Linux atau sistem Anda tentang cara memastikan C-States diatur ke C1 saja

Menggunakan TuneD seperti yang dijelaskan sebelumnya secara otomatis mengonfigurasi gubernur frekuensi CPU, ENERGY_PERF_BIAS, dan min_perf_pct pengaturan dengan tepat karena profil performa throughput digunakan sebagai dasar untuk mssql profil. Parameter C-States harus dikonfigurasi secara manual sesuai dengan dokumentasi yang disediakan oleh Linux atau distributor sistem.

Rekomendasi pengaturan disk

Tabel berikut ini menyediakan rekomendasi untuk pengaturan disk:

Pengaturan Nilai Informasi selengkapnya
Disk readahead 4096 blockdev Lihat perintah
pengaturan sysctl kernel.sched_min_granularity_ns = 15000000
kernel.sched_wakeup_granularity_ns = 2000000
vm.dirty_ratio = 80
vm.dirty_background_ratio = 3
vm.swappiness = 1
Lihat perintah sysctl

Deskripsi

  • vm.swappiness: Parameter ini mengontrol bobot relatif yang diberikan untuk menukar memori proses runtime dibandingkan dengan cache sistem file. Nilai default untuk parameter ini adalah 60, yang menunjukkan pertukaran halaman memori proses runtime dibandingkan dengan menghapus halaman cache sistem file dengan rasio 60:140. Mengatur nilai 1 menunjukkan preferensi yang kuat untuk menyimpan memori proses runtime dalam memori fisik dengan mengorbankan cache sistem file. Karena SQL Server menggunakan kumpulan buffer sebagai cache halaman data dan sangat lebih suka menulis ke perangkat keras fisik melewati cache sistem file untuk pemulihan yang andal, konfigurasi pertukaran agresif dapat bermanfaat bagi SQL Server berperforma tinggi dan khusus. Anda dapat menemukan informasi tambahan di Dokumentasi untuk /proc/sys/vm/ - #swappiness

  • vm.dirty_*: Akses tulis file SQL Server tidak di-cache, memenuhi persyaratan integritas datanya. Parameter ini memungkinkan performa penulisan asinkron yang efisien dan menurunkan efek I/O penyimpanan penulisan penembolokan Linux dengan memungkinkan penembolokan yang cukup besar saat pembatasan pembilasan.

  • kernel.sched_*: Nilai parameter ini mewakili rekomendasi saat ini untuk mengubah algoritma Completely Fair Scheduling (CFS) di Linux Kernel, untuk meningkatkan throughput panggilan I/O jaringan dan penyimpanan sehubungan dengan preemsi antar-proses dan dimulainya kembali utas.

mssql Menggunakan profil TuneD mengonfigurasi vm.swappinesspengaturan , vm.dirty_* dan kernel.sched_* . Konfigurasi disk readahead yang menggunakan blockdev perintah adalah per perangkat dan harus dilakukan secara manual.

Pengaturan kernel penyeimbangan NUMA otomatis untuk sistem NUMA multi-simpul

Jika Anda menginstal SQL Server pada sistem NUMA multi-simpul, pengaturan kernel berikut kernel.numa_balancing diaktifkan secara default. Untuk memungkinkan SQL Server beroperasi pada efisiensi maksimum pada sistem NUMA, nonaktifkan penyeimbangan NUMA otomatis pada sistem NUMA multi-simpul:

sysctl -w kernel.numa_balancing=0

mssql Menggunakan profil TuneD mengonfigurasi kernel.numa_balancing opsi .

Pengaturan kernel untuk ruang alamat virtual

Pengaturan vm.max_map_count default (yaitu 65536) mungkin tidak cukup tinggi untuk penginstalan SQL Server. Untuk alasan ini, ubah vm.max_map_count nilai menjadi setidaknya 262144 untuk penyebaran SQL Server, dan lihat pengaturan Linux yang Diusulkan menggunakan bagian profil TuneD mssql untuk penyetelan lebih lanjut dari parameter kernel ini. Nilai maksimum untuk vm.max_map_count adalah 2147483647.

sysctl -w vm.max_map_count=1600000

mssql Menggunakan profil TuneD mengonfigurasi vm.max_map_count opsi .

Biarkan Halaman Besar Transparan (THP) diaktifkan

Sebagian besar penginstalan Linux harus mengaktifkan opsi ini secara default. Kami menyarankan untuk pengalaman performa yang paling konsisten agar opsi konfigurasi ini diaktifkan. Namun, jika ada aktivitas penomoran memori tinggi dalam penyebaran SQL Server dengan beberapa instans, misalnya, atau eksekusi SQL Server dengan aplikasi yang menuntut memori lain di server, sebaiknya uji performa aplikasi Anda setelah menjalankan perintah berikut:

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

Atau ubah mssql profil TuneD dengan baris:

vm.transparent_hugepages=madvise

Dan buat mssql profil aktif setelah modifikasi:

tuned-adm off
tuned-adm profile mssql

mssql Menggunakan profil TuneD mengonfigurasi transparent_hugepage opsi .

Rekomendasi pengaturan jaringan

Seperti ada rekomendasi penyimpanan dan CPU, ada rekomendasi khusus Jaringan serta tercantum di bawah ini untuk referensi. Tidak semua pengaturan dalam contoh berikut tersedia di berbagai NIC. Lihat dan konsultasikan dengan vendor NIC untuk panduan untuk setiap opsi ini. Uji dan konfigurasikan ini pada lingkungan pengembangan sebelum menerapkannya pada lingkungan produksi. Opsi berikut dijelaskan dengan contoh, dan perintah yang digunakan khusus untuk jenis NIC dan vendor.

  1. Mengonfigurasi ukuran buffer port jaringan. Dalam contoh di bawah ini, NIC diberi nama eth0, yang merupakan NIC berbasis Intel. Untuk NIC berbasis Intel, ukuran buffer yang direkomendasikan adalah 4 KB (4096). Verifikasi preset maksimum lalu konfigurasikan menggunakan contoh berikut:

    Periksa maksimum yang telah ditetapkan sebelumnya dengan perintah berikut. Ganti eth0 dengan nama NIC Anda:

    ethtool -g eth0
    

    Atur rx ukuran buffer (terima) dan tx (kirim) ke 4 KB:

    ethtool -G eth0 rx 4096 tx 4096
    

    Periksa apakah nilai dikonfigurasi dengan benar:

    ethtool -g eth0
    
  2. Aktifkan bingkai jumbo. Sebelum mengaktifkan bingkai jumbo, verifikasi bahwa semua sakelar jaringan, router, dan hal lain yang penting dalam jalur paket jaringan antara klien dan SQL Server mendukung bingkai jumbo. Hanya dengan begitu, mengaktifkan bingkai jumbo dapat meningkatkan performa. Setelah bingkai jumbo diaktifkan, sambungkan ke SQL Server dan ubah ukuran paket jaringan menjadi 8060 menggunakan sp_configure seperti yang ditunjukkan di bawah ini:

    # 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
    
    EXEC sp_configure 'network packet size', '8060';
    GO
    RECONFIGURE WITH OVERRIDE;
    GO
    
  3. Secara default, sebaiknya atur port untuk koalescing RX/TX IRQ adaptif, yang berarti pengiriman interupsi disesuaikan untuk meningkatkan latensi ketika laju paket rendah dan meningkatkan throughput ketika tingkat paket tinggi. Pengaturan ini mungkin tidak tersedia di semua infrastruktur jaringan yang berbeda, jadi tinjau infrastruktur jaringan yang ada dan konfirmasikan bahwa ini didukung. Contoh di bawah ini adalah untuk NIC bernama eth0, yang merupakan NIC berbasis Intel:

    1. Atur port untuk koalescing IRQ RX/TX adaptif:

      ethtool -C eth0 adaptive-rx on
      ethtool -C eth0 adaptive-tx on
      
    2. Konfirmasi pengaturan:

      ethtool -c eth0
      

    Catatan

    Untuk perilaku yang dapat diprediksi untuk lingkungan berkinerja tinggi, seperti lingkungan untuk tolok ukur, nonaktifkan koalescing IRQ RX/TX adaptif lalu atur secara khusus coalescing interupsi RX/TX. Lihat contoh perintah untuk menonaktifkan coalescing IRQ RX/TX lalu secara khusus mengatur nilai:

    Nonaktifkan koalescing IRQ RX/TX adaptif:

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

    Konfirmasi perubahan:

    ethtool -c eth0
    

    Atur rx-usecs parameter dan irq . rx-usecs menentukan berapa banyak mikro detik setelah setidaknya 1 paket diterima sebelum menghasilkan interupsi. Parameter irq menentukan penundaan yang sesuai dalam memperbarui status saat interupsi dinonaktifkan. Untuk NIC dasar Intel, Anda dapat menggunakan pengaturan berikut:

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

    Konfirmasi perubahan:

    ethtool -c eth0
    
  4. Kami juga merekomendasikan penskalaan sisi penerimaan (RSS) diaktifkan dan secara default, menggabungkan sisi RX dan TX dari antrean RSS. Ada skenario khusus, saat bekerja dengan Dukungan Microsoft, di mana menonaktifkan RSS juga telah meningkatkan performa. Uji pengaturan ini di lingkungan pengujian sebelum menerapkannya pada lingkungan produksi. Contoh berikut adalah untuk Intel NIC.

    Dapatkan nilai maksimum prasetel:

    ethtool -l eth0
    

    Gabungkan antrean dengan nilai yang dilaporkan dalam nilai maksimum "Gabungan" prasetel. Dalam contoh ini, nilai diatur ke 8:

    ethtool -L eth0 combined 8
    

    Verifikasi pengaturan:

    ethtool -l eth0
    
  5. Bekerja dengan afinitas IRQ port NIC. Untuk mencapai performa yang diharapkan dengan mengubah afinitas IRQ, pertimbangkan beberapa parameter penting seperti penanganan Linux atas topologi server, tumpukan driver NIC, pengaturan default, dan pengaturan irqbalance. Pengoptimalan pengaturan afinitas IRQ port NIC dilakukan dengan pengetahuan tentang topologi server, menonaktifkan ketidakseimbangan, dan menggunakan pengaturan khusus vendor NIC.

    Contoh infrastruktur jaringan khusus Mellanox berikut membantu menjelaskan konfigurasi. Untuk informasi selengkapnya, dan untuk mengunduh alat mlnx Mellanox, lihat Alat Penyetelan Performa untuk Mellanox Network Adapters. Perintah berubah berdasarkan lingkungan. Hubungi vendor NIC untuk panduan lebih lanjut.

    Nonaktifkan irqbalance, atau dapatkan rekam jepret pengaturan IRQ dan paksa daemon untuk keluar:

    systemctl disable irqbalance.service
    

    Atau:

    irqbalance --oneshot
    

    Pastikan itu common_irq_affinity.sh dapat dieksekusi:

    chmod +x common_irq_affinity.sh
    

    Tampilkan afinitas IRQ untuk port Mellanox NIC (misalnya, eth0):

    ./show_irq_affinity.sh eth0
    

    Optimalkan untuk performa throughput terbaik dengan alat Mellanox:

    ./mlnx_tune -p HIGH_THROUGHPUT
    

    Atur afinitas perangkat keras ke node NUMA yang menghosting secara fisik NIC dan portnya:

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

    Verifikasi afinitas IRQ:

    ./show_irq_affinity.sh eth0
    

    Menambahkan pengoptimalan coalescing IRQ

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

    Verifikasi pengaturan:

    ethtool -c eth0
    
  6. Setelah perubahan di atas selesai, verifikasi kecepatan NIC untuk memastikannya sesuai dengan harapan menggunakan perintah berikut:

    ethtool eth0 | grep -i Speed
    

Konfigurasi kernel dan OS tingkat lanjut

  • Untuk performa I/O penyimpanan terbaik, gunakan penjadwalan multi-antrean Linux untuk perangkat blok, yang memungkinkan performa lapisan blok menskalakan dengan baik dengan drive solid-state (SSD) dan sistem multi-inti yang cepat. Periksa dokumentasi jika diaktifkan secara default dalam distribusi Linux Anda. Dalam kebanyakan kasus lain, booting kernel dengan scsi_mod.use_blk_mq=y mengaktifkannya, meskipun dokumentasi distribusi Linux yang digunakan mungkin memiliki panduan lebih lanjut tentang hal itu. Ini konsisten dengan kernel Linux upstram.

  • Karena I/O multipath sering digunakan untuk penyebaran SQL Server, konfigurasikan target multi-antrean pemeta perangkat (DM) untuk menggunakan blk-mq infrastruktur, dengan mengaktifkan dm_mod.use_blk_mq=y opsi boot kernel. Nilai defaultnya adalah n (dinonaktifkan). Pengaturan ini, ketika perangkat SCSI yang mendasar menggunakan blk-mq, mengurangi penguncian overhead di lapisan DM. Untuk informasi selengkapnya tentang cara mengonfigurasi I/O multipath, lihat dokumentasi distribusi Linux Anda.

Mengonfigurasi swapfile

Pastikan Anda memiliki swapfile yang dikonfigurasi dengan benar untuk menghindari masalah kehabisan memori. Lihat dokumentasi Linux Anda tentang cara membuat dan mengukur swapfile dengan benar.

Komputer virtual dan memori dinamis

Jika Anda menjalankan SQL Server di Linux di komputer virtual, pastikan Anda memilih opsi untuk memperbaiki jumlah memori yang dicadangkan untuk komputer virtual. Jangan gunakan fitur seperti Hyper-V Dynamic Memory.

Konfigurasi SQL Server

Lakukan tugas konfigurasi berikut setelah Anda menginstal SQL Server di Linux untuk mencapai performa terbaik untuk aplikasi Anda.

Praktik Terbaik

Gunakan AFINITAS PROSES untuk simpul dan/atau CPU

Gunakan ALTER SERVER CONFIGURATION untuk mengatur PROCESS AFFINITY semua NUMANODECPU dan/atau yang Anda gunakan untuk SQL Server (yang biasanya untuk semua NODE dan CPU) pada OS Linux. Afinitas prosesor membantu menjaga perilaku Penjadwalan Linux dan SQL yang efisien. NUMANODE Menggunakan opsi ini adalah metode paling sederhana. Gunakan PROCESS AFFINITY meskipun Anda hanya memiliki satu Simpul NUMA di komputer Anda. Untuk informasi selengkapnya tentang cara mengatur PROCESS AFFINITY, lihat artikel ALTER SERVER CONFIGURATION .

Mengonfigurasi beberapa tempdb file data

Karena penginstalan SQL Server di Linux tidak menawarkan opsi untuk mengonfigurasi beberapa tempdb file, kami sarankan Anda mempertimbangkan untuk membuat beberapa tempdb file data setelah penginstalan. Untuk informasi selengkapnya, lihat panduan dalam artikel, Rekomendasi untuk mengurangi ketidakcocokan alokasi di database tempdb SQL Server.

Konfigurasi tingkat lanjut

Rekomendasi berikut adalah pengaturan konfigurasi opsional yang mungkin Anda pilih untuk dilakukan setelah penginstalan SQL Server di Linux. Pilihan ini didasarkan pada persyaratan beban kerja dan konfigurasi OS Linux Anda.

Mengatur batas memori dengan mssql-conf

Untuk memastikan Ada cukup memori fisik gratis untuk OS Linux, proses SQL Server hanya menggunakan 80% DARI RAM fisik secara default. Untuk beberapa sistem dengan RAM fisik dalam jumlah besar, 20% mungkin merupakan jumlah yang signifikan. Misalnya, pada sistem dengan RAM 1 TB, pengaturan default akan membuat sekitar 200 GB RAM tidak digunakan. Dalam situasi ini, Anda mungkin ingin mengonfigurasi batas memori ke nilai yang lebih tinggi. Lihat dokumentasi pada alat mssql-conf dan pengaturan memory.memorylimitmb yang mengontrol memori yang terlihat oleh SQL Server (dalam unit MB).

Saat mengubah pengaturan ini, berhati-hatilah untuk tidak mengatur nilai ini terlalu tinggi. Jika Anda tidak meninggalkan cukup memori, Anda dapat mengalami masalah dengan OS Linux dan aplikasi Linux lainnya.