Prosedur tersimpan Cloud SQL

Bagian ini menjelaskan prosedur yang tersimpan untuk instance Cloud SQL.

Prosedur tersimpan berisi kode SQL yang dapat Anda gunakan kembali.

Untuk menjalankan prosedur tersimpan, gunakan perintah CALL dan ganti variabel berikut:

  • procedure_name adalah nama prosedur yang disimpan.
CALL procedure_name(parameters);
Untuk mengetahui informasi selengkapnya, lihat halaman referensi pernyataan CALL.

Untuk membuat prosedur tersimpan, lihat BUAT PROSEDUR dan pernyataan BUAT FUNGSI. Cloud SQL tidak mendukung pernyataan CREATE FUNCTION. Untuk mengetahui informasi selengkapnya, baca Fitur MySQL yang tidak didukung untuk Cloud SQL.

Prosedur tersimpan indeks replika terkelola

Anda dapat menggunakan prosedur tersimpan berikut untuk membuat, mengelola, dan menghapus indeks replika terkelola untuk replika Anda. Saat replika Anda dibuat ulang, indeks ini akan dipulihkan secara otomatis.

Setiap panggilan prosedur tersimpan menjalankan pernyataan COMMIT yang menyelesaikan perubahan dalam sesi Anda saat ini. Akibatnya, pernyataan bahasa pengolahan data (DML) yang dijalankan menggunakan prosedur tersimpan ini tidak dapat di-roll back dalam transaksi.

Untuk mengetahui informasi selengkapnya, lihat Indeks replika terkelola.

mysql.cloudsql_replica_idx_defn_create

Sintaksis

mysql.cloudsql_replica_idx_defn_create(IDXNAME, CREATESTMT)

Deskripsi

Membuat definisi untuk indeks sekunder. Jalankan prosedur tersimpan ini pada instance utama, yang mereplikasi definisi indeks ke replika.

Prosedur tersimpan menampilkan IDXID, ID bilangan bulat unik dari definisi indeks sekunder.

  • IDXNAME – Nama untuk definisi indeks.
  • CREATESTMT – Pernyataan SQL untuk membuat indeks. Harus berupa pernyataan DDL dengan awalan skema (misalnya, schema_name.table_name).

mysql.cloudsql_replica_idx_defn_drop

Sintaksis

mysql.cloudsql_replica_idx_defn_drop(IDXID)

Deskripsi

Menghapus definisi indeks sekunder. Jalankan prosedur tersimpan ini pada instance utama.

  • IDXID – ID bilangan bulat unik dari definisi indeks yang dihapus.

mysql.cloudsql_replica_idx_group_add

Sintaksis

mysql.cloudsql_replica_idx_group_add(IDXID, GRPNAME)

Deskripsi

Menambahkan definisi indeks sekunder ke grup replika. Jalankan prosedur tersimpan ini di instance utama.

  • IDXID – ID bilangan bulat unik dari definisi indeks.
  • GRPNAME – Nama grup replika. GRPNAME adalah nama kustom yang Anda pilih. Jika grup replika tersebut tidak ada, Cloud SQL akan membuat grup replika baru.

mysql.cloudsql_replica_idx_group_drop

Sintaksis

mysql.cloudsql_replica_idx_group_drop(IDXID, GRPNAME)

Deskripsi

Menghapus indeks sekunder dari pemetaan grup replika. Jalankan prosedur tersimpan ini di instance utama.

  • IDXID – ID bilangan bulat unik dari definisi indeks.
  • GRPNAME – Nama grup replika.

mysql.cloudsql_replica_idx_show_status

Sintaksis

mysql.cloudsql_replica_idx_show_status()

Deskripsi

Menampilkan status dan progres operasi pembuatan atau penghapusan indeks yang sedang berlangsung pada instance replika.

Untuk melihat laporan progres yang mendetail, Anda harus mengaktifkan Skema Performa MySQL di instance. Selain itu, Anda harus mengaktifkan instrumen dan konsumen stage dengan menjalankan perintah SQL berikut:

  1. Aktifkan instrumen stage:

    UPDATE performance_schema.setup_instruments
    SET ENABLED = 'YES'
    WHERE NAME LIKE 'stage/innodb/alter%';
  2. Aktifkan konsumen peristiwa tahap:

    UPDATE performance_schema.setup_consumers
    SET ENABLED = 'YES'
    WHERE NAME LIKE 'events_stages_%';

Untuk mengetahui informasi selengkapnya, lihat Contoh Pemantauan ALTER TABLE Menggunakan Performance Schema.

mysql.cloudsql_replica_idx_show_errors

Sintaksis

mysql.cloudsql_replica_idx_show_errors()

Deskripsi

Mencantumkan upaya pembuatan ulang indeks yang gagal dalam eksekusi terakhirnya, yang menampilkan pesan error dan jumlah percobaan ulang pada instance replika. Kegagalan pada satu indeks tidak akan memblokir eksekusi indeks berikutnya dalam antrean.

mysql.cloudsql_replica_idx_show_all

Sintaksis

mysql.cloudsql_replica_idx_show_all()

Deskripsi

Mencantumkan status, jumlah percobaan ulang, durasi eksekusi, dan pesan error untuk semua data pembuatan ulang indeks sekunder replika dalam tabel status metadata. Jalankan prosedur tersimpan ini di instance replika.

Prosedur tersimpan indeks replika yang dikelola sendiri

Prosedur tersimpan berikut memungkinkan Anda menambahkan dan menghapus indeks sekunder secara langsung pada replika, tetapi indeks ini tidak akan dipertahankan jika replika dibuat ulang.

mysql.addSecondaryIdxOnReplica

Sintaks

mysql.addSecondaryIdxOnReplica(IDXTYPE, IDXNAME, TABLENAME, IDXDEFINITION, IDXOPTION)

Deskripsi

Tambahkan indeks sekunder pada database. Prosedur tersimpan ini adalah wrapper untuk pernyataan DDL CREATE INDEX.

  • IDXTYPE – Jenis indeks yang akan dibuat. Misalnya, gunakan UNIQUE untuk membuat indeks unik.
  • IDXNAME – Nama indeks.
  • TABLENAME – Nama tabel dalam format schema_name.table_name.
  • IDXDEFINITION – Definisi indeks. Jangan sertakan tanda kurung bagian luar.
  • IDXOPTION – Semua opsi tambahan yang akan digunakan pada pembuatan indeks. Misalnya, di MySQL 8.0, sebuah opsi dapat menggunakan INVISIBLE untuk indeks tak terlihat.

mysql.dropSecondaryIdxOnReplica

Sintaks

mysql.dropSecondaryIdxOnReplica(IDXNAME, TABLENAME, IDXOPTION)

Deskripsi

Letakkan indeks sekunder pada database. Prosedur tersimpan ini adalah wrapper untuk pernyataan DDL DROP INDEX.

  • IDXNAME – Nama indeks.
  • TABLENAME – Nama tabel dalam format schema_name.table_name.
  • IDXOPTION – Semua opsi tambahan yang akan digunakan saat menurunkan indeks. Misalnya, opsi algoritma seperti INPLACE.

Prosedur tersimpan replikasi server eksternal

Anda dapat menggunakan prosedur tersimpan berikut selama replikasi server eksternal.

mysql.skipReplicationError

Sintaksis

mysql.skipReplicationError()

Deskripsi

Melewati error replikasi yang terjadi selama replikasi server eksternal, lalu melanjutkan replikasi.

Anda dapat menjalankan prosedur tersimpan ini hanya jika Anda mengalami error replikasi dan thread I/O serta SQL dihentikan.

Prosedur tersimpan ini melakukan hal berikut:

  1. Menentukan apakah replikasi berbasis GTID atau berbasis posisi log biner yang digunakan.

  2. Jika replikasi paralel digunakan, prosedur tersimpan akan memanggil START_SLAVE_UNTIL_SQL_AFTER_MTS_GAPS atau START_REPLICA UNTIL_SQL_AFTER_MTS_GAPS terlebih dahulu untuk memastikan tidak ada kesenjangan dalam transaksi yang diterapkan hingga transaksi yang gagal. Prosedur ini kemudian menetapkan konfigurasi replikasi ke single-threaded untuk sementara.

  3. Untuk replikasi berbasis posisi log biner, prosedur ini menetapkan SQL_SLAVE_SKIP_COUNTER atau SQL_REPLICA_SKIP_COUNTER = 1 untuk melewati transaksi saat ini.

  4. Untuk replikasi berbasis GTID, prosedur tersimpan menentukan GTID transaksi yang gagal saat ini berdasarkan informasi dalam variabel status gtid_executed. Prosedur ini kemudian menyisipkan transaksi kosong untuk mengisi ulang GTID tersebut.

  5. Jika replikasi paralel sebelumnya dinonaktifkan, prosedur tersimpan akan mengaktifkan kembali replikasi paralel.

  6. Prosedur tersimpan akan melanjutkan replikasi.

Tabel mysql.skip_replication_error_history mencatat semua pemanggilan prosedur tersimpan ini ke dalam log.

Langkah berikutnya