Fungsi pengklasifikasi pengatur sumber daya

Berlaku untuk: SQL ServerAzure SQL Managed Instance

Proses klasifikasi pengelola sumber daya dapat menggunakan fungsi pengklasifikasi untuk menempatkan sesi masuk ke kelompok beban kerja. Fungsi pengklasifikasi berisi logika kustom Anda untuk mengklasifikasikan sesi ke dalam grup beban kerja.

Untuk contoh konfigurasi dan pemantauan dan untuk mempelajari praktik terbaik gubernur sumber daya, lihat Tutorial : Contoh konfigurasi gubernur sumber daya dan praktik terbaik.

Klasifikasi

Dengan pengelola sumber daya, setiap sesi baru diklasifikasikan ke dalam kelompok beban kerja. Pengklasifikasi adalah fungsi skalar yang ditentukan pengguna yang Anda buat. Ini berisi logika yang Anda inginkan untuk menetapkan sesi yang masuk ke kelompok beban kerja. Nilai skalar yang dikembalikan oleh pengklasifikasi adalah nama grup beban kerja untuk ditetapkan ke sesi masuk.

Jika gubernur sumber daya diaktifkan dan fungsi pengklasifikasi ditentukan dalam konfigurasi gubernur sumber daya, output fungsi menentukan grup beban kerja yang digunakan untuk sesi baru. Jika tidak, semua sesi pengguna diklasifikasikan ke default dalam grup beban kerja.

Catatan

Grup internal beban kerja hanya digunakan untuk permintaan sistem internal. Anda tidak dapat mengubah kriteria yang digunakan untuk menetapkan permintaan ke dalam internal grup beban kerja, dan Anda tidak dapat secara eksplisit mengklasifikasikan permintaan ke dalam internal grup beban kerja.

Anda harus menyelesaikan langkah-langkah berikut untuk mulai menggunakan fungsi pengklasifikasi:

  1. Buat fungsi dalam master database menggunakan CREATE FUNCTION. Fungsi harus menggunakan pengikatan skema.
  2. Referensikan fungsi dalam konfigurasi gubernur sumber daya menggunakan ALTER RESOURCE GOVERNOR dengan CLASSIFIER_FUNCTION parameter .
  3. Buat konfigurasi baru efektif menggunakan ALTER RESOURCE GOVERNOR RECONFIGURE.

Penting

Upaya koneksi klien mungkin kehabisan waktu jika fungsi pengklasifikasi tidak selesai dalam periode batas waktu koneksi yang dikonfigurasi oleh klien. Penting bagi Anda untuk membuat fungsi pengklasifikasi yang menyelesaikan eksekusi sebelum batas waktu koneksi mungkin terjadi.

Jaga agar fungsi pengklasifikasi tetap sederhana. Hindari menggunakan logika yang kompleks atau memakan waktu. Jika memungkinkan, hindari akses data di pengklasifikasi.

Fungsi pengklasifikasi memiliki karakteristik dan perilaku berikut:

  • Fungsi ini didefinisikan dalam cakupan server (dalam master database).
  • Fungsi ini didefinisikan dengan pengikatan skema. Untuk informasi selengkapnya, lihat SCHEMABINDING.
  • Fungsi ini dievaluasi untuk setiap sesi baru, bahkan ketika pembagian koneksi diaktifkan.
  • Fungsi mengembalikan konteks grup beban kerja untuk sesi tersebut. Sesi ditetapkan ke grup beban kerja yang dikembalikan oleh pengklasifikasi selama masa pakai sesi.
  • Jika fungsi mengembalikan NULL, , defaultatau nama grup beban kerja yang tidak ada, sesi diberikan default konteks grup beban kerja. Sesi juga diberikan default konteks jika terjadi kegagalan fungsi tersebut karena alasan apa pun.
  • Setelah fungsi pengklasifikasi ditambahkan atau dihapus menggunakan ALTER RESOURCE GOVERNOR (WITH CLASSIFIER_FUNCTION = ...) pernyataan, perubahan hanya berlaku setelah ALTER RESOURCE GOVERNOR RECONFIGURE pernyataan dijalankan.
  • Hanya satu fungsi yang dapat ditetapkan sebagai pengklasifikasi pada satu waktu.
  • Fungsi pengklasifikasi tidak dapat dimodifikasi atau dihapus kecuali status pengklasifikasinya dihapus menggunakan ALTER RESOURCE GOVERNOR (WITH CLASSIFIER_FUNCTION = ...) pernyataan yang mengatur nama fungsi ke NULL atau ke nama fungsi lain.
  • Dengan tidak adanya fungsi pengklasifikasi, semua sesi diklasifikasikan default ke dalam grup.
  • Grup beban kerja yang ditentukan dalam output fungsi pengklasifikasi berada di luar cakupan pembatasan pengikatan skema. Misalnya, Anda tidak dapat menghilangkan tabel yang dirujuk dalam fungsi pengklasifikasi, tetapi Anda dapat menghilangkan grup beban kerja meskipun pengklasifikasi mengembalikan nama grup tersebut.

Aktifkan DAC

Untuk tujuan pemecahan masalah dan diagnostik, sebaiknya aktifkan dan pahami Koneksi Administrator Khusus (DAC) secara proaktif. DAC tidak tunduk pada klasifikasi gubernur sumber daya. Anda dapat menggunakan DAC untuk memantau dan memecahkan masalah fungsi pengklasifikasi meskipun konfigurasi gubernur sumber daya Anda tidak berfungsi dan membuat koneksi lain tidak dapat digunakan. Untuk informasi selengkapnya, lihat Koneksi diagnostik untuk administrator database.

Jika DAC tidak tersedia untuk pemecahan masalah, Anda dapat memulai server dalam mode pengguna tunggal. Meskipun koneksi mode pengguna tunggal tidak tunduk pada klasifikasi, itu tidak memberi Anda kemampuan untuk mendiagnosis klasifikasi pengelola sumber daya saat beroperasi.

Setelah terhubung menggunakan DAC atau terhubung dalam mode pengguna tunggal, Anda dapat memodifikasi konfigurasi gubernur sumber daya untuk menghapus fungsi pengklasifikasi yang tidak berfungsi atau menonaktifkan gubernur sumber daya.

Proses masuk

Dalam konteks gubernur sumber daya, proses masuk untuk sesi terdiri dari langkah-langkah berikut:

  1. Autentikasi masuk.
  2. Eksekusi pemicu log masuk. Hanya terjadi jika pemicu masuk ada dalam instans.
  3. Klasifikasi.

Saat klasifikasi dimulai, gubernur sumber daya menjalankan fungsi pengklasifikasi dan menggunakan nilai skalar yang dikembalikan oleh fungsi untuk mengirim permintaan ke grup beban kerja yang cocok.

Anda dapat memantau eksekusi pemicu masuk dan fungsi pengklasifikasi menggunakan tampilan sistem sys.dm_exec_sessions dan sys.dm_exec_requests .

Examples

Fungsi pengklasifikasi gubernur sumber daya dapat menggunakan berbagai logika kustom. Untuk contoh dan panduan lainnya, lihat Tutorial: Contoh konfigurasi gubernur sumber daya dan praktik terbaik.

A. Nama host

Fungsi ini mengklasifikasikan sesi dari nama host tertentu ke dalam grup beban kerja bernama Reports, menggunakan fungsi sistem bawaan HOST_NAME(). Semua sesi lainnya terus diklasifikasikan dalam kelompok beban kerja default.

CREATE FUNCTION dbo.rg_classifier()
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
    DECLARE @grp_name sysname = 'default';

    IF (HOST_NAME() IN ('reportserver1','reportserver2'))
        SET @grp_name = 'Reports';
    
    RETURN @grp_name;
END;
GO

B. Nama pengguna

Fungsi ini mengklasifikasikan sesi dari nama pengguna atau nama akun layanan tertentu ke dalam grup beban kerja bernama Reports, menggunakan fungsi sistem bawaan SUSER_SNAME(). Semua sesi lainnya terus diklasifikasikan dalam grup beban kerja default.

CREATE FUNCTION dbo.rg_classifier()
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
    DECLARE @grp_name sysname = 'default';

    IF (SUSER_SNAME() IN ('Reporting', 'domain/svc_reporting'))
        SET @grp_name = 'Reports';
    
    RETURN @grp_name;
END;
GO

C. Nama aplikasi

Fungsi ini mengklasifikasikan sesi dari nama aplikasi tertentu ke dalam grup beban kerja bernama Adhoc, menggunakan fungsi sistem bawaan APP_NAME(). Semua sesi lainnya terus diklasifikasikan ke dalam grup beban kerja default.

Penting

Aplikasi atau pengguna dapat memberikan nama aplikasi apa pun sebagai bagian dari string koneksi. Pengguna dapat terhubung melalui berbagai aplikasi.

CREATE FUNCTION dbo.rg_classifier()
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
    DECLARE @grp_name sysname = 'default';

    IF (APP_NAME() IN ('Microsoft SQL Server Management Studio - Query','azdata'))
        SET @grp_name = 'Adhoc';
    
    RETURN @grp_name;
END;
GO