Mengelola alokasi CPU dengan grup resource MySQL

Dokumen ini menjelaskan cara mengonfigurasi dan menggunakan grup resource MySQL di Cloud SQL untuk MySQL guna mengelola dan memprioritaskan alokasi resource CPU untuk berbagai kebutuhan pemrosesan data Anda.

Ringkasan

Grup resource MySQL, yang diperkenalkan di MySQL 8.0, memungkinkan Anda mengelola dan memprioritaskan alokasi resource CPU di antara berbagai thread yang berjalan pada satu instance database. Hal ini berguna untuk mengurangi masalah "tetangga berisik" di mana tugas berprioritas rendah, seperti analisis harian atau laporan batch, dapat meningkatkan penggunaan CPU dan menurunkan performa koneksi klien yang penting dan berprioritas tinggi, seperti pemrosesan transaksi online (OLTP).

Grup resource didukung di semua instance Cloud SQL untuk MySQL 8.0 dan yang lebih baru, baik edisi Cloud SQL Enterprise maupun edisi Cloud SQL Enterprise Plus.

Perbedaan antara grup resource MySQL komunitas dan Cloud SQL

Cloud SQL untuk MySQL adalah layanan yang terkelola sepenuhnya. Untuk membantu memastikan keandalan instance dan melindungi proses internal Cloud SQL, perbedaan dan batasan berikut berlaku dibandingkan dengan perilaku MySQL komunitas:

Afinitas inti CPU tidak didukung

Menentukan penyambungan CPU tingkat inti tidak didukung. Misalnya, Anda tidak dapat menentukan VCPU = 2-3 atau VCPU = 0 saat membuat grup resource di Cloud SQL untuk MySQL. Karena topologi core VM yang mendasarinya diabstrakkan, setiap upaya untuk menggunakan klausa VCPU dalam pernyataan CREATE RESOURCE GROUP atau ALTER RESOURCE GROUP akan gagal dengan error penolakan akses berikut.

ERROR 1227 (42000): Access denied; This operation (CPU clause) is not allowed on the Cloud SQL environment. Only THREAD_PRIORITY allowed;

Grup resource sistem yang dilarang

Pembuatan grup resource sistem tidak didukung di Cloud SQL. Hanya grup resource tingkat pengguna (TYPE = USER) yang diizinkan, dengan prioritas thread mulai dari 0 (prioritas pengguna tertinggi) hingga 19 (prioritas pengguna terendah).

Grup resource sistem dilarang untuk mencegah workload pengguna membuat tugas latar belakang Cloud SQL yang penting seperti pencadangan, pemantauan, dan replikasi tidak berjalan.

Menjalankan perintah CREATE RESOURCE GROUP dengan TYPE = SYSTEM akan gagal dengan error berikut:

ERROR 1227 (42000): Access denied; This operation (TYPE=SYSTEM) is not allowed on the Cloud SQL environment. Only TYPE=USER is allowed;

Logging biner dan replikasi DDL grup resource otomatis

Di MySQL komunitas, operasi grup resource seperti CREATE, ALTER, dan DROP RESOURCE GROUP tidak pernah ditulis ke log biner. Cloud SQL menggantikan perilaku default ini sehingga semua perintah definisi grup resource ditulis ke log biner.

Hal ini memastikan bahwa grup resource direplikasi secara otomatis ke replika baca, yang memungkinkan Anda menggunakan petunjuk pengoptimal kueri (atau petunjuk RESOURCE_GROUP) pada replika untuk membantu menghindari kegagalan kueri karena grup yang tidak ada. Definisi grup juga dicatat dalam aliran log biner untuk pemulihan point-in-time (PITR).

Penetapan sesi thread seperti SET RESOURCE GROUP tidak ditulis ke log biner.

Hak istimewa administratif diberikan kepada cloudsqlsuperuser

Untuk menggunakan grup resource, Anda memerlukan hak istimewa database administratif berikut:

  • RESOURCE_GROUP_ADMIN: membuat, mengubah, dan menghapus grup resource
  • RESOURCE_GROUP_USER: menetapkan thread atau menggunakan petunjuk dalam kueri

Di Cloud SQL, kedua hak istimewa diberikan secara default ke peran cloudsqlsuperuser.

Administrator MySQL juga dapat memberikan hak istimewa database RESOURCE_GROUP_USER atau RESOURCE_GROUP_ADMIN kepada pengguna lain.

Mengelola grup resource di Cloud SQL

Anda dapat mengonfigurasi dan mengelola grup resource tingkat pengguna di Cloud SQL untuk mengoptimalkan alokasi resource di database Anda. Dengan demikian, Anda dapat mengontrol dan memprioritaskan alokasi resource CPU di antara berbagai workload sesi database pada instance.

Untuk mengetahui detail selengkapnya tentang konfigurasi grup resource MySQL, dan perilaku referensi, lihat Grup Resource di dokumentasi MySQL.

Untuk mengelola grup resource di Cloud SQL, Anda dapat melakukan hal berikut:

Sebelum memulai

Sebelum Anda membuat grup resource, verifikasi hal berikut:

  • Anda login ke database dengan akun pengguna yang memiliki hak istimewa RESOURCE_GROUP_ADMIN. Pengguna root default dan akun database yang diberi peran cloudsqlsuperuser memiliki hak istimewa ini secara default.

  • Instance Cloud SQL Anda menjalankan MySQL 8.0 atau yang lebih tinggi.

Membuat grup resource

Buat grup resource tingkat pengguna dengan prioritas thread antara 0 (prioritas tertinggi) dan 19 (prioritas terendah). Prioritas thread default untuk koneksi standar adalah 0.

Untuk membuat grup resource, jalankan pernyataan berikut:

CREATE RESOURCE GROUP GROUP_NAME
  TYPE = USER
  THREAD_PRIORITY = PRIORITY_VALUE;

Ganti kode berikut:

  • GROUP_NAME: nama grup resource yang ingin Anda buat.
  • PRIORITY_VALUE: prioritas penjadwalan CPU untuk grup resource, dari 0 (prioritas tertinggi) hingga 19 (prioritas terendah).

Mengubah prioritas grup resource

Untuk mengubah prioritas penjadwalan CPU dari grup resource yang ada, jalankan pernyataan berikut:

ALTER RESOURCE GROUP GROUP_NAME
  THREAD_PRIORITY = PRIORITY_VALUE;

Ganti kode berikut:

  • GROUP_NAME: nama grup resource yang ingin Anda ubah.
  • PRIORITY_VALUE: prioritas penjadwalan CPU baru.

Menghapus grup resource

Untuk menghapus grup resource, jalankan pernyataan berikut:

DROP RESOURCE GROUP GROUP_NAME;

Ganti kode berikut:

  • GROUP_NAME: nama grup resource yang ingin Anda hapus.

Menetapkan koneksi dan kueri ke grup resource

Untuk menerapkan batasan resource pada beban kerja, tetapkan koneksi aktif atau kueri tertentu ke grup resource pengguna Anda.

Untuk menetapkan koneksi sesi ke grup:

  1. Berikan izin kepada pengguna beban kerja:

    GRANT RESOURCE_GROUP_USER ON *.* TO 'USERNAME'@'%';

    Ganti kode berikut:

    • USERNAME: pengguna database yang ingin Anda beri hak istimewa.
  2. Saat pengguna terhubung, jalankan:

    SET RESOURCE GROUP GROUP_NAME;

    Ganti kode berikut:

    • GROUP_NAME: nama grup resource yang ingin Anda tetapkan koneksinya.

    Atau, tentukan ID rangkaian pesan tertentu:

    SET RESOURCE GROUP GROUP_NAME FOR THREAD_ID;

    Ganti kode berikut:

    • GROUP_NAME: nama grup resource yang ingin Anda tetapkan koneksinya.
    • THREAD_ID: ID thread database tertentu yang ingin Anda tetapkan.

Untuk menetapkan satu kueri ke grup (melalui petunjuk pengoptimal):

Gunakan petunjuk komentar pengoptimal RESOURCE_GROUP dalam pernyataan DML atau SELECT Anda:

SELECT /*+ RESOURCE_GROUP(GROUP_NAME) */
  COLUMN_NAME_1,
  SUM(COLUMN_NAME_2)
FROM TABLE_NAME
GROUP BY COLUMN_NAME_1;

Ganti kode berikut:

  • GROUP_NAME: nama grup resource tempat Anda ingin menjalankan kueri.
  • COLUMN_NAME_1: kolom yang ingin Anda gunakan untuk mengelompokkan hasil.
  • COLUMN_NAME_2: nilai kolom yang ingin Anda jumlahkan.
  • TABLE_NAME: tabel yang ingin Anda kueri.

Memantau grup resource

Untuk memeriksa grup resource yang dikonfigurasi:

SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS;

Untuk melihat thread koneksi aktif dan grup resource yang ditetapkan, jalankan kueri berikut:

SELECT THREAD_ID, NAME, TYPE, RESOURCE_GROUP
  FROM performance_schema.threads;

Langkah berikutnya