Konfigurasi server: utas pekerja maks
Berlaku untuk: SQL Server
Artikel ini menjelaskan cara mengonfigurasi max worker threads
opsi konfigurasi server di SQL Server dengan menggunakan SQL Server Management Studio atau Transact-SQL. Opsi ini max worker threads
mengonfigurasi jumlah utas pekerja yang tersedia di seluruh SQL Server untuk memproses permintaan kueri, masuk, keluar, dan permintaan aplikasi serupa.
SQL Server menggunakan layanan utas asli dari sistem operasi untuk memastikan kondisi berikut:
- Satu atau beberapa utas secara bersamaan mendukung setiap jaringan yang didukung SQL Server.
- Satu utas menangani titik pemeriksaan database.
- Kumpulan utas menangani semua pengguna.
Nilai default untuk max worker threads
adalah 0. Ini memungkinkan SQL Server untuk secara otomatis mengonfigurasi jumlah utas pekerja saat startup. Pengaturan default adalah yang terbaik untuk sebagian besar sistem. Namun, tergantung pada konfigurasi sistem Anda, pengaturan max worker threads
ke nilai tertentu terkadang meningkatkan performa.
Batasan
Jumlah permintaan kueri aktual dapat melebihi nilai yang ditetapkan dalam max worker threads
hal ini SQL Server mengumpulkan utas pekerja sehingga utas pekerja berikutnya yang tersedia dapat menangani permintaan. Utas pekerja ditetapkan hanya untuk permintaan aktif dan dirilis setelah permintaan dilayankan. Ini terjadi bahkan jika sesi/koneksi pengguna tempat permintaan dibuat tetap terbuka.
max worker threads
Opsi konfigurasi server tidak membatasi semua utas yang mungkin muncul di dalam mesin. Utas sistem yang diperlukan untuk tugas-tugas seperti LazyWriter, Checkpoint, Log Writer, Service Broker, Lock Manager, atau lainnya diluncurkan di luar batas ini. Grup Ketersediaan menggunakan beberapa utas pekerja dari dalam max worker thread limit
tetapi juga menggunakan utas sistem (lihat Penggunaan Utas menurut Grup Ketersediaan). Jika jumlah utas yang dikonfigurasi terlampaui, kueri berikut ini menyediakan informasi tentang tugas sistem yang menelurkan utas tambahan.
SELECT s.session_id,
r.command,
r.status,
r.wait_type,
r.scheduler_id,
w.worker_address,
w.is_preemptive,
w.state,
t.task_state,
t.session_id,
t.exec_context_id,
t.request_id
FROM sys.dm_exec_sessions AS s
INNER JOIN sys.dm_exec_requests AS r
ON s.session_id = r.session_id
INNER JOIN sys.dm_os_tasks AS t
ON r.task_address = t.task_address
INNER JOIN sys.dm_os_workers AS w
ON t.worker_address = w.worker_address
WHERE s.is_user_process = 0;
Rekomendasi
Opsi ini adalah opsi lanjutan dan harus diubah hanya oleh administrator database berpengalaman atau profesional SQL Server bersertifikat. Jika Anda menduga bahwa ada masalah performa, mungkin itu bukan ketersediaan utas pekerja. Penyebabnya lebih mungkin terkait dengan aktivitas yang menempati utas pekerja dan tidak merilisnya. Contohnya termasuk kueri yang berjalan lama atau hambatan pada sistem (I/O, pemblokiran, penantian kait, tunggu jaringan) yang menyebabkan kueri menunggu lama. Yang terbaik adalah menemukan akar penyebab masalah performa sebelum Anda mengubah pengaturan utas pekerja maks. Untuk informasi selengkapnya tentang menilai performa, lihat Memantau dan Menyetel Performa.
Pengumpulan utas membantu mengoptimalkan performa saat sejumlah besar klien terhubung ke server. Biasanya, utas sistem operasi terpisah dibuat untuk setiap permintaan kueri. Namun, dengan ratusan koneksi ke server, menggunakan satu utas per permintaan kueri dapat menggunakan sumber daya sistem dalam jumlah besar. Opsi ini max worker threads
memungkinkan SQL Server untuk membuat kumpulan utas pekerja untuk melayani sejumlah besar permintaan kueri, yang meningkatkan performa.
Tabel berikut menunjukkan jumlah utas pekerja maks yang dikonfigurasi secara otomatis (saat nilai diatur ke 0), berdasarkan berbagai kombinasi CPU logis, arsitektur komputer, dan versi SQL Server, menggunakan rumus: Default Max Workers + ((CPU logis - 4) * Pekerja per CPU).
Jumlah CPU logis | Komputer 32-bit (hingga SQL Server 2014 (12.x)) | Komputer 64-bit (hingga SQL Server 2016 (13.x) SP1) | Komputer 64-bit (dimulai dengan SQL Server 2016 (13.x) SP2 dan SQL Server 2017 (14.x)) |
---|---|---|---|
<=4 | 256 | 512 | 512 |
8 | 288 | 576 | 576 |
16 | 352 | 704 | 704 |
32 | 480 | 960 | 960 |
64 | 736 | 1472 | 1472 |
128 | 1248 | 2496 | 4480 |
256 | 2272 | 4544 | 8576 |
Hingga SQL Server 2016 (13.x) dengan Paket Layanan 1, Pekerja per CPU hanya bergantung pada arsitektur (32-bit atau 64-bit):
Jumlah CPU logis | Komputer 32-bit 1 | Komputer 64-bit |
---|---|---|
<=4 | 256 | 512 |
> 4 | 256 + ((CPU logis - 4) * 8) | 512 2 + ((CPU logis - 4) * 16) |
Dimulai dengan SQL Server 2016 (13.x) SP2 dan SQL Server 2017 (14.x), Pekerja per CPU bergantung pada arsitektur dan jumlah prosesor (antara 4 dan 64, atau lebih besar dari 64):
Jumlah CPU logis | Komputer 32-bit 1 | Komputer 64-bit |
---|---|---|
<=4 | 256 | 512 |
> 4 dan <= 64 | 256 + ((CPU logis - 4) * 8) | 512 2 + ((CPU logis - 4) * 16) |
> 64 | 256 + ((CPU logis - 4) * 32) | 512 2 + ((CPU logis - 4) * 32) |
1 Dimulai dengan SQL Server 2016 (13.x), SQL Server tidak dapat lagi diinstal pada sistem operasi 32-bit. Nilai komputer 32-bit tercantum untuk bantuan pelanggan yang menjalankan SQL Server 2014 (12.x) dan yang lebih lama. Kami merekomendasikan 1.024 sebagai jumlah maksimum utas pekerja untuk instans SQL Server yang berjalan di komputer 32-bit.
2 Dimulai dengan SQL Server 2017 (14.x), nilai Pekerja Maks Default dibagi 2 untuk mesin dengan memori kurang dari 2 GB.
Tip
Untuk informasi selengkapnya tentang menggunakan lebih dari 64 CPU logis, lihat Praktik Terbaik untuk menjalankan SQL Server di komputer yang memiliki lebih dari 64 CPU.
Ketika semua utas pekerja aktif dengan kueri yang berjalan lama, SQL Server mungkin tampak tidak responsif sampai utas pekerja selesai dan tersedia. Meskipun perilaku ini bukan cacat, kadang-kadang bisa tidak diinginkan. Jika proses tampaknya tidak responsif dan tidak ada kueri baru yang dapat diproses, maka sambungkan ke SQL Server menggunakan koneksi administrator khusus (DAC), dan hentikan prosesnya. Untuk mencegah hal ini, tingkatkan jumlah utas pekerja maks.
Izin
Jalankan izin tanpa sp_configure
parameter atau hanya dengan parameter pertama yang diberikan kepada semua pengguna secara default. Untuk menjalankan sp_configure
dengan kedua parameter untuk mengubah opsi konfigurasi atau untuk menjalankan RECONFIGURE
pernyataan, pengguna harus diberikan ALTER SETTINGS
izin tingkat server. Izin ALTER SETTINGS
secara implisit dipegang oleh peran server tetap sysadmin dan serveradmin .
Menggunakan SQL Server Management Studio (SSMS)
Di Object Explorer, klik kanan server dan pilih Properti.
Pilih simpul Prosesor .
Dalam kotak Utas pekerja maks, ketik atau pilih nilai dari 128 hingga 65.535.
Tip
max worker threads
Gunakan opsi untuk mengonfigurasi jumlah utas pekerja yang tersedia untuk proses SQL Server. Pengaturan default untuk max worker threads
adalah yang terbaik untuk sebagian besar sistem.
Namun, tergantung pada konfigurasi sistem Anda, pengaturan max worker threads
ke nilai yang lebih kecil terkadang meningkatkan performa.
Untuk informasi selengkapnya, lihat bagian Rekomendasi di artikel ini.
Menggunakan Transact-SQL
Sambungkan ke Mesin Database.
Dari bilah Standar, pilih Kueri Baru.
Salin dan tempel contoh berikut ke dalam jendela kueri dan pilih Jalankan. Contoh ini menunjukkan cara menggunakan sp_configure untuk mengonfigurasi
max worker threads
opsi ke900
.USE master; GO EXECUTE sp_configure 'show advanced options', 1; GO RECONFIGURE; GO EXECUTE sp_configure 'max worker threads', 900; GO RECONFIGURE; GO EXECUTE sp_configure 'show advanced options', 0; GO RECONFIGURE; GO
Perubahan akan berlaku segera setelah menjalankan KONFIGURASI ULANG, tanpa mengharuskan Mesin Database untuk memulai ulang.