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
- Grup resource sistem yang dilarang
- Logging biner dan replikasi otomatis DDL grup resource
- Hak istimewa administratif yang telah diberikan
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 resourceRESOURCE_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:
- Membuat grup resource: membuat grup resource tingkat pengguna dan menentukan prioritas thread kustom.
- Mengubah prioritas grup resource: menyesuaikan prioritas penjadwalan CPU dari grup resource tingkat pengguna yang ada.
- Menghapus grup resource: menghapus grup resource jika tidak lagi diperlukan.
- Menetapkan koneksi dan kueri ke grup resource: memetakan sesi aktif, pengguna database, atau kueri tertentu ke grup resource.
- Memantau grup resource: periksa grup resource yang dikonfigurasi dan alokasi thread.
Sebelum memulai
Sebelum Anda membuat grup resource, verifikasi hal berikut:
Anda login ke database dengan akun pengguna yang memiliki hak istimewa
RESOURCE_GROUP_ADMIN. Penggunarootdefault dan akun database yang diberi perancloudsqlsuperusermemiliki 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, dari0(prioritas tertinggi) hingga19(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:
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.
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
- Memantau instance Cloud SQL
- Menggunakan insight sistem untuk meningkatkan performa sistem
- Mengoptimalkan penggunaan CPU yang tinggi
- Menggunakan insight kueri untuk meningkatkan performa kueri
- Memantau kueri aktif