Mengontrol sumber daya SQL Server
Meskipun beberapa SQL Server atau instans terkelola Azure SQL didedikasikan untuk database satu aplikasi, konfigurasi sering terlihat dalam aplikasi penting misi, banyak server mendukung database untuk beberapa aplikasi dengan berbagai persyaratan performa dan siklus beban kerja puncak. Menyeimbangkan persyaratan yang berbeda ini dapat menjadi tantangan bagi administrator. Salah satu cara efektif untuk mengelola sumber daya server adalah dengan menggunakan Resource Governor, yang diperkenalkan di SQL Server 2008.
Resource Governor adalah fitur dalam instans terkelola SQL Server dan Azure SQL yang memungkinkan kontrol terperinci atas sumber daya CPU, I/O fisik, dan memori untuk permintaan aplikasi masuk. Saat diaktifkan di tingkat instans, Resource Governor menggunakan fungsi pengklasifikasi untuk menentukan bagaimana koneksi diperlakukan, memba merupakan sesi pembagian ke dalam grup beban kerja. Setiap grup beban kerja dikonfigurasi untuk menggunakan kumpulan sumber daya sistem tertentu.
Kumpulan sumber daya
Kumpulan sumber daya mewakili sumber daya fisik yang tersedia di server. SQL Server selalu memiliki dua kumpulan: default dan internal, bahkan ketika Resource Governor tidak diaktifkan. Kumpulan internal dicadangkan untuk fungsi SQL Server penting dan tidak dapat dibatasi. Kumpulan default, bersama dengan kumpulan sumber daya apa pun yang anda tentukan secara eksplisit, dapat dikonfigurasi dengan batasan pada sumber daya yang dapat mereka gunakan. Untuk setiap kumpulan noninternal, Anda dapat menentukan batas berikut:
- Persentase CPU Min/Maks
- Batas atas persentase CPU
- Persentase memori Min/Maks
- Afinitas node NUMA
- IOPs Min/Maks per volume
Catatan
Perubahan pada kumpulan sumber daya hanya berdampak pada sesi baru, bukan yang sudah berlangsung. Oleh karena itu, memodifikasi kumpulan tidak akan membatasi sumber daya proses yang berjalan lama. Pengecualian untuk aturan ini adalah kumpulan eksternal yang digunakan dengan SQL Server Machine Learning Services, yang dapat dibatasi oleh perubahan kumpulan bahkan untuk sesi yang sedang berlangsung.
Semua pengaturan kumpulan sumber daya, kecuali untuk persentase CPU minimum dan maksimum, mewakili batas keras yang tidak dapat terlampaui. Persentase CPU min/maks hanya berlaku ketika ada ketidakcocokan CPU. Misalnya, jika Anda menetapkan maksimum 70%, beban kerja dapat menggunakan hingga 100% siklus CPU yang tersedia saat tidak ada ketidakcocokan. Namun, jika beban kerja lain berjalan, beban kerja akan dibatasi hingga 70%.
Grup beban kerja
Grup beban kerja berfungsi sebagai kontainer untuk permintaan sesi, diklasifikasikan oleh fungsi pengklasifikasi. Mirip dengan kumpulan sumber daya, ada dua grup bawaan: default dan internal. Setiap grup beban kerja dikaitkan dengan satu kumpulan sumber daya, tetapi kumpulan sumber daya dapat menghosting beberapa grup beban kerja. Secara default, semua koneksi diarahkan ke grup beban kerja default kecuali fungsi pengklasifikasi menetapkannya ke grup yang ditentukan pengguna. Grup beban kerja default menggunakan sumber daya yang dialokasikan ke kumpulan sumber daya default.
Fungsi pengklasifikasi
Fungsi pengklasifikasi dijalankan pada saat koneksi dibuat ke instans SQL Server dan mengklasifikasikan setiap koneksi ke dalam grup beban kerja tertentu. Jika fungsi mengembalikan NULL, default, atau nama grup beban kerja yang tidak ada, sesi akan ditransfer ke dalam grup beban kerja default. Karena pengklasifikasi dijalankan di setiap koneksi, upaya tersebut harus diuji untuk efisiensi. Gambar berikut menampilkan fungsi pengklasifikasi sampel yang mengklasifikasikan pengguna berdasarkan nama pengguna mereka.
CREATE FUNCTION dbo.RGClassifier()
RETURNS SYSNAME
WITH SCHEMABINDING
AS
BEGIN
DECLARE @WorkloadGroup AS SYSNAME
IF(SUSER_NAME() = 'ReportUser')
SET @WorkloadGroup = 'ReportServerGroup'
ELSE IF (SUSER_NAME() = 'PrimaryUser')
SET @WorkloadGroup = 'PrimaryServerGroup'
ELSE
SET @WorkloadGroup = 'default'
RETURN @WorkloadGroup
END
Anda dapat meningkatkan kompleksitas definisi fungsi yang ditunjukkan dalam contoh, tetapi Anda harus memverifikasi bahwa fungsi yang lebih kompleks tidak memengaruhi performa pengguna.
Kasus penggunaan Resource Governor
Resource Governor digunakan terutama dalam skenario multipenyewa di mana sekelompok database berbagi satu instans SQL Server, dan performa harus tetap konsisten untuk semua pengguna server. Anda juga dapat menggunakan Resource Governor untuk membatasi sumber daya yang digunakan oleh operasi pemeliharaan seperti pemeriksaan konsistensi dan pembangunan kembali indeks, untuk mencoba menjamin sumber daya yang memadai untuk kueri pengguna selama jendela pemeliharaan Anda.