Praktik terbaik performa: Penyimpanan, kernel, CPU, dan jaringan untuk SQL Server on Linux

Berlaku untuk:SQL Server di Linux

Artikel ini membahas rekomendasi konfigurasi sistem operasi dan perangkat keras untuk memaksimalkan performa untuk SQL Server on Linux, termasuk penyimpanan, kernel, CPU, dan pengaturan jaringan.

Note

Untuk konfigurasi memori dan batas memori kontainer, lihat Praktik terbaik performa: SQL Server memori di Linux.

Rekomendasi konfigurasi penyimpanan

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

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

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

Untuk SQL Server on Linux yang disebarkan pada Azure Virtual Machines, pertimbangkan untuk menggunakan RAID perangkat lunak untuk memastikan IOPS dan throughput yang sesuai. Untuk pertimbangan penyimpanan saat mengonfigurasi SQL Server pada komputer virtual Azure, lihat Mengonfigurasi penyimpanan untuk SQL Server pada VM Azure.

Contoh berikut menunjukkan cara membuat RAID perangkat lunak di Linux di Azure Virtual Machine. Gunakan 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 VM: empat untuk menghosting file data, dua untuk log transaksi, dan dua 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, gunakan konfigurasi RAID. Unit stripe sistem file yang disebarkan (sunit) dan lebar stripe cocok dengan geometri RAID. Misalnya, contoh berikut menunjukkan konfigurasi 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 dengan enam drive dan stripe 64 KB. Seperti yang Anda 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.

SQL Server mendukung sistem file ext4 dan XFS untuk menghosting database, log transaksi, dan file lain seperti file titik pemeriksaan untuk OLTP dalam memori di SQL Server. Gunakan sistem file XFS untuk menghosting data SQL Server dan file log transaksi.

Format volume menggunakan sistem file XFS:

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

Anda dapat mengonfigurasi sistem file XFS agar tidak peka huruf besar/kecil saat Membuat dan memformat volume XFS. Konfigurasi ini tidak sering digunakan dalam ekosistem Linux tetapi Anda dapat menggunakannya karena alasan kompatibilitas.

Misalnya, jalankan perintah berikut. Gunakan -n version=ci untuk mengonfigurasi sistem file XFS agar tidak peka huruf besar/kecil.

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

Rekomendasi sistem berkas untuk memori tetap

Untuk konfigurasi sistem file pada perangkat Memori Persisten, atur alokasi blok untuk sistem file yang mendasar ke 2 MB. Untuk informasi selengkapnya, lihat Pertimbangan teknis.

Buka batasan file

Lingkungan produksi Anda mungkin memerlukan lebih banyak koneksi daripada batas default file yang terbuka sebesar 1024 (1.024). Anda dapat mengatur batas lembut dan keras ke 1048576 (1.048.576). Misalnya, di RHEL, edit /etc/security/limits.d/99-mssql-server.conf file agar memiliki nilai berikut:

mssql - nofile 1048576

Note

Pengaturan ini tidak berlaku untuk layanan SQL Server yang dimulai oleh systemd. Untuk informasi selengkapnya, lihat Cara menetapkan batasan untuk layanan di RHEL dan systemd.

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

Untuk memastikan bahwa sistem secara otomatis memasang ulang drive tersebut setelah dimulai ulang, tambahkan drive tersebut ke file /etc/fstab. Gunakan UUID (Pengidentifikasi Unik Universal) dalam /etc/fstab untuk 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 berikut menunjukkan cara mengaktifkan opsi noatime untuk volume yang dipasang di Azure Virtual Machine.

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)

Beberapa distribusi Linux yang didukung menerapkan Forced Unit Access (FUA) di tingkat subsistem I/O untuk memastikan durabilitas data. SQL Server memanfaatkan kemampuan ini untuk memberikan performa I/O yang efisien dan andal untuk beban kerja Linux. Untuk informasi selengkapnya tentang dukungan FUA di seluruh distribusi Linux dan efeknya pada SQL Server, lihat SQL Server di Linux: Internal Forced Unit Access (FUA).

Dukungan untuk FUA di subsistem I/O diperkenalkan di SUSE Linux Enterprise Server 12 SP5, Red Hat Enterprise Linux 8.0, dan Ubuntu 18.04. Di SQL Server 2017 (14.x) CU 6 dan versi yang lebih baru, gunakan konfigurasi berikut untuk mengaktifkan I/O berkinerja tinggi dan efisien dengan FUA di 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)

    Note

    Mulai SQL Server 2025 (17.x), SUSE Linux Enterprise Server (SLES) tidak didukung.

  • Sistem file XFS untuk penyimpanan SQL Server, pada kernel Linux 4.18 atau versi yang lebih baru.

  • sistem file ext4 untuk penyimpanan SQL Server, pada kernel Linux 5.6 atau versi yang lebih baru.

    Note

    Gunakan sistem file XFS untuk menghosting data SQL Server dan file log transaksi ketika versi kernel Linux lebih rendah dari 5.6. Dimulai dengan kernel versi 5.6, Anda dapat memilih antara XFS dan ext4 berdasarkan persyaratan spesifik Anda.

  • Subsistem penyimpanan dan 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, gunakan konfigurasi yang direkomendasikan 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 atau ext4 dan harus mendukung FUA (ext4 tidak mendukung FUA pada kernel Linux yang lebih lama dari versi 5.6). Sebelum mengaktifkan pengaturan ini, 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 sebelumnya terpenuhi, gunakan 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 secara otomatis mengonfigurasi beberapa pengaturan kernel dan CPU (kecuali untuk C-States). Dimulai dengan RHEL 8.0, Anda dapat menggunakan profil TuneD bernama mssql yang menawarkan penyetelan terkait performa Linux yang lebih halus untuk beban kerja SQL Server. Profil ini dibangun berdasarkan profil performa throughput RHEL. mssql Karena profil mengekspos semua pengaturannya, Anda dapat meninjau dan menyesuaikannya untuk distribusi Linux atau rilis RHEL lainnya yang tidak menyertakan profil ini.

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

Note

Mulai SQL Server 2025 (17.x), SUSE Linux Enterprise Server (SLES) tidak didukung.

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 menggunakan perintah berikut:

tuned-adm active

Atau:

tuned-adm list

Rekomendasi pengaturan CPU

Tabel berikut ini menyediakan rekomendasi untuk pengaturan CPU:

Setting Value Informasi selengkapnya
Pengendali frekuensi CPU kinerja Lihat perintah cpupower
ENERGY_PERF_BIAS kinerja 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

Saat Anda menggunakan TuneD seperti yang dijelaskan, TuneD secara otomatis mengonfigurasi gubernur frekuensi CPU, serta pengaturan ENERGY_PERF_BIAS dan min_perf_pct. Ini menggunakan profil performa throughput sebagai basis untuk mssql profil. Anda harus mengonfigurasi parameter C-States secara manual sesuai dengan dokumentasi yang disediakan oleh Linux atau distributor sistem Anda.

Rekomendasi pengaturan disk

Tabel berikut ini menyediakan rekomendasi untuk pengaturan disk:

Setting Value 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 ke 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 yang 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 pada Documentation for /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 dari penulisan penembolokan Linux dengan memungkinkan penembolokan yang cukup besar sambil mengatur pengosongan.

  • kernel.sched_*: Nilai parameter ini mewakili rekomendasi saat ini untuk mengubah algoritma Completely Fair Scheduling (CFS) di kernel Linux. Mereka meningkatkan throughput panggilan I/O jaringan dan penyimpanan melalui preemasi antar proses dan kelanjutan utas.

Menggunakan profil TuneD mengonfigurasi pengaturan mssql, vm.swappiness, dan vm.dirty_*. Anda harus mengonfigurasi pengaturan disk readahead secara manual dengan menggunakan blockdev perintah untuk setiap perangkat.

Pengaturan kernel untuk penyeimbangan NUMA otomatis pada sistem NUMA multinode

Jika Anda menginstal SQL Server pada sistem NUMA multinode, 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 multinode:

sysctl -w kernel.numa_balancing=0

mssql Profil TuneD digunakan untuk mengonfigurasi opsi kernel.numa_balancing.

Pengaturan kernel untuk ruang alamat virtual

Pengaturan vm.max_map_count default adalah 65536 (65.536), yang mungkin tidak cukup tinggi untuk penginstalan SQL Server. Karena itu, ubah nilai vm.max_map_count menjadi setidaknya 262144 (262,144) untuk deployment SQL Server. Untuk penyetelan lebih lanjut parameter kernel ini, lihat bagian Usulan pengaturan Linux menggunakan profil TuneD mssql . Nilai maksimum untuk vm.max_map_count adalah 2147483647 (2.147.483.647).

sysctl -w vm.max_map_count=1600000

mssql Profil TuneD digunakan untuk mengonfigurasi opsi vm.max_map_count.

Biarkan Halaman Besar Transparan (THP) diaktifkan

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

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

Atau ubah profil mssql TuneD dengan baris berikut:

vm.transparent_hugepages=madvise

Dan pastikan mssql profil aktif setelah modifikasi:

tuned-adm off
tuned-adm profile mssql

mssql Profil TuneD digunakan untuk mengonfigurasi opsi transparent_hugepage.

Rekomendasi pengaturan jaringan

Bersama dengan rekomendasi penyimpanan dan CPU, pertimbangkan rekomendasi khusus jaringan berikut. NIC yang berbeda menawarkan pengaturan yang berbeda. Lihat vendor NIC untuk panduan untuk setiap opsi ini. Uji dan konfigurasikan pengaturan ini pada lingkungan pengembangan sebelum menerapkannya ke lingkungan produksi. Opsi berikut dijelaskan dengan contoh, dan perintah yang digunakan khusus untuk jenis NIC dan vendor.

  1. Mengonfigurasi ukuran buffer pada port jaringan. Dalam contoh, 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 preset maksimum 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 besar. 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 cara itu mengaktifkan bingkai jumbo dapat meningkatkan performa. Setelah Anda mengaktifkan bingkai jumbo, sambungkan ke SQL Server dan ubah ukuran paket jaringan menjadi 8060 menggunakan sp_configure, seperti yang ditunjukkan dalam contoh berikut:

    # 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. Konfigurasikan coalescing IRQ adaptif. Secara default, atur port untuk koalescing RX/TX IRQ adaptif, yang berarti pengiriman interupsi disesuaikan untuk meningkatkan waktu respons ketika tingkat paket rendah dan meningkatkan throughput ketika tingkat paket tinggi. Pengaturan ini mungkin tidak tersedia di seluruh infrastruktur jaringan Anda, jadi tinjau infrastruktur jaringan yang ada dan konfirmasikan bahwa pengaturan ini didukung. Contohnya adalah untuk NIC bernama eth0, yang merupakan NIC berbasis Intel:

    Atur port untuk penggabungan IRQ RX/TX adaptif:

    ethtool -C eth0 adaptive-rx on
    ethtool -C eth0 adaptive-tx on
    

    Konfirmasi pengaturan:

    ethtool -c eth0
    

    Note

    Untuk perilaku yang dapat diprediksi di lingkungan berkinerja tinggi, seperti lingkungan pengujian performa, nonaktifkan penggabungan IRQ RX/TX adaptif lalu atur penggabungan interupsi RX/TX secara spesifik. Lihat contoh perintah untuk menonaktifkan coalescing IRQ RX/TX lalu secara khusus mengatur nilai:

    Nonaktifkan penggabungan IRQ RX/TX adaptif.

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

    Konfirmasi perubahan:

    ethtool -c eth0
    

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

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

    Konfirmasi perubahan:

    ethtool -c eth0
    
  4. Aktifkan penskalaan sisi terima (RSS) dan secara bawaan, gabungkan sisi RX dan TX dari antrean RSS. Ada skenario khusus, saat bekerja dengan Dukungan Microsoft, di mana menonaktifkan RSS juga 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. Mengonfigurasi 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 irqbalance pengaturan. Anda dapat mengoptimalkan pengaturan afinitas IRQ port NIC dengan menggunakan pengetahuan Anda tentang topologi server, menonaktifkan irqbalance, 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 simpul NUMA yang secara fisik menghosting 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
    

    Tambahkan pengoptimalan IRQ coalescing.

    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. Verifikasi kecepatan NIC. Setelah Anda membuat perubahan sebelumnya, verifikasi kecepatan NIC untuk memastikannya sesuai dengan harapan Anda dengan 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 penyimpanan blok. Metode penjadwalan ini memungkinkan performa lapisan blok menskalakan dengan baik dengan solid-state drive (SSD) dan sistem multicore yang cepat. Periksa dokumentasi untuk melihat apakah distribusi Linux Anda mengaktifkannya secara default. Dalam kebanyakan kasus lain, Anda dapat mem-boot kernel dengan scsi_mod.use_blk_mq=y untuk mengaktifkannya. Dokumentasi untuk distribusi Linux Anda mungkin memiliki panduan lebih lanjut tentang pengaturan ini. Pengaturan ini konsisten dengan kernel Linux upstream.

  • Karena multipath I/O sering digunakan untuk deployment SQL Server, konfigurasikan target multiqueue Device Mapper (DM) agar menggunakan infrastruktur blk-mq dengan mengaktifkan opsi boot kernel dm_mod.use_blk_mq=y. Nilai defaultnya adalah n (dinonaktifkan). Pengaturan ini mengurangi overhead penguncian pada lapisan DM saat perangkat SCSI yang mendasar menggunakan blk-mq. 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. Jika Anda berencana untuk menjalankan kontainer, aktifkan ruang pertukaran di tingkat host.

Komputer virtual dan memori dinamis

Jika Anda menjalankan SQL Server on Linux di komputer virtual, pastikan Anda memilih opsi yang 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

Praktik berikut berlaku untuk semua penyebaran SQL Server on Linux.

Gunakan AFINITAS PROSES untuk simpul dan CPU

Gunakan ALTER SERVER CONFIGURATION untuk menetapkan PROCESS AFFINITY untuk semua NUMANODEs dan CPU yang Anda gunakan untuk SQL Server (yang biasanya berlaku untuk semua NODEs dan CPU) pada sistem operasi 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 ALTER SERVER CONFIGURATION artikel.

Mengonfigurasi beberapa tempdb berkas data

Karena penginstalan SQL Server on Linux tidak menawarkan opsi untuk mengonfigurasi beberapa tempdb file, pertimbangkan untuk membuat beberapa tempdb file data setelah penginstalan. Untuk informasi selengkapnya, lihat Rekomendasi untuk mengurangi ketidakcocokan alokasi dalam database tempdb SQL Server.

Konfigurasi tingkat lanjut

Untuk opsi konfigurasi memori termasuk mssql-conf batas memori, pengaturan cgroup, contoh memori kontainer Docker, dan pertimbangan ruang pertukaran, lihat Praktik terbaik performa: SQL Server memori di Linux.