Konfigurasi server: masker afinitas
Berlaku untuk: SQL Server
Catatan
Fitur ini akan dihapus dalam versi SQL Server yang akan datang. Hindari menggunakan fitur ini dalam pekerjaan pengembangan baru, dan rencanakan untuk memodifikasi aplikasi yang saat ini menggunakan fitur ini. Gunakan ALTER SERVER CONFIGURATION sebagai gantinya.
Untuk melakukan multitugas, Windows terkadang memindahkan utas proses di antara prosesor yang berbeda. Meskipun efisien dari sudut pandang sistem operasi, aktivitas ini dapat mengurangi performa SQL Server di bawah beban sistem berat, karena setiap cache prosesor berulang kali dimuat ulang dengan data. Menetapkan prosesor ke utas tertentu dapat meningkatkan performa dalam kondisi ini dengan menghilangkan beban ulang prosesor; hubungan seperti itu antara utas dan prosesor disebut afinitas prosesor.
SQL Server mendukung afinitas prosesor dengan dua opsi masker afinitas: affinity mask
(juga dikenal sebagai masker afinitas CPU) dan affinity I/O mask
. Untuk informasi selengkapnya tentang affinity I/O mask option
, lihat Mengonfigurasi opsi konfigurasi server mask I/O afinitas. Dukungan afinitas CPU dan I/O untuk server dengan prosesor 33 hingga 64 mengharuskan Anda juga menggunakan opsi konfigurasi server masker afinitas64 dan afinitas64 I/O .
Catatan
Dukungan afinitas untuk server dengan prosesor 33 hingga 64 hanya tersedia pada sistem operasi 64-bit.
Opsi affinity mask
, yang ada dalam rilis SQL Server sebelumnya, secara dinamis mengontrol afinitas CPU.
Di SQL Server, affinity mask
opsi dapat dikonfigurasi tanpa memerlukan restart instans SQL Server. Saat Anda menggunakan sp_configure,
, Anda harus menjalankan salah satu RECONFIGURE
atau RECONFIGURE WITH OVERRIDE
setelah mengatur opsi konfigurasi. Saat Anda menggunakan SQL Server Express, mengubah affinity mask
opsi memang memerlukan mulai ulang.
Perubahan pada masker afinitas terjadi secara dinamis, memungkinkan startup sesuai permintaan dan penonaktifan penjadwal CPU yang mengikat utas proses dalam SQL Server. Ini dapat terjadi saat kondisi berubah pada server. Misalnya, jika instans baru SQL Server ditambahkan ke server, mungkin perlu untuk membuat penyesuaian pada affinity mask
opsi untuk mendistribusikan ulang beban prosesor.
Modifikasi pada bitmask afinitas memerlukan SQL Server untuk mengaktifkan penjadwal CPU baru dan menonaktifkan penjadwal CPU yang ada. Batch baru kemudian dapat diproses pada penjadwal baru atau yang tersisa.
Untuk memulai penjadwal CPU baru, SQL Server membuat penjadwal baru dan menambahkannya ke daftar penjadwal standarnya. Penjadwal baru dianggap hanya untuk batch masuk baru. Batch saat ini terus berjalan pada penjadwal yang sama. Pekerja bermigrasi ke penjadwal baru saat mereka membebaskan, atau saat pekerja baru dibuat.
Mematikan penjadwal mengharuskan semua batch pada penjadwal menyelesaikan aktivitas dan keluar. Penjadwal yang dimatikan ditandai sebagai offline sehingga tidak ada batch baru yang dijadwalkan di dalamnya.
Baik Anda menambahkan atau menghapus penjadwal baru, tugas sistem permanen seperti monitor kunci, titik pemeriksaan, utas tugas sistem (memproses DTC), dan proses sinyal terus berjalan pada penjadwal saat server beroperasi. Tugas sistem permanen ini tidak dimigrasikan secara dinamis. Untuk mendistribusikan ulang beban prosesor untuk tugas sistem ini di seluruh penjadwal, perlu untuk memulai ulang instans SQL Server. Jika SQL Server mencoba mematikan penjadwal yang terkait dengan tugas sistem permanen, tugas terus berjalan pada penjadwal offline (tidak ada migrasi). Penjadwal ini terikat pada prosesor dalam masker afinitas yang dimodifikasi dan tidak menempatkan beban apa pun pada prosesor yang terikat sebelum perubahan. Memiliki penjadwal offline ekstra seharusnya tidak secara signifikan memengaruhi beban sistem. Jika ya, menghidupkan ulang server database diperlukan untuk mengonfigurasi ulang tugas-tugas ini pada penjadwal yang tersedia dengan masker afinitas yang dimodifikasi.
Jangan atur affinity mask
nilai konfigurasi dan affinity I/O mask
SQL Server untuk menggunakan CPU yang sama. Performa mungkin menderita jika Anda memilih untuk mengikat prosesor untuk penjadwalan utas pekerja SQL Server dan untuk pemrosesan I/O. Oleh karena itu, pastikan bahwa nilai konfigurasi tidak diatur untuk prosesor yang sama. Rekomendasi yang sama berlaku untuk affinity64 mask
dan affinity64 I/O mask
. Untuk memastikan bahwa affinity mask
tidak tumpang tindih dengan affinity I/O mask
, perintah KONFIGURASI ULANG memverifikasi bahwa Afinitas CPU dan I/O normal saling eksklusif. Jika tidak, pesan kesalahan dilaporkan ke sesi klien dan ke log kesalahan SQL Server, menunjukkan bahwa pengaturan seperti itu tidak disarankan.
Msg 5834, Level 16, State 1, Line 1
The affinity mask specified conflicts with the IO affinity mask specified. Use the override option to force this configuration.
Opsi berjalan RECONFIGURE WITH OVERRIDE
memungkinkan afinitas CPU dan I/O tumpang tindih dan tidak saling eksklusif.
Tugas afinitas I/O (seperti penulis malas dan penulis log) dipengaruhi langsung oleh affinity I/O mask
. Jika tugas penulis malas dan penulis log tidak terikat, mereka mengikuti aturan yang sama yang ditentukan untuk tugas permanen lainnya seperti monitor kunci atau titik pemeriksaan.
Jika Anda menentukan masker afinitas yang mencoba memetakan ke CPU yang tidak ada, RECONFIGURE
perintah melaporkan pesan kesalahan ke sesi klien dan log kesalahan SQL Server. RECONFIGURE WITH OVERRIDE
Menggunakan opsi tidak berpengaruh dalam kasus ini, dan kesalahan konfigurasi yang sama dilaporkan lagi.
Anda juga dapat mengecualikan aktivitas SQL Server dari penetapan beban kerja tertentu oleh sistem operasi Windows. Jika Anda mengatur bit yang mewakili prosesor ke 1
, prosesor tersebut dipilih oleh Mesin Database SQL Server untuk penetapan utas. Saat Anda mengatur affinity mask
ke 0
(default), algoritma penjadwalan Microsoft Windows mengatur afinitas utas. Ketika Anda mengatur affinity mask
ke nilai bukan nol apa pun, afinitas SQL Server menginterpretasikan nilai sebagai bitmask yang menentukan prosesor tersebut memenuhi syarat untuk pemilihan.
Dengan memisahkan utas SQL Server agar tidak berjalan pada prosesor tertentu, Microsoft Windows dapat mengevaluasi penanganan proses sistem dengan lebih baik khusus untuk Windows. Misalnya, pada server 8-CPU yang menjalankan dua instans SQL Server (instans A dan B), administrator sistem dapat menggunakan affinity mask
opsi untuk menetapkan set pertama 4 CPU ke instans A dan set kedua 4 ke instans B. Untuk mengonfigurasi lebih dari 32 prosesor, atur dan affinity mask
affinity64 mask
. Nilai untuk affinity mask
adalah sebagai berikut:
Byte dalam masker | Jumlah CPU |
---|---|
1-byte | Hingga 8 CPU |
2-byte | Hingga 16 CPU |
3-byte | Hingga 24 CPU |
4-byte | Hingga 32 CPU |
Untuk mencakup lebih dari 32 CPU, konfigurasikan 4 byte affinity mask
untuk 32 CPU pertama dan hingga 4 byte affinity64 mask
untuk CPU yang tersisa.
Karena mengatur afinitas prosesor SQL Server adalah operasi khusus, gunakan hanya jika diperlukan. Dalam kebanyakan kasus, afinitas Windows default memberikan performa terbaik. Pertimbangkan persyaratan CPU untuk aplikasi lain saat mengatur masker afinitas. Untuk informasi selengkapnya, lihat dokumentasi sistem operasi Windows Anda.
Catatan
Anda dapat menggunakan Monitor Proses untuk melihat dan menganalisis penggunaan prosesor individual.
Saat menentukan affinity I/O mask
opsi , Anda harus menggunakannya dengan affinity mask
opsi konfigurasi. Namun, seperti yang disebutkan sebelumnya, jangan aktifkan CPU yang sama di affinity mask
sakelar dan affinity I/O mask
opsi . Bit yang sesuai dengan setiap CPU harus berada di salah satu dari tiga status ini:
0
affinity mask
dalam opsi danaffinity I/O mask
opsi .1
affinity mask
dalam opsi dan0
dalamaffinity I/O mask
opsi .0
affinity mask
dalam opsi dan1
dalamaffinity I/O mask
opsi .
Perhatian
Jangan mengonfigurasi afinitas CPU dalam sistem operasi Windows dan juga mengonfigurasi affinity mask
di SQL Server. Pengaturan ini mencoba mencapai hasil yang sama, dan jika konfigurasi tidak konsisten, Anda mungkin memiliki hasil yang tidak dapat diprediksi. Afinitas CPU SQL Server paling baik dikonfigurasi menggunakan sp_configure
opsi di SQL Server.
Contoh
Sebagai contoh pengaturan affinity mask
opsi, jika prosesor 1, 2, dan 5 dipilih sebagai tersedia dengan bit dalam posisi 1, 2, dan 5 diatur ke 1
dan bit 0, 3, 4, 6, dan 7 diatur ke 0
, nilai 0x26
heksadesimal (setara 38
desimal ) harus digunakan. Beri nomor posisi bit dari kanan ke kiri.
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
EXEC sp_configure 'affinity mask', 38;
RECONFIGURE;
GO
Tabel berikut ini memperlihatkan affinity mask
nilai untuk sistem 8-CPU.
Nilai desimal | Masker bit biner | Mengizinkan utas SQL Server pada prosesor |
---|---|---|
1 |
00000001 |
0 |
3 |
00000011 |
0 dan 1 |
7 |
00000111 |
0, 1, dan 2 |
15 |
00001111 |
0, 1, 2, dan 3 |
31 |
00011111 |
0, 1, 2, 3, dan 4 |
63 |
00111111 |
0, 1, 2, 3, 4, dan 5 |
127 |
01111111 |
0, 1, 2, 3, 4, 5, dan 6 |
255 |
11111111 |
0, 1, 2, 3, 4, 5, 6, dan 7 |
Opsi ini affinity mask
adalah opsi lanjutan. Jika Anda menggunakan prosedur tersimpan sp_configure
sistem untuk mengubah pengaturan, Anda hanya dapat mengubah affinity mask
saat show advanced options
diatur ke 1
. Setelah perintah Transact-SQL RECONFIGURE
dijalankan, pengaturan baru segera berlaku tanpa memerlukan mulai ulang instans SQL Server.
Akses memori non-seragam (NUMA)
Saat menggunakan akses memori non-seragam berbasis perangkat keras (NUMA) dan affinity mask
diatur, setiap penjadwal dalam simpul mengikat ke CPU-nya sendiri. affinity mask
Ketika tidak diatur, setiap penjadwal terikat ke grup CPU dalam simpul NUMA dan penjadwal yang dipetakan ke simpul N1
NUMA dapat menjadwalkan pekerjaan pada CPU apa pun di simpul, tetapi tidak pada CPU yang terkait dengan simpul lain.
Setiap operasi yang berjalan pada satu simpul NUMA hanya dapat menggunakan halaman buffer dari simpul tersebut. Ketika operasi dijalankan secara paralel pada CPU dari beberapa simpul, memori dapat digunakan dari simpul apa pun yang terlibat.
Masalah lisensi
Afinitas dinamis dibatasi erat oleh lisensi CPU. SQL Server tidak mengizinkan konfigurasi affinity mask
opsi apa pun yang melanggar kebijakan lisensi.
Startup
Jika masker afinitas tertentu melanggar kebijakan lisensi selama startup SQL Server atau selama lampiran database, lapisan mesin menyelesaikan proses startup atau operasi lampiran/pemulihan database, lalu mengatur ulang sp_configure
nilai eksekusi untuk masker afinitas menjadi nol, mengeluarkan pesan kesalahan ke log kesalahan SQL Server.
Konfigurasi ulang
Jika masker afinitas tertentu melanggar kebijakan lisensi saat menjalankan perintah Transact-SQL RECONFIGURE
, pesan kesalahan dilaporkan ke sesi klien dan ke log kesalahan SQL Server, mengharuskan administrator database untuk mengonfigurasi ulang masker afinitas. Tidak ada RECONFIGURE WITH OVERRIDE
perintah yang diterima dalam kasus ini.