Panduan Arsitektur Utas dan Tugas

Berlaku untuk:yes SQL Server (semua versi yang didukung) YesAzure SQL Database

Penjadwalan tugas sistem operasi

Utas adalah unit pemrosesan terkecil yang dapat dijalankan oleh sistem operasi, dan memungkinkan logika aplikasi dipisahkan menjadi beberapa jalur eksekusi bersamaan. Utas berguna ketika aplikasi kompleks memiliki banyak tugas yang dapat dilakukan secara bersamaan.

Ketika sistem operasi menjalankan instans aplikasi, sistem operasi membuat unit yang disebut proses untuk mengelola instans. Proses ini memiliki utas eksekusi. Ini adalah serangkaian instruksi pemrograman yang dilakukan oleh kode aplikasi. Misalnya, jika aplikasi sederhana memiliki satu set instruksi yang dapat dilakukan secara serial, serangkaian instruksi tersebut ditangani sebagai satu tugas, dan hanya ada satu jalur eksekusi (atau utas) melalui aplikasi. Aplikasi yang lebih kompleks mungkin memiliki beberapa tugas yang dapat dilakukan secara bersamaan alih-alih secara serial. Aplikasi dapat melakukan ini dengan memulai proses terpisah untuk setiap tugas, yang merupakan operasi intensif sumber daya, atau memulai utas terpisah, yang relatif kurang intensif sumber daya. Selain itu, setiap utas dapat dijadwalkan untuk eksekusi secara independen dari utas lain yang terkait dengan proses.

Utas memungkinkan aplikasi kompleks untuk memanfaatkan prosesor (CPU) yang lebih efektif, bahkan pada komputer yang memiliki satu CPU. Dengan satu CPU, hanya satu utas yang dapat dijalankan pada satu waktu. Jika satu utas menjalankan operasi jangka panjang yang tidak menggunakan CPU, seperti disk baca atau tulis, salah satu utas lain dapat dijalankan hingga operasi pertama selesai. Dengan dapat menjalankan utas sementara utas lain menunggu operasi selesai, aplikasi dapat memaksimalkan penggunaan CPU. Ini terutama berlaku untuk aplikasi intensif I/O multi-pengguna, disk seperti server database. Komputer yang memiliki beberapa CPU dapat menjalankan satu utas per CPU secara bersamaan. Misalnya, jika komputer memiliki delapan CPU, komputer dapat menjalankan delapan utas secara bersamaan.

SQL Server penjadwalan tugas

Dalam cakupan SQL Server, permintaan adalah representasi logis dari kueri atau batch. Permintaan juga mewakili operasi yang diperlukan oleh utas sistem, seperti titik pemeriksaan atau penulis log. Permintaan ada di berbagai status sepanjang masa pakainya dan dapat mengakumulasi tunggu ketika sumber daya yang diperlukan untuk menjalankan permintaan tidak tersedia, seperti kunci atau kait. Untuk informasi selengkapnya tentang status permintaan, lihat sys.dm_exec_requests.

Tugas mewakili unit kerja yang perlu diselesaikan untuk memenuhi permintaan. Satu atau beberapa tugas dapat ditetapkan ke satu permintaan.

  • Permintaan paralel akan memiliki beberapa tugas aktif yang dijalankan secara bersamaan alih-alih secara serial, dengan satu tugas induk (atau tugas koordinasi) dan beberapa tugas anak. Rencana eksekusi untuk permintaan paralel mungkin memiliki cabang serial - area rencana dengan operator yang tidak dijalankan secara paralel. Tugas induk juga bertanggung jawab untuk mengeksekusi operator serial tersebut.
  • Permintaan serial hanya akan memiliki satu tugas aktif pada titik waktu tertentu selama eksekusi.
    Tugas ada di berbagai status sepanjang masa pakainya. Untuk informasi selengkapnya tentang status tugas, lihat sys.dm_os_tasks. Tugas dalam status SUSPENDED sedang menunggu sumber daya yang diperlukan untuk menjalankan tugas agar tersedia. Untuk informasi selengkapnya tentang tugas tunggu, lihat sys.dm_os_waiting_tasks.

Utas pekerja SQL Server, juga dikenal sebagai pekerja atau utas, adalah representasi logis dari utas sistem operasi. Saat menjalankan permintaan serial, mesin database SQL Server akan menghasilkan pekerja untuk menjalankan tugas aktif (1:1). Saat menjalankan permintaan paralel dalam mode baris, mesin database SQL Server menetapkan pekerja untuk mengoordinasikan pekerja anak yang bertanggung jawab untuk menyelesaikan tugas yang ditetapkan kepada mereka (juga 1:1), yang disebut utas induk (atau utas koordinasi). Utas induk memiliki tugas induk yang terkait dengannya. Utas induk adalah titik masuknya permintaan dan ada bahkan sebelum mesin mengurai kueri. Tanggung jawab utama utas induk adalah:

  • Mengoordinasikan pemindaian paralel.
  • Mulai pekerja paralel anak.
  • Kumpulkan baris dari utas paralel dan kirim ke klien.
  • Lakukan agregasi lokal dan global.

Catatan

Jika rencana kueri memiliki cabang serial dan paralel, salah satu tugas paralel akan bertanggung jawab untuk menjalankan cabang serial.

Jumlah utas pekerja yang ditelurkan untuk setiap tugas tergantung pada:

  • Apakah permintaan memenuhi syarat untuk paralelisme seperti yang ditentukan oleh Pengoptimal Kueri.
  • Apa tingkat paralelisme (DOP) aktual yang tersedia dalam sistem berdasarkan beban saat ini. Ini mungkin berbeda dari perkiraan DOP, yang didasarkan pada konfigurasi server untuk tingkat paralelisme maksimum (MAXDOP). Misalnya, konfigurasi server untuk MAXDOP mungkin 8 tetapi DOP yang tersedia saat runtime hanya bisa 2, yang memengaruhi performa kueri.

Catatan

Batas tingkat paralelisme maksimum (MAXDOP) diatur per tugas, bukan per permintaan. Ini berarti bahwa selama eksekusi kueri paralel, satu permintaan dapat menghasilkan beberapa tugas hingga batas MAXDOP, dan setiap tugas akan menggunakan satu pekerja. Untuk informasi selengkapnya tentang MAXDOP, lihat Mengonfigurasi tingkat maksimum Opsi Konfigurasi Server paralelisme.

Penjadwal, juga dikenal sebagai penjadwal SOS, mengelola utas pekerja yang memerlukan waktu pemrosesan untuk melakukan pekerjaan atas nama tugas. Setiap penjadwal dipetakan ke prosesor individu (CPU). Waktu pekerja dapat tetap aktif dalam penjadwal disebut kuantum OS, dengan maksimum 4 mdtk. Setelah waktu kuantum berakhir, pekerja menghasilkan waktunya untuk pekerja lain yang perlu mengakses sumber daya CPU, dan mengubah statusnya. Kerja sama antara pekerja untuk memaksimalkan akses ke sumber daya CPU ini disebut penjadwalan koperasi, juga dikenal sebagai penjadwalan non-preemptive. Pada gilirannya, perubahan status pekerja disebarluaskan ke tugas yang terkait dengan pekerja tersebut, dan permintaan yang terkait dengan tugas. Untuk informasi selengkapnya tentang status pekerja, lihat sys.dm_os_workers. Untuk informasi selengkapnya tentang penjadwal, lihat sys.dm_os_schedulers .

Singkatnya, permintaan dapat menelurkan satu atau beberapa tugas untuk melakukan unit kerja. Setiap tugas ditetapkan ke utas pekerja yang bertanggung jawab untuk menyelesaikan tugas. Setiap utas pekerja harus dijadwalkan (ditempatkan pada penjadwal) untuk eksekusi aktif tugas.

Catatan

Pertimbangkan skenario berikut:

  • Pekerja 1 adalah tugas yang berjalan lama, misalnya kueri baca menggunakan tabel berbasis disk read-ahead. Pekerja 1 menemukan halaman data yang diperlukan sudah ada di Kumpulan Buffer, sehingga tidak perlu menghasilkan untuk menunggu operasi I/O, dan dapat menggunakan kuantum penuhnya sebelum menghasilkan.
  • Pekerja 2 melakukan tugas sub-milidetik yang lebih pendek dan oleh karena itu diperlukan untuk menghasilkan sebelum kuantum penuhnya habis.

Dalam skenario ini dan hingga SQL Server 2014 (12.x), Pekerja 1 pada dasarnya diizinkan untuk memonopoli penjadwal dengan memiliki waktu kuantum yang lebih keseluruhan.
Dimulai dengan SQL Server 2016 (13,x), penjadwalan koperasi meliputi penjadwalan Defisit Besar (LDF). Dengan penjadwalan LDF, pola penggunaan kuantum dipantau dan satu utas pekerja tidak memonopoli penjadwal. Dalam skenario yang sama, Pekerja 2 diizinkan untuk mengonsumsi kuantum berulang sebelum Pekerja 1 diizinkan lebih banyak kuantum, oleh karena itu mencegah Pekerja 1 memonopoli penjadwal dalam pola yang tidak bersatu.

Menjadwalkan tugas paralel

Bayangkan SQL Server dikonfigurasi dengan MaxDOP 8, dan Afinitas CPU dikonfigurasi untuk 24 CPU (penjadwal) di seluruh simpul NUMA 0 dan 1. Penjadwal 0 hingga 11 milik simpul NUMA 0, penjadwal 12 hingga 23 milik simpul NUMA 1. Aplikasi mengirimkan kueri berikut (permintaan) ke Mesin Database:

SELECT h.SalesOrderID, h.OrderDate, h.DueDate, h.ShipDate
FROM Sales.SalesOrderHeaderBulk AS h 
INNER JOIN Sales.SalesOrderDetailBulk AS d ON h.SalesOrderID = d.SalesOrderID 
WHERE (h.OrderDate >= '2014-3-28 00:00:00');

Tip

Contoh kueri dapat dijalankan menggunakan database database sampel AdventureWorks2016_EXT . Tabel dan Sales.SalesOrderDetail diperbesar Sales.SalesOrderHeader 50 kali dan diganti namanya menjadi Sales.SalesOrderHeaderBulk dan Sales.SalesOrderDetailBulk.

Rencana eksekusi menunjukkan Hash Join antara dua tabel, dan masing-masing operator dijalankan secara paralel, seperti yang ditunjukkan oleh lingkaran kuning dengan dua panah. Setiap operator Paralelisme adalah cabang yang berbeda dalam rencana. Oleh karena itu, ada tiga cabang dalam rencana eksekusi di bawah ini.

Parallel Query Plan

Catatan

Jika Anda menganggap rencana eksekusi sebagai pohon, cabang adalah area rencana yang mengelompokkan satu atau beberapa operator antara operator Paralelisme, yang juga disebut Exchange Iterator. Untuk informasi selengkapnya tentang operator paket, lihat Referensi Operator Logis dan Fisik Showplan.

Meskipun ada tiga cabang dalam rencana eksekusi, pada titik mana pun selama eksekusi hanya dua cabang yang dapat dijalankan secara bersamaan dalam rencana eksekusi ini:

  1. Cabang tempat Pemindaian Indeks Berkluster digunakan pada Sales.SalesOrderHeaderBulk (input build gabungan) dijalankan sendiri.
  2. Kemudian, cabang tempat Pemindaian Indeks Berkluster digunakan pada Sales.SalesOrderDetailBulk (input pemeriksaan gabungan) dijalankan bersamaan dengan cabang tempat Bitmap dibuat dan saat ini Hash Match sedang dijalankan.

XML Showplan menunjukkan bahwa 16 utas pekerja dicadangkan dan digunakan pada simpul NUMA 0:

<ThreadStat Branches="2" UsedThreads="16">
  <ThreadReservation NodeId="0" ReservedThreads="16" />
</ThreadStat>

Reservasi utas memastikan Mesin Database memiliki utas pekerja yang cukup untuk melakukan semua tugas yang akan diperlukan untuk permintaan tersebut. Utas dapat dicadangkan di beberapa simpul NUMA, atau dicadangkan hanya dalam satu simpul NUMA. Reservasi utas dilakukan pada runtime sebelum eksekusi dimulai, dan tergantung pada beban penjadwal. Jumlah utas pekerja yang dipesan secara umum berasal dari DOP runtime cabang * bersamaan rumus dan tidak termasuk utas pekerja induk. Setiap cabang terbatas pada sejumlah utas pekerja yang sama dengan MaxDOP. Dalam contoh ini ada dua cabang bersamaan dan MaxDOP diatur ke 8, oleh karena itu 2 * 8 = 16.

Sebagai referensi, amati rencana eksekusi langsung dari Statistik Kueri Langsung, di mana satu cabang telah selesai dan dua cabang dieksekusi secara bersamaan.

Live Parallel Query Plan

Mesin database SQL Server akan menetapkan utas pekerja untuk menjalankan tugas aktif (1:1), yang dapat diamati selama eksekusi kueri dengan mengkueri sys.dm_os_tasks DMV, seperti yang terlihat dalam contoh berikut:

SELECT parent_task_address, task_address, 
       task_state, scheduler_id, worker_address
FROM sys.dm_os_tasks
WHERE session_id = <insert_session_id>
ORDER BY parent_task_address, scheduler_id;

Tip

Kolom parent_task_address selalu NULL untuk tugas induk.

Tip

Pada Mesin Database SQL Server yang sangat sibuk, Anda dapat melihat sejumlah tugas aktif yang melebihi batas yang ditetapkan oleh utas yang dipesan. Tugas-tugas ini dapat menjadi milik cabang yang tidak digunakan lagi dan dalam keadaan sementara, menunggu pembersihan.

Berikut adalah hasil yang ditetapkan. Perhatikan ada 17 tugas aktif untuk cabang yang saat ini dijalankan: 16 tugas turunan yang sesuai dengan utas yang dipesan, ditambah tugas induk, atau tugas koordinasi.

parent_task_address task_address task_state scheduler_id worker_address
NULL 0x000001EF4758ACA8 DITANGGUHKAN 3 0x000001EFE6CB6160
0x000001EF4758ACA8 0x000001EFE43F3468 DITANGGUHKAN 0 0x000001EF6DB70160
0x000001EF4758ACA8 0x000001EEB243A4E8 DITANGGUHKAN 0 0x000001EF6DB7A160
0x000001EF4758ACA8 0x000001EC86251468 DITANGGUHKAN 5 0x000001EEC05E8160
0x000001EF4758ACA8 0x000001EFE3023468 DITANGGUHKAN 5 0x000001EF6B46A160
0x000001EF4758ACA8 0x000001EFE3AF1468 DITANGGUHKAN 6 0x000001EF6BD38160
0x000001EF4758ACA8 0x000001EFE4AFCCA8 DITANGGUHKAN 6 0x000001EF6ACB4160
0x000001EF4758ACA8 0x000001EFDE043848 DITANGGUHKAN 7 0x000001EEA18C2160
0x000001EF4758ACA8 0x000001EF69038108 DITANGGUHKAN 7 0x000001EF6AEBA160
0x000001EF4758ACA8 0x000001EFCFDD8CA8 DITANGGUHKAN 8 0x000001EFCB6F0160
0x000001EF4758ACA8 0x000001EFCFDD88C8 DITANGGUHKAN 8 0x000001EF6DC46160
0x000001EF4758ACA8 0x000001EFBCC54108 DITANGGUHKAN 9 0x000001EFCB886160
0x000001EF4758ACA8 0x000001EC86279468 DITANGGUHKAN 9 0x000001EF6DE08160
0x000001EF4758ACA8 0x000001EFDE901848 DITANGGUHKAN 10 0x000001EFF56E0160
0x000001EF4758ACA8 0x000001EF6DB32108 DITANGGUHKAN 10 0x000001EFCC3D0160
0x000001EF4758ACA8 0x000001EC8628D468 DITANGGUHKAN 11 0x000001EFBFA4A160
0x000001EF4758ACA8 0x000001EFBD3A1C28 DITANGGUHKAN 11 0x000001EF6BD72160

Perhatikan bahwa masing-masing dari 16 tugas anak memiliki utas pekerja yang berbeda yang ditetapkan (terlihat di worker_address kolom ), tetapi semua pekerja ditetapkan ke kumpulan yang sama dari delapan penjadwal (0,5,6,7,8,9,10,11), dan bahwa tugas induk ditetapkan ke penjadwal di luar kumpulan ini (3).

Penting

Setelah serangkaian tugas paralel pertama pada cabang tertentu dijadwalkan, Mesin Database akan menggunakan kumpulan penjadwal yang sama untuk tugas tambahan di cabang lain. Ini berarti set penjadwal yang sama akan digunakan untuk semua tugas paralel dalam seluruh rencana eksekusi, hanya dibatasi oleh MaxDOP.
Mesin database SQL Server akan selalu mencoba menetapkan penjadwal dari simpul NUMA yang sama untuk eksekusi tugas, dan menetapkannya secara berurutan (dengan cara round-robin) jika penjadwal tersedia. Namun, utas pekerja yang ditetapkan ke tugas induk dapat ditempatkan di simpul NUMA yang berbeda dari tugas lain.

Utas pekerja hanya dapat tetap aktif di penjadwal selama durasi kuantumnya (4 ms) dan harus menghasilkan penjadwalnya setelah kuantum tersebut berlalu, sehingga utas pekerja yang ditetapkan ke tugas lain mungkin menjadi aktif. Ketika kuantum pekerja kedaluwarsa dan tidak lagi aktif, tugas masing-masing ditempatkan dalam antrean FIFO dalam status RUNNABLE, sampai berpindah ke status BERJALAN lagi, dengan asumsi tugas tidak akan memerlukan akses ke sumber daya yang tidak tersedia saat ini, seperti kait atau kunci, dalam hal ini tugas akan ditempatkan dalam status SUSPENDED alih-alih RUNNABLE, hingga sumber daya tersebut tersedia.

Tip

Untuk output DMV yang terlihat di atas, semua tugas aktif dalam status SUSPENDED. Detail selengkapnya tentang tugas tunggu tersedia dengan mengkueri sys.dm_os_waiting_tasks DMV.

Singkatnya, permintaan paralel akan menghasilkan beberapa tugas. Setiap tugas harus ditetapkan ke satu utas pekerja. Setiap utas pekerja harus ditetapkan ke satu penjadwal. Oleh karena itu, jumlah penjadwal yang digunakan tidak boleh melebihi jumlah tugas paralel per cabang, yang diatur oleh konfigurasi MaxDOP atau petunjuk kueri. Utas koordinat tidak berkontribusi pada batas MaxDOP.

Mengalokasikan utas ke CPU

Secara default, setiap instans SQL Server memulai setiap utas, dan sistem operasi mendistribusikan utas dari instans SQL Server di antara prosesor (CPU) pada komputer, berdasarkan beban. Jika afinitas proses telah diaktifkan di tingkat sistem operasi, maka sistem operasi menetapkan setiap utas ke CPU tertentu. Sebaliknya, Mesin Database SQL Server menetapkan utas pekerja SQL Server ke penjadwal yang mendistribusikan utas secara merata di antara CPU, dengan cara round-robin.

Untuk melakukan multitugas, misalnya ketika beberapa aplikasi mengakses set CPU yang sama, sistem operasi terkadang memindahkan utas pekerja di antara CPU 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 CPU ke utas tertentu dapat meningkatkan performa dalam kondisi ini dengan menghilangkan pemuatan ulang prosesor dan mengurangi migrasi utas di seluruh CPU (sehingga mengurangi pengalihan konteks); hubungan antara utas dan prosesor disebut afinitas prosesor. Jika afinitas telah diaktifkan, sistem operasi menetapkan setiap utas ke CPU tertentu.

Opsi masker afinitas diatur dengan menggunakan ALTER SERVER CONFIGURATION. Ketika masker afinitas tidak diatur, instans SQL Server mengalokasikan utas pekerja secara merata di antara penjadwal yang belum ditutupi.

Perhatian

Jangan mengonfigurasi afinitas CPU dalam sistem operasi dan juga mengonfigurasi masker afinitas di SQL Server. Pengaturan ini mencoba mencapai hasil yang sama, dan jika konfigurasi tidak konsisten, Anda mungkin memiliki hasil yang tidak dapat diprediksi. Untuk informasi selengkapnya, lihat opsi masker afinitas.

Pengumpulan utas membantu mengoptimalkan performa ketika 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.

Menggunakan Opsi pengumpulan ringan

Overhead yang terlibat dalam beralih konteks utas mungkin tidak terlalu besar. Sebagian besar instans SQL Server tidak akan melihat perbedaan performa antara mengatur opsi pengumpulan ringan ke 0 atau 1. Satu-satunya instans SQL Server yang mungkin mendapat manfaat dari pengumpulan ringan adalah instans yang berjalan di komputer yang memiliki karakteristik berikut:

  • Server multi-CPU besar
  • Semua CPU berjalan mendekati kapasitas maksimum
  • Ada tingkat pengalihan konteks yang tinggi

Sistem ini mungkin melihat sedikit peningkatan performa jika nilai pengumpulan ringan diatur ke 1.

Penting

Jangan gunakan penjadwalan mode serat untuk operasi rutin. Ini dapat mengurangi performa dengan menghambat manfaat reguler peralihan konteks, dan karena beberapa komponen SQL Server tidak dapat berfungsi dengan benar dalam mode serat. Untuk informasi selengkapnya, lihat pengumpulan ringan.

Eksekusi Thread dan Fiber

Microsoft Windows menggunakan sistem prioritas numerik yang berkisar antara 1 hingga 31 untuk menjadwalkan utas untuk dieksekusi. Nol dicadangkan untuk penggunaan sistem operasi. Ketika beberapa utas menunggu untuk dieksekusi, Windows mengirimkan utas dengan prioritas tertinggi.

Secara default, setiap instans SQL Server adalah prioritas 7, yang disebut sebagai prioritas normal. Default ini memberikan SQL Server thread prioritas yang cukup tinggi untuk mendapatkan sumber daya CPU yang memadai tanpa mempengaruhi aplikasi lain.

Penting

Fitur ini akan dihapus dalam versi Microsoft SQL Server yang akan datang. Hindari menggunakan fitur ini dalam pekerjaan pengembangan baru, dan rencanakan untuk memodifikasi aplikasi yang saat ini menggunakan fitur ini.

Opsi konfigurasi peningkatan prioritas dapat digunakan untuk meningkatkan prioritas utas dari instans SQL Server menjadi 13. Ini disebut sebagai prioritas tinggi. Pengaturan ini memberikan SQL Server utas prioritas yang lebih tinggi daripada sebagian besar aplikasi lainnya. Dengan demikian, utas SQL Server umumnya akan dikirim setiap kali siap dijalankan dan tidak akan didahulukan oleh utas dari aplikasi lain. Ini dapat meningkatkan performa ketika server hanya menjalankan instans SQL Server dan tidak ada aplikasi lain. Namun, jika operasi intensif memori terjadi di SQL Server, namun, aplikasi lain kemungkinan tidak memiliki prioritas yang cukup tinggi untuk mendahului utas SQL Server.

Jika Anda menjalankan beberapa instans SQL Server di komputer, dan mengaktifkan peningkatan prioritas hanya untuk beberapa instans, performa instans apa pun yang berjalan pada prioritas normal dapat terpengaruh secara merugikan. Selain itu, performa aplikasi dan komponen lain di server dapat menurun jika peningkatan prioritas diaktifkan. Oleh karena itu, itu hanya boleh digunakan dalam kondisi yang dikontrol dengan ketat.

Hot add CPU

Hot add CPU adalah kemampuan untuk menambahkan CPU secara dinamis ke sistem yang sedang berjalan. Menambahkan CPU dapat terjadi secara fisik dengan menambahkan perangkat keras baru, secara logis oleh partisi perangkat keras online, atau secara virtual melalui lapisan virtualisasi. Dimulai dengan SQL Server 2008, SQL Server mendukung CPU hot add.

Persyaratan untuk CPU hot add:

  • Memerlukan perangkat keras yang mendukung CPU hot add.
  • Memerlukan edisi 64-bit Windows Server 2008 Datacenter atau sistem operasi Windows Server 2008 Enterprise Edition for Itanium-Based Systems.
  • Membutuhkan SQL Server Enterprise.
  • SQL Server tidak dapat dikonfigurasi untuk menggunakan NUMA lunak. Untuk informasi selengkapnya tentang NUMA lunak, lihat Soft-NUMA (SQL Server).

SQL Server tidak secara otomatis mulai menggunakan CPU setelah ditambahkan. Ini mencegah SQL Server menggunakan CPU yang mungkin ditambahkan untuk beberapa tujuan lain. Setelah menambahkan CPU, jalankan pernyataan KONFIGURASI ULANG, sehingga SQL Server akan mengenali CPU baru sebagai sumber daya yang tersedia.

Catatan

Jika masker afinitas64 dikonfigurasi, masker afinitas64 harus dimodifikasi untuk menggunakan CPU baru.

Praktik Terbaik untuk menjalankan SQL Server di komputer yang memiliki lebih dari 64 CPU

Menetapkan Utas Perangkat Keras dengan CPU

Jangan gunakan opsi konfigurasi server masker afinitas dan afinitas64 untuk mengikat prosesor ke utas tertentu. Opsi ini dibatasi hingga 64 CPU. SET PROCESS AFFINITY Gunakan opsi UBAH KONFIGURASI SERVER sebagai gantinya.

Mengelola ukuran file Log Transaksi

Jangan mengandalkan pertumbuhan otomatis untuk meningkatkan ukuran file log transaksi. Meningkatkan log transaksi harus merupakan proses serial. Memperluas log dapat mencegah operasi penulisan transaksi dilanjutkan hingga ekstensi log selesai. Sebagai gantinya, pra-alokasikan ruang untuk file log dengan mengatur ukuran file ke nilai yang cukup besar untuk mendukung beban kerja umum di lingkungan.

Mengatur Tingkat Paralelisme Maks untuk operasi indeks

Performa operasi indeks seperti membuat atau membangun kembali indeks dapat ditingkatkan pada komputer yang memiliki banyak CPU dengan mengatur sementara model pemulihan database ke model pemulihan massal atau sederhana. Operasi indeks ini dapat menghasilkan aktivitas log yang signifikan dan ketidakcocokan log dapat memengaruhi tingkat paralelisme (DOP) terbaik yang dibuat oleh SQL Server.

Selain menyesuaikan opsi konfigurasi server tingkat paralelisme maksimum (MAXDOP), pertimbangkan untuk menyesuaikan paralelisme untuk operasi indeks menggunakan opsi MAXDOP. Untuk informasi selengkapnya, lihat Mengonfigurasi Operasi Indeks Paralel. Untuk informasi dan panduan selengkapnya tentang menyesuaikan tingkat maksimum opsi konfigurasi server paralelisme, lihat Mengonfigurasi tingkat maksimum Opsi Konfigurasi Server paralelisme.

Mengatur Jumlah Maksimum Utas Pekerja

SQL Server akan secara dinamis mengonfigurasi opsi konfigurasi server utas pekerja maks saat startup. SQL Server menggunakan jumlah CPU yang tersedia dan arsitektur sistem untuk menentukan konfigurasi server ini selama startup, menggunakan rumus yang didokumentasikan.

Opsi ini adalah opsi lanjutan dan harus diubah hanya oleh administrator database berpengalaman atau bersertifikat SQL Server profesional. Jika Anda menduga bahwa ada masalah performa, mungkin itu bukan ketersediaan utas pekerja. Penyebabnya lebih mungkin sesuatu seperti I/O yang menyebabkan utas pekerja menunggu. Yang terbaik adalah menemukan akar penyebab masalah performa sebelum Anda mengubah pengaturan utas pekerja maks. Namun, jika Anda perlu mengatur jumlah maksimum utas pekerja secara manual, nilai konfigurasi ini harus selalu diatur ke nilai setidaknya tujuh kali jumlah CPU yang ada pada sistem. Untuk informasi selengkapnya, lihat Mengonfigurasi utas pekerja maks.

Menggunakan SQL Trace dan SQL Server Profiler

Kami menyarankan agar Anda tidak menggunakan SQL Trace dan SQL Profiler di lingkungan produksi. Overhead untuk menjalankan alat-alat ini juga meningkat saat jumlah CPU meningkat. Jika Anda harus menggunakan SQL Trace di lingkungan produksi, batasi jumlah peristiwa pelacakan minimal. Buat profil dan uji setiap peristiwa pelacakan dengan hati-hati di bawah beban, dan hindari menggunakan kombinasi peristiwa yang secara signifikan memengaruhi performa.

Penting

SQL Trace dan SQL Server Profiler dihentikan. Namespace Microsoft.SqlServer.Management.Trace yang berisi objek Microsoft SQL Server Trace dan Replay juga tidak digunakan lagi.

Fitur ini akan dihapus dalam versi Microsoft SQL Server mendatang. Hindari menggunakan fitur ini dalam pekerjaan pengembangan baru, dan rencanakan untuk memodifikasi aplikasi yang saat ini menggunakan fitur ini.

Gunakan Extended Events sebagai gantinya. Untuk informasi selengkapnya tentang Acara yang Diperluas, lihat Mulai Cepat: Acara yang diperluas di SQL Server dan SSMS XEvent Profiler.

Catatan

SQL Server Profiler untuk beban kerja Analysis Services TIDAK digunakan lagi, dan akan terus didukung.

Mengatur jumlah file data tempdb

Jumlah file tergantung pada jumlah prosesor (logis) pada komputer. Sebagai aturan umum, jika jumlah prosesor logis kurang dari atau sama dengan delapan, gunakan jumlah file data yang sama dengan prosesor logis. Jika jumlah prosesor logis lebih besar dari delapan, gunakan delapan file data dan kemudian jika pertikaian berlanjut, tingkatkan jumlah file data dengan kelipatan 4 hingga ketidakcocokan dikurangi ke tingkat yang dapat diterima atau buat perubahan pada beban kerja/kode. Perlu diingat juga rekomendasi lain untuk tempdb, tersedia dalam Mengoptimalkan performa tempdb dalam SQL Server.

Namun, dengan hati-hati mempertimbangkan kebutuhan konkurensi tempdb, Anda dapat mengurangi overhead manajemen database. Misalnya, jika sistem memiliki 64 CPU dan biasanya hanya 32 kueri yang menggunakan tempdb, meningkatkan jumlah file tempdb menjadi 64 tidak akan meningkatkan performa.

SQL Server komponen yang dapat menggunakan lebih dari 64 CPU

Tabel berikut ini mencantumkan komponen SQL Server dan menunjukkan apakah mereka dapat menggunakan lebih dari 64 CPU tersebut.

Nama proses Program yang dapat dieksekusi Gunakan lebih dari 64 CPU
Mesin Database SQL Server Sqlserver.exe Ya
SQL Server Reporting Services Rs.exe Tidak
Analysis Services As.exe Tidak
Layanan Integrasi Is.exe Tidak
Service Broker Sb.exe Tidak
Pencarian teks-lengkap Fts.exe Tidak
SQL Server Agent Sqlagent.exe Tidak
SQL Server Management Studio Ssms.exe Tidak
Penyetelan SQL Server Setup.exe Tidak