Mengonfigurasi utas pekerja maks (opsi konfigurasi server)

Berlaku untuk:SQL Server

Artikel ini menjelaskan cara mengonfigurasi opsi konfigurasi server utas pekerja maks di SQL Server dengan menggunakan SQL Server Management Studio atau Transact-SQL. Opsi utas pekerja maks 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 utas pekerja maks 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, mengatur utas pekerja maks ke nilai tertentu terkadang meningkatkan performa.

Batasan

  • Jumlah permintaan kueri aktual dapat melebihi nilai yang ditetapkan dalam utas pekerja maks dalam 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.

  • Opsi konfigurasi server utas pekerja maks 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 batas utas pekerja maks tetapi juga menggunakan utas sistem (lihat Penggunaan Utas menurut Grup Ketersediaan) Jika jumlah utas yang dikonfigurasi sedang terlampaui, kueri berikut ini menyediakan informasi tentang tugas sistem yang telah melahirkan 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 utas pekerja maks memungkinkan SQL Server 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 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)

  1. Di Object Explorer, klik kanan server dan pilih Properti.

  2. Pilih simpul Prosesor .

  3. Dalam kotak Utas pekerja maks, ketik atau pilih nilai dari 128 hingga 65.535.

Tip

Gunakan opsi utas pekerja maks untuk mengonfigurasi jumlah utas pekerja yang tersedia untuk proses SQL Server. Pengaturan default untuk utas pekerja maks adalah yang terbaik untuk sebagian besar sistem.
Namun, tergantung pada konfigurasi sistem Anda, mengatur utas pekerja maks ke nilai yang lebih kecil terkadang meningkatkan performa. Untuk informasi selengkapnya, lihat bagian Rekomendasi di artikel ini.

Menggunakan Transact-SQL

  1. Koneksi ke Mesin Database.

  2. Dari bilah Standar, pilih Kueri Baru.

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

EXEC sp_configure 'show advanced options', 1;
GO

RECONFIGURE;
GO

EXEC sp_configure 'max worker threads', 900;
GO

RECONFIGURE;
GO

Perubahan akan berlaku segera setelah menjalankan KONFIGURASI ULANG, tanpa mengharuskan Mesin Database untuk memulai ulang.