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
- Pengaturan kernel dan CPU untuk performa tinggi
- Konfigurasi 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 1.024. Anda dapat mengatur batas lembut dan keras 1.048.576. Misalnya, di RHEL, edit /etc/security/limits.d/99-mssql-server.conf
file agar memiliki nilai berikut:
mssql - nofile 1048576
Catatan
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/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:
Aktifkan Bendera Pelacakan 3979 sebagai parameter startup.
Gunakan mssql-conf untuk mengonfigurasi
control.writethrough = 1
dancontrol.alternatewritethrough = 0
.
Untuk hampir semua konfigurasi lain yang tidak memenuhi kondisi sebelumnya, konfigurasi yang direkomendasikan adalah sebagai berikut:
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.
Gunakan mssql-conf untuk mengonfigurasi
control.writethrough = 1
dancontrol.alternatewritethrough = 1
.
Dukungan FUA untuk kontainer SQL Server yang disebarkan di Kubernetes
SQL Server harus menggunakan penyimpanan yang dipasang tetap, dan bukan
overlayfs
.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>
adalahPersistentVolumeClaim
:kubectl describe pv <pvc-name>
Dalam output, cari
fstype
yang diatur ke XFS.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.
Aktifkan Bendera Pelacakan 3979 sebagai parameter startup.
Gunakan mssql-conf untuk mengonfigurasi
control.writethrough = 1
dancontrol.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 | 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 |
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 |
---|---|---|
Diska 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/ - #swappinessvm.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.swappiness
pengaturan , 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.
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) dantx
(kirim) ke 4 KB:ethtool -G eth0 rx 4096 tx 4096
Periksa apakah nilai dikonfigurasi dengan benar:
ethtool -g eth0
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
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:Atur port untuk koalescing IRQ RX/TX adaptif:
ethtool -C eth0 adaptive-rx on ethtool -C eth0 adaptive-tx on
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 danirq
.rx-usecs
menentukan berapa banyak mikro detik setelah setidaknya 1 paket diterima sebelum menghasilkan interupsi. Parameterirq
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
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
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
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 mengaktifkandm_mod.use_blk_mq=y
opsi boot kernel. Nilai defaultnya adalahn
(dinonaktifkan). Pengaturan ini, ketika perangkat SCSI yang mendasar menggunakanblk-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 NUMANODE
CPU 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.