PolarDB for MySQL menyediakan fitur kontrol sumber daya yang memungkinkan Anda membuat aturan untuk membatasi penggunaan CPU berdasarkan pengguna, database, atau ID koneksi tertentu. Fitur ini membantu mengurangi dampak bisnis akibat lonjakan lalu lintas dan memungkinkan penerapan batasan sumber daya secara cepat pada kueri besar.
Batasan versi
Hanya kluster Edisi Perusahaan yang didukung.
Untuk kluster Edisi Kluster:
PolarDB for MySQL 8.0.1 dengan versi revisi 8.0.1.1.48 atau lebih baru.
PolarDB for MySQL 8.0.2 dengan versi revisi 8.0.2.2.27 atau lebih baru.
Untuk kluster Multi-master Cluster (Limitless):
PolarDB for MySQL 8.0.1 dengan versi revisi 8.0.1.0.33 atau lebih baru.
Catatan
Fitur Resource Control PolarDB berbeda dari fitur Resource Group resmi MySQL. Keduanya menggunakan mekanisme yang berbeda untuk mengontrol penggunaan sumber daya dalam sebuah kluster:
Fitur Resource Control PolarDB membatasi sumber daya berdasarkan database, pengguna database, dan koneksi database. Fitur ini sangat cocok untuk database cloud-native.
Fitur Resource Group resmi MySQL memungkinkan Anda menetapkan jumlah core CPU dan prioritas utas untuk kelompok sumber daya yang berbeda. Untuk informasi selengkapnya, lihat dokumen resmi MySQL Resource Groups. Fitur ini saat ini tidak didukung di PolarDB for MySQL.
Untuk menggunakan fitur Resource Control, Anda harus mengaktifkan fitur Thread Pool.
Node read-only (RO) melakukan sinkronisasi asinkron informasi kontrol sumber daya dari node read-write (RW). Oleh karena itu, penundaan mungkin terjadi.
Penggunaan
Setelah terhubung ke kluster database PolarDB, masuk dengan Akun istimewa.
Aktifkan fitur Resource Control
Metode untuk mengubah parameter kluster PolarDB berbeda antara Konsol dan sesi database. Perbedaannya sebagai berikut:
Kompatibilitas: Untuk kompatibilitas dengan file konfigurasi MySQL, beberapa parameter kluster di Konsol PolarDB memiliki awalan loose_.
Prosedur: Temukan dan ubah parameter yang memiliki awalan
loose_.
Di sesi database (menggunakan command line atau client)
Prosedur: Saat menggunakan perintah
SETuntuk mengubah parameter dalam sesi database, hapus awalanloose_dan gunakan nama parameter aslinya.
Nama parameter | Tingkat | Deskripsi |
| Global | Mengaktifkan atau menonaktifkan fitur Resource Control untuk kluster.
|
Buat kontrol sumber daya
CREATE polar_resource_control <rc_name> max_cpu <max_cpu_value>;Parameter:
Parameter | Deskripsi |
rc_name | Nama kontrol resource yang akan dibuat. Panjang maksimum adalah 64 karakter. |
max_cpu_value | CPU maksimum untuk kontrol resource tersebut. Nilainya merupakan persentase dari total CPU kluster. Rentang nilai: 1 hingga 100. |
Setelah kontrol sumber daya dibuat, Anda dapat menjalankan kueri SQL berikut dari akun dengan hak istimewa tinggi untuk melihat semua kontrol sumber daya.
SELECT * FROM mysql.polar_resource_control;Anda juga dapat menjalankan kueri SQL berikut dari akun dengan hak istimewa tinggi untuk mengambil Thread Groups di bawah kontrol sumber daya tertentu.
SELECT id, resource_control_name FROM information_schema.thread_pool_status;Perbarui kontrol sumber daya
ALTER polar_resource_control <rc_name> max_cpu <max_cpu_value>;Deskripsi:
Parameter | Deskripsi |
rc_name | Nama kontrol sumber daya. Nama dapat memiliki panjang hingga 64 karakter. |
max_cpu_value | Penggunaan CPU maksimum baru yang diizinkan oleh kontrol sumber daya. Tentukan nilai sebagai persentase dari total kapasitas CPU kluster. Nilai valid: 1 hingga 100. |
Setelah memperbarui penggunaan CPU maksimum yang diizinkan oleh kontrol sumber daya, jumlah grup utas yang terkait mungkin berubah.
Hapus Resource Control
DROP polar_resource_control <rc_name>;Deskripsi:
Parameter | Deskripsi |
rc_name | Nama Resource Control yang akan dihapus. |
Setelah kontrol sumber daya dihapus, thread group yang terkait dilepaskan. Pengguna, database, atau koneksi yang sebelumnya dibatasi oleh kontrol tersebut tidak lagi dikenai pembatasan.
Tetapkan kontrol resource untuk pengguna atau database
Attach
SET polar_resource_control <rc_name> FOR [database|USER] <db_name/user_name>;Pernyataan SQL-nya adalah sebagai berikut:
Parameter | Deskripsi |
rc_name | Nama kontrol resource yang akan diterapkan. |
db_name/user_name | Database atau pengguna yang ingin Anda terapkan kontrol sumber dayanya. |
Setelah pernyataan ini dieksekusi, database atau pengguna yang ditentukan akan dikenai batasan sumber daya CPU yang ditetapkan oleh kontrol tersebut. Perubahan ini tidak memengaruhi pernyataan yang sedang berjalan, melainkan hanya berlaku untuk pernyataan yang dieksekusi setelah kontrol diterapkan.
Detach
RELEASE polar_resource_control <rc_name> FOR [database|USER] db_name/user_name>;Setelah pernyataan ini dieksekusi, database atau pengguna yang ditentukan tidak lagi dibatasi oleh batasan sumber daya CPU dari kontrol tersebut. Pernyataan yang sudah berjalan tetap dikenai batasan, sedangkan pernyataan yang dimulai setelah kontrol dilepas tidak dikenai batasan tersebut.
Konfigurasikan kontrol sumber daya untuk query atau koneksi
Attach
SET polar_resource_control <rc_name> FOR [query|connection] <connection_id>;Parameter:
Parameter | Deskripsi |
rc_name | Nama Resource Control yang akan disambungkan. |
connection_id | ID koneksi yang akan dibatasi. |
Saat menyambungkan Resource Control ke kueri, Anda dapat menjalankan
SHOW PROCESSLISTuntuk melihat ID koneksi yang sesuai. Setelah kueri selesai, kueri tersebut tidak lagi dibatasi oleh Resource Control.Saat menyambungkan Resource Control ke koneksi, batasan sumber daya tetap aktif setelah kueri saat ini selesai dan berlaku hingga koneksi ditutup.
Release
RELEASE polar_resource_control <rc_name> FOR [query|connection] <connection_id>;Parameter:
Parameter | Deskripsi |
rc_name | Nama kontrol resource yang akan disambungkan. |
connection_id | ID koneksi yang akan dibatasi. |
Saat melepaskan Resource Control dari kueri, kueri tersebut tidak lagi dibatasi oleh kontrol tersebut. Setelah kueri selesai, koneksi tidak dibatasi jika tidak ada Resource Control lain yang berlaku.
Setelah melepaskan Resource Control dari koneksi, koneksi tersebut kemudian dibatasi oleh Resource Control yang berlaku untuk koneksi, pengguna, atau database tersebut. Jika tidak ada Resource Control lain yang berlaku, koneksi tidak dibatasi.
Prioritas kontrol resource
Kontrol sumber daya diterapkan pada pernyataan kueri mengikuti urutan prioritas berikut. Prioritas pertama yang cocok digunakan.
Kontrol yang secara eksplisit disambungkan ke kueri berdasarkan ID koneksi-nya. Ini memiliki prioritas tertinggi.
Menentukan apakah koneksi saat ini disambungkan ke kontrol sumber daya dan menerapkan batasan sesuai ketentuan.
Sistem memeriksa apakah pengguna yang terhubung disambungkan ke kontrol sumber daya. Jika ya, batasan diterapkan.
Jika database yang terhubung saat ini disambungkan ke kontrol sumber daya, sistem menerapkan batasan tersebut.
Jika tidak ada kondisi di atas yang terpenuhi, batasan sumber daya tidak diterapkan.
Menggunakan kluster multi-master
Kluster Multi-master berfungsi sama seperti kluster single-master, dan sintaksnya sepenuhnya kompatibel. Saat mengeksekusi pernyataan CREATE POLAR_RESOURCE_CONTROL, ALTER POLAR_RESOURCE_CONTROL, atau DROP POLAR_RESOURCE_CONTROL, pernyataan tersebut secara acak diteruskan ke node read/write di kluster. Pernyataan tersebut kemudian disinkronkan ke semua node read/write, yang mungkin menyebabkan latensi. Untuk membatasi sumber daya untuk kueri atau koneksi, Anda dapat menggunakan sintaks HINT untuk menentukan node tertentu.
Praktik Terbaik
Skenario
Mencegah pengguna jahat mengonsumsi sumber daya kluster secara berlebihan.
Mengatasi kueri lambat yang tiba-tiba muncul.
Mencegah pengguna jahat memicu penskalaan otomatis di kluster Serverless.
Membatasi penggunaan CPU di lingkungan multi-tenant atau saat layanan berbeda berbagi satu kluster.
Contoh penggunaan
Cegah pengguna jahat mengonsumsi resource kluster secara berlebihan
Untuk menangani pengguna jahat, Anda dapat menetapkan batasan sumber daya CPU untuk mereka, baik secara proaktif maupun sebagai respons terhadap aktivitas jahat.
CREATE polar_resource_control rc_for_trouble_user max_cpu 10; SET polar_resource_control rc_for_trouble_user FOR USER trouble_user;Setelah menetapkan kontrol sumber daya untuk pengguna
trouble_user, utas milik pengguna tersebut dapat menggunakan maksimal 10% dari total CPU kluster. Hal ini secara efektif mencegah pengguna jahat mengonsumsi sumber daya CPU secara berlebihan dan memengaruhi layanan lain.Atasi kueri lambat yang tiba-tiba muncul
Kueri lambat yang tidak terduga kadang muncul di lingkungan produksi, biasanya akibat penguraian atau optimasi SQL yang salah sehingga meningkatkan beban CPU. Akibatnya, kueri berjalan lama dan mengonsumsi sumber daya CPU signifikan. Meskipun Anda dapat menghentikan kueri dengan perintah
kill, Anda harus menunggu kueri mencapai titik tertentu dalam eksekusinya, yang memakan waktu. Selain itu, proses rollback transaksi selama operasikilljuga mengonsumsi sumber daya CPU dan memakan waktu. Untuk cepat mengurangi beban CPU dari kueri lambat atau mencegah CPU terpakai penuh, Anda dapat menerapkan batasan penggunaan CPU pada kueri tersebut.CREATE polar_resource_control rc_for_slow_query max_cpu 10; SET polar_resource_control rc_for_slow_query FOR query query_id;CatatanSaat menetapkan kontrol sumber daya untuk kueri lambat, Anda dapat menemukan
query_id-nya dengan menjalankanSHOW PROCESSLIST.Setelah menetapkan kontrol sumber daya untuk kueri lambat dengan ID
query_id, penggunaan CPU maksimum kueri tersebut dibatasi hingga 10% dari total CPU kluster. Hal ini secara cepat mengurangi beban CPU kluster dan mencegah kueri memengaruhi layanan produksi lainnya.Kluster PolarDB dapat memiliki beberapa node komputasi, dan node berbeda mungkin memiliki kueri dengan ID koneksi yang sama. Oleh karena itu, saat menetapkan kontrol sumber daya untuk kueri, gunakan sintaks HINT untuk menerapkan pengaturan ke node tertentu.
/*force_node='pi-bpxxxxxxxx'*/ SET polar_resource_control rc_for_slow_query FOR query query_id;Cegah pengguna jahat memicu penskalaan kluster di kluster serverless
Saat kluster berada dalam mode Serverless, kluster tersebut secara otomatis diskalakan berdasarkan beban kerja untuk menangani lonjakan beban tinggi yang tiba-tiba. Namun, Anda mungkin ingin mencegah kluster diskalakan sebagai respons terhadap permintaan dari pengguna jahat. Dalam kasus ini, Anda dapat menerapkan batasan sumber daya kepada pengguna jahat tersebut di kluster serverless.
CREATE polar_resource_control rc_for_trouble_user max_cpu 10; SET polar_resource_control rc_for_trouble_user FOR USER trouble_user;Batasi penggunaan CPU di kluster multi-tenant atau multi-layanan
Dalam skenario Software as a Service (SaaS), beberapa penyewa sering kali berjalan di kluster yang sama. Umum pula bagi layanan bisnis berbeda untuk berbagi satu kluster. Dalam situasi ini, penting untuk membatasi sumber daya yang dapat digunakan oleh satu penyewa atau layanan agar tidak mengonsumsi CPU terlalu banyak dan memengaruhi kinerja keseluruhan kluster. Untuk melakukannya, Anda dapat menetapkan batasan sumber daya CPU terpisah untuk setiap layanan, misalnya dengan menerapkan batasan per pengguna atau per database.
CREATE polar_resource_control rc_for_business_1 max_cpu 20; CREATE polar_resource_control rc_for_business_2 max_cpu 20; SET polar_resource_control rc_for_business_1 FOR USER user_1; SET polar_resource_control rc_for_business_2 FOR USER user_2;Berdasarkan pengaturan ini, layanan yang digunakan oleh
user_1danuser_2masing-masing dibatasi hingga maksimal 20% dari total CPU kluster. Oleh karena itu, kedua pengguna tersebut dapat menggunakan gabungan maksimal 40% dari sumber daya CPU. Jika beban kerja untukuser_1tiba-tiba meningkat, penggunaan CPU-nya tetap dibatasi pada 20%, sehingga memastikan layanan lain di kluster tidak terpengaruh.Jika satu layanan menggunakan beberapa pengguna, Anda dapat menetapkan kontrol sumber daya yang sama untuk semuanya.
CREATE polar_resource_control rc_for_business_1 max_cpu 20; SET polar_resource_control rc_for_business_1 FOR USER user_1; SET polar_resource_control rc_for_business_1 FOR USER user_2;Berdasarkan pengaturan ini, layanan yang digunakan oleh
user_1danuser_2dibatasi hingga maksimal 20% dari total CPU kluster. Oleh karena itu, kedua pengguna tersebut dapat menggunakan gabungan maksimal 20% dari sumber daya CPU. Hal ini mencegah layanan melebihi batas CPU-nya saat beban kerja salah satu pengguna meningkat dan memastikan alokasi sumber daya yang adil.