Panduan arsitektur alur dan tugas
Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance
Penjadwalan tugas sistem operasi
Utas adalah unit pemrosesan terkecil yang 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 rangkaian instruksi pemrograman yang dilakukan oleh kode aplikasi. Misalnya, jika aplikasi sederhana memiliki satu set instruksi yang dapat dilakukan secara serial, set 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 yang kompleks untuk membuat penggunaan 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, 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.
Penjadwalan tugas SQL Server
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
Tugas mewakili unit kerja yang perlu diselesaikan untuk memenuhi permintaan. Satu atau beberapa tugas dapat ditetapkan ke satu permintaan.
- Permintaan paralel memiliki beberapa tugas aktif yang dijalankan secara bersamaan alih-alih secara serial, dengan satu tugas induk (atau tugas koordinasi) dan beberapa tugas turunan. Rencana eksekusi untuk permintaan paralel mungkin memiliki cabang serial - area paket dengan operator yang tidak dijalankan secara paralel. Tugas induk juga bertanggung jawab untuk mengeksekusi operator serial tersebut.
- Permintaan serial hanya 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 menunggu sumber daya yang diperlukan untuk menjalankan tugas agar tersedia. Untuk informasi selengkapnya tentang tugas tunggu, lihat sys.dm_os_waiting_tasks.
Pekerja
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 menelurkan 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 alur koordinasi). Utas induk memiliki tugas induk yang terkait dengannya. Utas induk adalah titik masuk permintaan dan ada bahkan sebelum mesin mengurai kueri. Tanggung jawab utama utas induk adalah:
- Koordinasikan pemindaian paralel.
- Mulai pekerja anak paralel.
- 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) yang tersedia aktual dalam sistem, berdasarkan beban saat ini. Ini mungkin berbeda dari perkiraan DOP, yang didasarkan pada konfigurasi server untuk tingkat paralelisme maks (MAXDOP). Misalnya, konfigurasi server untuk MAXDOP mungkin 8 tetapi DOP yang tersedia saat runtime hanya bisa 2, yang memengaruhi performa kueri. Tekanan memori dan kurangnya pekerja adalah dua kondisi yang mengurangi DOP yang tersedia saat runtime.
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
Penjadwal, juga dikenal sebagai penjadwal SOS, mengelola utas pekerja yang memerlukan waktu pemrosesan untuk melakukan pekerjaan atas nama tugas. Setiap penjadwal dipetakan ke prosesor individual (CPU). Waktu pekerja dapat tetap aktif di penjadwal disebut kuantum OS, dengan maksimum 4 ms. 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 kooperatif, juga dikenal sebagai penjadwalan non-preemptive. Pada gilirannya, perubahan status pekerja disebarkan ke tugas yang terkait dengan pekerja tersebut, dan ke 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.
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 Buffer Pool, 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 lebih banyak waktu kuantum secara keseluruhan.
Dimulai dengan SQL Server 2016 (13.x), penjadwalan koperasi mencakup penjadwalan Defisit Besar Pertama (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 bersahabat.
Jadwal tugas paralel
Bayangkan SQL Server yang 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 Gabungan Hash 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 berikut.
Catatan
Jika Anda menganggap rencana eksekusi sebagai pohon, cabang adalah area rencana yang mengelompokkan satu atau beberapa operator antara operator Paralelisme, juga disebut Exchange Iterators. 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:
- Cabang tempat Pemindaian Indeks Berkluster digunakan pada
Sales.SalesOrderHeaderBulk
(input build gabungan) dijalankan sendiri. - 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 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 bergantung pada beban penjadwal. Jumlah utas pekerja yang dipesan secara generis berasal dari rumus concurrent branches * runtime DOP
dan mengecualikan utas pekerja induk. Setiap cabang dibatasi 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 dijalankan secara bersamaan.
Mesin Database SQL Server 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, dimungkinkan untuk melihat sejumlah tugas aktif yang melebihi batas yang ditetapkan oleh utas yang dipesan. Tugas-tugas ini dapat termasuk dalam cabang yang tidak digunakan lagi dan dalam keadaan sementara, menunggu pembersihan.
Berikut set hasilnya. 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 |
Amati 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 apa pun 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 kuantumnya (4 ms) dan harus menghasilkan penjadwalnya setelah kuantum tersebut berlalu, sehingga utas pekerja yang ditetapkan ke tugas lain dapat menjadi aktif. Ketika kuantum pekerja kedaluwarsa dan tidak lagi aktif, tugas masing-masing ditempatkan dalam antrean FIFO dalam status RUNNABLE, sampai berpindah ke status RUNNING lagi, dengan asumsi tugas tidak 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, sampai saat ini 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 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. Alur koordinasi tidak berkontribusi pada batas MaxDOP.
Alokasi 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) di 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 beban ulang prosesor dan mengurangi migrasi utas di seluruh CPU (sehingga mengurangi pengalihan konteks); hubungan seperti itu 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.
Penggunaan opsi pengumpulan ringan
Overhead yang terlibat dalam mengalihkan konteks utas mungkin tidak terlalu besar. Sebagian besar instans SQL Server tidak melihat perbedaan performa antara pengaturan 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 peningkatan kecil dalam 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 utas dan serat
Microsoft Windows menggunakan sistem prioritas numerik yang berkisar antara 1 hingga 31 untuk menjadwalkan utas untuk eksekusi. Nol dicadangkan untuk penggunaan sistem operasi. Ketika beberapa utas menunggu untuk dijalankan, Windows mengirimkan utas dengan prioritas tertinggi.
Secara default, setiap instans SQL Server adalah prioritas 7, yang disebut sebagai prioritas normal. Default ini memberikan alur SQL Server prioritas yang cukup tinggi untuk mendapatkan sumber daya CPU yang memadai tanpa memengaruhi aplikasi lain.
Penting
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.
Opsi konfigurasi peningkatan prioritas dapat digunakan untuk meningkatkan prioritas utas dari instans SQL Server menjadi 13. Ini disebut sebagai prioritas tinggi. Pengaturan ini memberi alur SQL Server prioritas yang lebih tinggi daripada sebagian besar aplikasi lainnya. Dengan demikian, utas SQL Server umumnya akan dikirim setiap kali mereka siap untuk dijalankan dan tidak didahului 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 tidak mungkin 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 tambahkan 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 dengan partisi perangkat keras online, atau hampir melalui lapisan virtualisasi. SQL Server mendukung hot add CPU.
Persyaratan untuk CPU hot add:
- Memerlukan perangkat keras yang mendukung CPU hot add.
- Memerlukan versi Windows Server Datacenter atau edisi Enterprise yang didukung. Dimulai dengan Windows Server 2012, hot add didukung pada edisi Standar.
- Memerlukan edisi 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 menggunakan CPU setelah ditambahkan. Ini mencegah SQL Server menggunakan CPU yang mungkin ditambahkan untuk 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
Penugasan utas perangkat keras ke CPU
Jangan gunakan opsi konfigurasi server masker afinitas dan afinity64 mask untuk mengikat prosesor ke utas tertentu. Opsi ini dibatasi hingga 64 CPU. SET PROCESS AFFINITY
Gunakan opsi UBAH KONFIGURASI SERVER sebagai gantinya.
Manajemen ukuran file log transaksi
Jangan mengandalkan autogrow 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 maksimum untuk operasi indeks
Performa operasi indeks seperti membuat atau membangun ulang indeks dapat ditingkatkan pada komputer yang memiliki banyak CPU dengan mengatur model pemulihan database untuk sementara ke model pemulihan yang dicatat secara massal atau sederhana. Operasi indeks ini dapat menghasilkan aktivitas log yang signifikan dan ketidakcocokan log dapat memengaruhi tingkat paralelisme terbaik (DOP) pilihan yang dibuat oleh SQL Server.
Selain menyesuaikan tingkat maksimum opsi konfigurasi server paralelisme (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.
Jumlah maksimum opsi utas pekerja
SQL Server 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 profesional SQL Server bersertifikat. Jika Anda menduga bahwa ada masalah performa, mungkin itu bukan ketersediaan utas pekerja. Penyebabnya adalah 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 di sistem. Untuk informasi selengkapnya, lihat Mengonfigurasi utas pekerja maks.
Hindari penggunaan 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. Profilkan 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 SQL Server Trace dan Replay juga tidak digunakan lagi.
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 Extended Events sebagai gantinya. Untuk informasi selengkapnya tentang Peristiwa yang Diperluas, lihat Mulai Cepat: Peristiwa yang diperluas di SQL Server dan SSMS XEvent Profiler.
Catatan
Beban kerja SQL Server Profiler for Analysis Services TIDAK digunakan lagi, dan akan terus didukung.
Mengatur jumlah tempdb
file data
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 di SQL Server.
Namun, dengan hati-hati mempertimbangkan kebutuhan tempdb
konkurensi , Anda dapat mengurangi overhead manajemen database. Misalnya, jika sistem memiliki 64 CPU dan biasanya hanya 32 kueri yang menggunakan tempdb
, meningkatkan jumlah tempdb
file menjadi 64 tidak akan meningkatkan performa.
Komponen SQL Server yang dapat menggunakan lebih dari 64 CPU
Tabel berikut 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 |
Layanan Pelaporan | Rs.exe | No |
Analysis Services | As.exe | No |
Layanan Integrasi | Is.exe | No |
Service Broker | Sb.exe | No |
Pencarian teks-lengkap | Fts.exe | No |
SQL Server Agent | Sqlagent.exe | No |
SQL Server Management Studio | Ssms.exe | No |
Penyiapan SQL Server | Setup.exe | No |