Tutorial: Contoh konfigurasi gubernur sumber daya dan praktik terbaik

Berlaku untuk:SQL ServerAzure SQL Managed Instance

Artikel ini berisi contoh langkah demi langkah yang bertujuan membantu Anda mengonfigurasi pengelola sumber daya dan memastikan konfigurasi Anda berfungsi dengan baik. Ini dimulai dengan contoh sederhana dan berkembang ke yang lebih kompleks.

Artikel ini juga menyertakan contoh kueri pemantauan gubernur sumber daya dan daftar praktik terbaik gubernur sumber daya.

Semua contoh mengasumsikan bahwa awalnya, gubernur sumber daya dinonaktifkan dan menggunakan pengaturan default, dan bahwa tidak ada kumpulan sumber daya yang ditentukan pengguna, grup beban kerja, dan fungsi pengklasifikasi.

Nota

Untuk mengubah konfigurasi gubernur sumber daya di Azure SQL Managed Instance, Anda harus berada dalam konteks master database pada replika utama.

Mengubah grup default

Contoh ini menggunakan gubernur sumber daya untuk membatasi ukuran maksimum peruntukan memori untuk semua kueri pengguna. Ini dilakukan dengan mengurangi REQUEST_MAX_MEMORY_GRANT_PERCENT pengaturan untuk default grup beban kerja dari default 25% menjadi 10%. Contoh tidak menggunakan fungsi pengklasifikasi. Ini berarti bahwa pemrosesan login tidak terpengaruh dan semua sesi pengguna terus diklasifikasikan dalam default grup beban kerja.

Anda mungkin perlu membatasi ukuran alokasi memori jika kueri menunggu memori sebab kueri lain mencadangkan terlalu banyak memori. Untuk informasi selengkapnya, lihat Memecahkan masalah performa lambat atau memori rendah yang disebabkan oleh pemberian memori di SQL Server.

  1. Ubah grup beban kerja default.

    ALTER WORKLOAD GROUP [default] WITH (REQUEST_MAX_MEMORY_GRANT_PERCENT = 10);
    
  2. Aktifkan gubernur sumber daya untuk membuat konfigurasi kami efektif.

    ALTER RESOURCE GOVERNOR RECONFIGURE;
    
  3. Validasi pengaturan baru, termasuk ukuran maksimum baru dari peruntukan memori.

    SELECT group_id,
           wg.name AS workload_group_name,
           rp.name AS resource_pool_name,
           wg.request_max_memory_grant_percent_numeric AS request_max_memory_grant_percent,
           rp.max_memory_kb * wg.request_max_memory_grant_percent_numeric AS request_max_memory_grant_size_kb
    FROM sys.resource_governor_workload_groups AS wg
    INNER JOIN sys.dm_resource_governor_resource_pools AS rp
    ON wg.pool_id = rp.pool_id;
    
  4. Untuk kembali ke konfigurasi awal, jalankan skrip berikut:

    ALTER WORKLOAD GROUP [default] WITH (REQUEST_MAX_MEMORY_GRANT_PERCENT = 25);
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    ALTER RESOURCE GOVERNOR DISABLE;
    

Menggunakan grup beban kerja yang ditentukan pengguna

Contoh ini menggunakan gubernur sumber daya untuk memastikan bahwa semua permintaan pada sesi dengan nama aplikasi tertentu tidak dijalankan dengan tingkat paralelisme (DOP) yang lebih tinggi dari empat. Ini dilakukan dengan mengklasifikasikan sesi ke dalam grup beban kerja dengan pengaturan MAX_DOP ditetapkan ke 4.

Untuk informasi selengkapnya tentang mengonfigurasi tingkat paralelisme maksimum, lihat Konfigurasi server: tingkat paralelisme maks.

  1. Buat grup beban kerja yang membatasi DOP. Grup menggunakan kumpulan default sumber daya karena kami hanya ingin membatasi DOP untuk aplikasi tertentu, tetapi tidak memesan atau membatasi sumber daya CPU, memori, atau I/O.

    CREATE WORKLOAD GROUP limit_dop
    WITH (
         MAX_DOP = 4
         )
    USING [default];
    
  2. Buat fungsi pengklasifikasi. Fungsi ini menggunakan fungsi APP_NAME() bawaan untuk menentukan nama aplikasi yang ditentukan dalam string koneksi klien. Jika nama aplikasi diatur ke limited_dop_application, fungsi mengembalikan nama grup beban kerja yang membatasi DOP. Jika tidak, fungsi akan mengembalikan default sebagai nama grup beban kerja.

    USE master;
    GO
    
    CREATE FUNCTION dbo.rg_classifier()
    RETURNS sysname
    WITH SCHEMABINDING
    AS
    BEGIN
    
    DECLARE @WorkloadGroupName sysname = N'default';
    
    IF APP_NAME() = N'limited_dop_application'
        SELECT @WorkloadGroupName = N'limit_dop';
    
    RETURN @WorkloadGroupName;
    
    END;
    GO
    
  3. Ubah konfigurasi gubernur sumber daya untuk membuat konfigurasi kami efektif, dan aktifkan gubernur sumber daya.

    ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.rg_classifier);
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    
  4. Kueri sys.resource_governor_configuration untuk memvalidasi bahwa gubernur sumber daya diaktifkan dan menggunakan fungsi pengklasifikasi yang kami buat.

    SELECT OBJECT_SCHEMA_NAME(classifier_function_id) AS classifier_schema_name,
           OBJECT_NAME(classifier_function_id) AS classifier_object_name,
           is_enabled
    FROM sys.resource_governor_configuration;
    
    classifier_schema_name      classifier_object_name      is_enabled
    ----------------------      ----------------------      ----------
    dbo                         rg_classifier               1
    
  5. Validasi bahwa sesi dengan nama aplikasi tertentu diklasifikasikan ke dalam limit_dop grup beban kerja, sementara sesi lain terus diklasifikasikan dalam default grup beban kerja. Kita akan menggunakan kueri yang menggunakan tampilan sistem sys.dm_exec_sessions dan sys.resource_governor_workload_groups untuk mengembalikan nama aplikasi dan nama grup beban kerja untuk sesi saat ini.

    1. Di SQL Server Management Studio (SSMS), pilih File pada menu utama, Baru, Kueri Mesin Database.

    2. Dalam dialog Sambungkan ke Mesin Database , tentukan instans Mesin Database yang sama tempat Anda membuat grup beban kerja dan fungsi pengklasifikasi. Pilih tab Parameter Koneksi Tambahan , dan masukkan App=limited_dop_application. Ini membuat SSMS digunakan limited_dop_application sebagai nama aplikasi saat menyambungkan ke instans.

    3. Pilih Sambungkan untuk membuka koneksi baru.

    4. Di jendela kueri yang sama, jalankan kueri berikut:

      SELECT s.program_name AS application_name,
             wg.name AS workload_group_name,
             wg.max_dop
      FROM sys.dm_exec_sessions AS s
      INNER JOIN sys.resource_governor_workload_groups AS wg
      ON s.group_id = wg.group_id
      WHERE s.session_id = @@SPID;
      

      Anda akan melihat output berikut, menunjukkan bahwa sesi diklasifikasikan ke dalam limit_dop grup beban kerja dengan DOP maksimum yang diatur ke empat:

      application_name            workload_group_name     max_dop
      ----------------            -------------------     -------
      limited_dop_application     limit_dop               4
      
    5. Ulangi langkah-langkah di atas, tetapi jangan masukkan apa pun di kotak pada tab Parameter Koneksi Tambahan . Output berubah, memperlihatkan nama aplikasi SSMS default dan default grup beban kerja dengan nilai default 0 untuk DOP maksimum.

      application_name                                    workload_group_name     max_dop
      ----------------                                    -------------------     -------
      Microsoft SQL Server Management Studio - Query      default                 0
      
  6. Untuk kembali ke konfigurasi awal contoh ini, putuskan sambungan semua sesi menggunakan limit_dop grup beban kerja, dan jalankan skrip T-SQL berikut. Skrip mencakup langkah-langkah berikut:

    1. Nonaktifkan gubernur sumber daya sehingga fungsi pengklasifikasi dapat dihilangkan.
    2. Hapus kelompok beban kerja. Ini mengharuskan tidak ada sesi yang menggunakan grup beban kerja ini.
    3. Konfigurasi ulang gubernur sumber daya untuk memuat ulang konfigurasi efektif tanpa fungsi pengklasifikasi dan grup beban kerja. Ini mengaktifkan pengelola sumber daya.
    4. Nonaktifkan gubernur sumber daya untuk kembali ke konfigurasi awal.
    /* Disable resource governor so that the classifier function can be dropped. */
    ALTER RESOURCE GOVERNOR DISABLE;
    ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = NULL);
    DROP FUNCTION IF EXISTS dbo.rg_classifier;
    
    /* Drop the workload group. This requires that no sessions are using this workload group. */
    DROP WORKLOAD GROUP limit_dop;
    
    /* Reconfigure resource governor to reload the effective configuration without the classifier function and the workload group. This enables resource governor. */
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    
    /* Disable resource governor to revert to the initial configuration. */
    ALTER RESOURCE GOVERNOR DISABLE;
    

Menggunakan beberapa kumpulan sumber daya dan grup beban kerja

Contoh ini menggunakan gubernur sumber daya untuk mengklasifikasikan sesi dari aplikasi pemrosesan pesanan ke dalam grup beban kerja dan kumpulan sumber daya yang berbeda tergantung pada waktu hari. Konfigurasi ini mengalokasikan lebih banyak sumber daya ke aplikasi selama waktu pemrosesan puncak, dan membatasi sumber dayanya selama jam libur. Contoh mengasumsikan bahwa aplikasi tidak menggunakan sesi yang berjalan lama.

  1. Buat dua kumpulan sumber daya untuk jam sibuk dan pemrosesan di luar jam kerja.

    • Kumpulan peak_hours_pool menjamin minimal 20% bandwidth CPU rata-rata melalui MIN_CPU_PERCENT, dan tidak membatasi bandwidth CPU dengan menetapkan MAX_CPU_PERCENT ke 100.
    • Pool off_hours_pool tidak memesan bandwidth CPU apa pun dengan mengatur MIN_CPU_PERCENT ke 0, tetapi membatasi bandwidth CPU hingga 50% saat terjadi persaingan CPU dengan mengatur MAX_CPU_PERCENT ke 50.
    CREATE RESOURCE POOL peak_hours_pool
    WITH (
         MIN_CPU_PERCENT = 20,
         MAX_CPU_PERCENT = 100
         );
    
    CREATE RESOURCE POOL off_hours_pool
    WITH (
         MIN_CPU_PERCENT = 0,
         MAX_CPU_PERCENT = 50
         );
    

    Kumpulan sumber daya dapat memesan dan membatasi sumber daya sistem seperti CPU, memori, dan I/O. Untuk informasi selengkapnya, lihat CREATE RESOURCE POOL .

  2. Buat dua grup beban kerja, masing-masing satu untuk setiap kumpulan sumber daya.

    • peak_hours_group tidak membatasi jumlah permintaan bersamaan dengan mengatur GROUP_MAX_REQUESTS ke nilai 0default .
    • off_hours_group membatasi jumlah permintaan bersamaan di semua sesi yang diklasifikasikan dalam grup ini, dengan menetapkan GROUP_MAX_REQUESTS ke 200.
    CREATE WORKLOAD GROUP peak_hours_group
    WITH (
         GROUP_MAX_REQUESTS = 0
         )
    USING peak_hours_pool;
    
    CREATE WORKLOAD GROUP off_hours_group
    WITH (
         GROUP_MAX_REQUESTS = 200
         )
    USING off_hours_pool;
    

    Grup beban kerja menentukan kebijakan seperti jumlah maksimum permintaan, tingkat paralelisme maksimum, dan ukuran peruntukan memori maksimum. Untuk informasi selengkapnya, lihat CREATE WORKLOAD GROUP .

  3. Buat dan isi tabel yang menentukan interval waktu puncak dan di luar jam kerja.

    • Setiap baris dalam tabel menentukan waktu mulai dan berakhir interval, dan nama grup beban kerja yang akan digunakan selama interval.
    • Waktu mulai dan berakhir dari setiap interval bersifat inklusif.
    • Tabel dibuat dalam master database sehingga dapat digunakan dalam fungsi pengklasifikasi terikat skema.
    USE master;
    GO
    
    CREATE TABLE dbo.workload_interval
    (
    workload_group_name sysname NOT NULL,
    start_time time(7) NOT NULL,
    end_time time(7) NOT NULL,
    CONSTRAINT pk_workload_interval PRIMARY KEY (start_time, workload_group_name),
    CONSTRAINT ak_workload_interval_1 UNIQUE (end_time, workload_group_name),
    CONSTRAINT ck_workload_interval_1 CHECK (start_time < end_time)
    );
    GO
    
    INSERT INTO dbo.workload_interval
    VALUES (N'off_hours_group', '00:00', '06:29:59.9999999'),
           (N'peak_hours_group', '06:30', '18:29:59.9999999'),
           (N'off_hours_group', '18:30', '23:59:59.9999999');
    
  4. Buat fungsi pengklasifikasi.

    • Data dalam tabel diharapkan memiliki satu baris yang cocok untuk waktu tertentu dalam sehari. Jika data melanggar aturan tersebut, fungsi akan kembali default sebagai nama grup beban kerja.
    • Contoh fungsi berikut juga mengembalikan default jika nama aplikasi yang dikembalikan oleh fungsi APP_NAME() bawaan adalah apa pun selain order_processing.
    USE master;
    GO
    
    CREATE OR ALTER FUNCTION dbo.rg_classifier()
    RETURNS sysname
    WITH SCHEMABINDING
    AS
    BEGIN
    
    DECLARE @WorkloadGroupName sysname = N'default';
    
    SELECT @WorkloadGroupName = workload_group_name
    FROM dbo.workload_interval
    WHERE APP_NAME() = N'order_processing'
          AND
          CAST(GETDATE() AS time(7)) BETWEEN start_time AND end_time;
    
    IF @@ROWCOUNT > 1
        SELECT @WorkloadGroupName = N'default';
    
    RETURN @WorkloadGroupName;
    
    END;
    GO
    
  5. Ini adalah langkah opsional. Alih-alih membuat tabel dalam master database, Anda bisa menggunakan konstruktor bernilai tabel untuk menentukan interval waktu langsung dalam fungsi pengklasifikasi. Ini adalah pendekatan yang direkomendasikan ketika ukuran data kecil dan kriteria fungsi pengklasifikasi tidak sering diubah. Berikut adalah contoh pengklasifikasi yang sama yang menggunakan konstruktor dengan nilai tabel alih-alih tabel di master.

    USE master;
    GO
    
    CREATE OR ALTER FUNCTION dbo.rg_classifier()
    RETURNS sysname
    WITH SCHEMABINDING
    AS
    BEGIN
    
    DECLARE @WorkloadGroupName sysname = N'default';
    
    SELECT @WorkloadGroupName = workload_group_name
    FROM (
         VALUES (CAST(N'off_hours_group' AS sysname),  CAST('00:00' AS time(7)), CAST('06:29:59.9999999' AS time(7))),
                (CAST(N'peak_hours_group' AS sysname), CAST('06:30' AS time(7)), CAST('18:29:59.9999999' AS time(7))),
                (CAST(N'off_hours_group' AS sysname),  CAST('18:30' AS time(7)), CAST('23:59:59.9999999'AS time(7)))
         ) AS wg (workload_group_name, start_time, end_time)
    WHERE APP_NAME() = N'order_processing'
          AND
          CAST(GETDATE() AS time(7)) BETWEEN start_time AND end_time;
    
    IF @@ROWCOUNT > 1
        SELECT @WorkloadGroupName = N'default';
    
    RETURN @WorkloadGroupName;
    
    END;
    GO
    
  6. Ubah konfigurasi gubernur sumber daya untuk membuat konfigurasi kami efektif, dan aktifkan gubernur sumber daya.

    ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.rg_classifier);
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    
  7. Validasi bahwa gubernur sumber daya diaktifkan, menggunakan fungsi pengklasifikasi yang ditentukan, dan bahwa fungsi pengklasifikasi berfungsi seperti yang diharapkan menggunakan langkah-langkah serupa seperti dalam contoh sebelumnya. Kali ini, kami memasukkan App=order_processing pada tab Parameter Koneksi Tambahan dalam dialog sambungkan SSMS agar sesuai dengan nama aplikasi di fungsi pengklasifikasi. Jalankan kueri berikut untuk menentukan nama aplikasi, grup beban kerja, kumpulan sumber daya, dan reservasi dan batas CPU untuk sesi saat ini:

    SELECT s.program_name AS application_name,
           wg.name AS workload_group_name,
           wg.group_max_requests,
           rp.name AS resource_pool_name,
           rp.min_cpu_percent,
           rp.max_cpu_percent
    FROM sys.dm_exec_sessions AS s
    INNER JOIN sys.resource_governor_workload_groups AS wg
    ON s.group_id = wg.group_id
    INNER JOIN sys.resource_governor_resource_pools AS rp
    ON wg.pool_id = rp.pool_id
    WHERE s.session_id = @@SPID;
    

    Hasilnya tergantung pada waktu hari. Misalnya, jika waktu saat ini adalah 14:30, hasilnya menunjukkan bahwa peak_hours_group dan peak_hours_pool digunakan:

    application_name    workload_group_name     group_max_requests      resource_pool_name      min_cpu_percent     max_cpu_percent
    -----------------   --------------------    ------------------      -------------------     ---------------     ---------------
    order_processing    peak_hours_group        0                       peak_hours_pool         20                  100
    
  8. Untuk kembali ke konfigurasi awal contoh ini, putuskan sambungan semua sesi menggunakan peak_hours_group grup beban kerja dan off_hours_group , dan jalankan skrip T-SQL berikut. Skrip mencakup langkah-langkah berikut:

    1. Nonaktifkan gubernur sumber daya sehingga fungsi pengklasifikasi dapat dihilangkan.
    2. Hapus grup-grup beban kerja. Ini mengharuskan tidak ada sesi yang menggunakan grup beban kerja ini.
    3. Setelah grup beban kerja dihilangkan, hilangkan kumpulan sumber daya.
    4. Konfigurasi ulang pengelola sumber daya untuk menerapkan kembali konfigurasi yang berlaku tanpa fungsi pengklasifikasi dan tanpa grup beban kerja serta kumpulan sumber daya yang ditentukan pengguna. Ini mengaktifkan pengelola sumber daya.
    5. Nonaktifkan gubernur sumber daya untuk kembali ke konfigurasi awal.
    /* Disable resource governor so that the classifier function can be dropped. */
    ALTER RESOURCE GOVERNOR DISABLE;
    ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = NULL);
    DROP FUNCTION IF EXISTS dbo.rg_classifier;
    DROP TABLE IF EXISTS dbo.workload_interval;
    
    /* Drop the workload groups. This requires that no sessions are using these workload groups. */
    DROP WORKLOAD GROUP peak_hours_group;
    DROP WORKLOAD GROUP off_hours_group;
    
    /* Once the workload groups are dropped, drop the resource pools. */
    DROP RESOURCE POOL peak_hours_pool;
    DROP RESOURCE POOL off_hours_pool;
    
    /* Reconfigure resource governor to reload the effective configuration without the classifier function and user-defined workload groups and resource pools. This enables resource governor. */
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    
    /* Disable resource governor to revert to the initial configuration. */
    ALTER RESOURCE GOVERNOR DISABLE;
    

Memantau pengelola sumber daya menggunakan pandangan sistem

Contoh kueri di bagian ini menunjukkan bagaimana Anda dapat memantau statistik dan perilaku waktu proses pengelola sumber daya.

Statistik pengelola sumber daya bersifat kumulatif sejak server terakhir kali dimulai ulang. Jika Anda perlu mengumpulkan statistik mulai dari waktu tertentu, Anda dapat mengatur ulang statistik menggunakan pernyataan .ALTER RESOURCE GOVERNOR RESET STATISTICS

Statistik waktu proses kumpulan sumber daya

Untuk setiap kumpulan sumber daya, gubernur sumber daya melacak pemanfaatan CPU dan memori, peristiwa di luar memori, pemberian memori, I/O, dan statistik lainnya. Untuk informasi selengkapnya, lihat sys.dm_resource_governor_resource_pools.

Kueri berikut mengembalikan subset statistik yang tersedia untuk semua kumpulan sumber daya:

SELECT rp.pool_id,
       rp.name AS resource_pool_name,
       wg.workload_group_count,
       rp.statistics_start_time,
       rp.total_cpu_usage_ms,
       rp.target_memory_kb,
       rp.used_memory_kb,
       rp.out_of_memory_count,
       rp.active_memgrant_count,
       rp.total_memgrant_count,
       rp.total_memgrant_timeout_count,
       rp.read_io_completed_total,
       rp.write_io_completed_total,
       rp.read_bytes_total,
       rp.write_bytes_total,
       rp.read_io_stall_total_ms,
       rp.write_io_stall_total_ms
FROM sys.dm_resource_governor_resource_pools AS rp
OUTER APPLY (
            SELECT COUNT(1) AS workload_group_count
            FROM sys.dm_resource_governor_workload_groups AS wg
            WHERE wg.pool_id = rp.pool_id
            ) AS wg;

Statistik waktu proses grup beban kerja

Untuk setiap grup beban kerja, gubernur sumber daya melacak waktu CPU, jumlah permintaan, tugas yang diblokir, waktu tunggu kunci, pengoptimalan kueri, dan statistik lainnya. Untuk informasi selengkapnya, lihat sys.resource_governor_workload_groups.

Kueri berikut mengembalikan subset statistik yang tersedia untuk semua grup beban kerja:

SELECT wg.name AS workload_group_name,
       rp.name AS resource_pool_name,
       wg.statistics_start_time,
       wg.total_request_count,
       wg.total_cpu_usage_ms,
       wg.blocked_task_count,
       wg.total_lock_wait_time_ms,
       wg.total_query_optimization_count,
       wg.max_request_grant_memory_kb,
       wg.active_parallel_thread_count,
       wg.effective_max_dop,
       wg.request_max_memory_grant_percent_numeric
FROM sys.dm_resource_governor_workload_groups AS wg
INNER JOIN sys.dm_resource_governor_resource_pools AS rp
ON wg.pool_id = rp.pool_id

Sesi agregat menurut grup beban kerja dan atribut sesi

Kueri berikut mengembalikan distribusi sesi di seluruh grup beban kerja dan statistik sesi agregat untuk setiap grup beban kerja.

Jumlah sesi yang tinggi dengan preconnect status mungkin menunjukkan kelambatan dalam eksekusi pengklasifikasi.

SELECT wg.name AS workload_group_name,
       rp.name AS resource_pool_name,
       s.program_name AS application_name,
       s.login_name,
       s.host_name,
       s.status,
       d.name AS database_name,
       MIN(s.login_time) AS first_login_time,
       MAX(s.login_time) AS last_login_time,
       MAX(s.last_request_start_time) AS last_request_start_time,
       COUNT(1) AS session_count
FROM sys.dm_exec_sessions AS s
INNER JOIN sys.dm_resource_governor_workload_groups AS wg
ON s.group_id = wg.group_id
INNER JOIN sys.dm_resource_governor_resource_pools AS rp
ON wg.pool_id = rp.pool_id
INNER JOIN sys.databases AS d
ON s.database_id = d.database_id
GROUP BY wg.name,
         rp.name,
         s.program_name,
         s.login_name,
         s.host_name,
         s.status,
         d.name;

Permintaan agregat berdasarkan grup beban kerja dan atribut permintaan

Kueri berikut mengembalikan distribusi permintaan di seluruh grup beban kerja dan statistik permintaan agregat untuk setiap grup beban kerja:

SELECT wg.name AS workload_group_name,
       rp.name AS resource_pool_name,
       r.command,
       r.status,
       d.name AS database_name,
       COUNT(1) AS request_count,
       MIN(r.start_time) AS first_request_start_time,
       MAX(r.start_time) AS last_request_start_time,
       SUM(CAST(r.total_elapsed_time AS bigint)) AS total_elapsed_time_ms
FROM sys.dm_exec_requests AS r
INNER JOIN sys.dm_resource_governor_workload_groups AS wg
ON r.group_id = wg.group_id
INNER JOIN sys.dm_resource_governor_resource_pools AS rp
ON wg.pool_id = rp.pool_id
INNER JOIN sys.databases AS d
ON r.database_id = d.database_id
GROUP BY wg.name,
         rp.name,
         r.command,
         r.status,
         d.name;

Praktik terbaik pengelola sumber daya

  • Konfigurasikan Koneksi Administrator Khusus (DAC), dan pelajari cara menggunakannya. Untuk informasi selengkapnya, lihat Koneksi diagnostik untuk administrator database. Jika konfigurasi gubernur sumber daya Anda tidak berfungsi, Anda dapat menggunakan DAC untuk memecahkan masalahnya atau menonaktifkan gubernur sumber daya.

  • Saat mengonfigurasi kumpulan sumber daya, berhati-hatilah menentukan nilai besar untuk MIN_CPU_PERCENT, , MIN_MEMORY_PERCENTdan MIN_IOPS_PER_VOLUME. Pengaturan konfigurasi MIN mencadangkan sumber daya untuk kumpulan sumber daya dan memastikan sumber daya tersebut tidak tersedia untuk kumpulan sumber daya lain, termasuk kumpulan default. Untuk informasi selengkapnya, lihat Membuat kumpulan sumber daya.

  • Demikian pula, berhati-hatilah menentukan nilai yang sangat kecil untuk MAX_CPU_PERCENT dan CAP_CPU_PERCENT, atau mengatur MAX_IOPS_PER_VOLUME ke nilai yang jauh lebih kecil daripada yang dapat disediakan subsistem I/O. Beban kerja yang sangat dibatasi yang menggunakan sumber daya bersama dapat memengaruhi beban kerja lain menggunakan sumber daya yang sama. Misalnya, kueri yang dibatasi CPU dapat menahan kunci lebih lama dan menyebabkan rantai pemblokiran yang panjang. Beban kerja yang dibatasi I/O dapat menahan kait pada halaman sistem bersama lebih lama, yang mengakibatkan batas waktu kait untuk beban kerja lainnya.

  • Fungsi pengklasifikasi memperpanjang waktu pemrosesan masuk. Hindari logika yang kompleks dan kueri yang berlangsung lama atau membutuhkan banyak sumber daya di pengklasifikasi, terutama jika kueri menggunakan tabel besar. Fungsi yang terlalu kompleks dapat menyebabkan penundaan login atau batas waktu koneksi.

  • Jika Anda perlu menggunakan tabel di pengklasifikasi, dan tabel kecil dan sebagian besar statis, pertimbangkan untuk menggunakan konstruktor bernilai tabel sebagai gantinya, seperti yang ditunjukkan dalam contoh sebelumnya dalam artikel ini.

  • Hindari menggunakan tabel yang sering dimodifikasi di pengklasifikasi. Itu meningkatkan risiko pemblokiran yang dapat menunda login dan menyebabkan batas waktu koneksi. Solusi berikut dapat mengurangi risiko, namun memiliki kelemahan, termasuk risiko klasifikasi yang salah:

    • Pertimbangkan untuk menggunakan petunjuk tabel NOLOCK, atau petunjuk yang setara READUNCOMMITTED. Untuk informasi selengkapnya, lihat READUNCOMMITTED.
    • Pertimbangkan untuk menggunakan pengaturan LOCK_TIMEOUT di awal fungsi pengklasifikasi, menetapkannya ke nilai kecil seperti 1.000 milidetik. Untuk informasi selengkapnya, lihat SET LOCK_TIMEOUT .
  • Jika Anda menjalankan ALTER RESOURCE GOVERNOR RECONFIGURE setelah menghapus kumpulan sumber daya yang tidak digunakan pada komputer dengan sejumlah besar memori, perintah mungkin memakan waktu lama. Jika fungsi pengklasifikasi berlaku sebelum konfigurasi ulang dimulai, upaya koneksi baru yang dilakukan selama waktu tersebut mungkin kehabisan waktu.

    Jika Anda menghapus kumpulan sumber daya yang tidak digunakan, kami sarankan Anda mengonfigurasi ulang gubernur sumber daya selama jendela pemeliharaan atau periode aktivitas rendah.

  • Anda tidak dapat mengubah fungsi pengklasifikasi saat dirujuk dalam konfigurasi gubernur sumber daya. Namun, Anda dapat memodifikasi konfigurasi untuk menggunakan fungsi pengklasifikasi yang berbeda. Jika Anda ingin membuat perubahan pada pengklasifikasi, pertimbangkan untuk membuat sepasang fungsi pengklasifikasi. Misalnya, Anda dapat membuat dbo.rg_classifier_A() dan dbo.rg_classifier_B(). Saat diperlukan perubahan pada logika pengklasifikasi, ikuti langkah-langkah berikut:

    1. Gunakan pernyataan ALTER FUNCTION untuk membuat perubahan pada fungsi yang saat ini tidak digunakan dalam konfigurasi governor sumber daya.
    2. ALTER RESOURCE GOVERNOR Gunakan pernyataan untuk membuat pengklasifikasi yang dimodifikasi aktif, lalu konfigurasi ulang gubernur sumber daya. Misalnya:
      ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.rg_classifier_B);
      ALTER RESOURCE GOVERNOR RECONFIGURE;
      
    3. Jika perubahan diperlukan lagi, ikuti langkah-langkah yang sama menggunakan fungsi lain (dbo.rg_classifier_A()).
  • Konfigurasi gubernur sumber daya disimpan dalam master database. Pastikan untuk mencadangkan mastersecara berkala , dan tahu cara memulihkannya. Untuk informasi lebih lanjut, lihat Mencadangkan dan memulihkan: Database sistem. Karena ada batasan dalam proses pemulihan master, kami menyarankan agar Anda juga menyimpan salinan skrip konfigurasi pengelola sumber daya secara terpisah. Anda dapat membuat ulang konfigurasi gubernur sumber daya dari skrip jika master database perlu dibangun kembali.