Gespeicherte Cloud SQL-Prozeduren

In diesem Abschnitt werden gespeicherte Prozeduren für Cloud SQL-Instanzen beschrieben.

Eine gespeicherte Prozedur beinhaltet einen SQL-Code, den Sie wiederverwenden können.

Verwenden Sie zum Ausführen der gespeicherten Prozedur den Befehl CALL und ersetzen Sie die folgende Variable:

  • procedure_name: der Name des gespeicherten Verfahrens.
CALL procedure_name(parameters);
Weitere Informationen finden Sie auf der Referenzseite zur CALL-Anweisung.

Informationen zum Erstellen einer gespeicherten Prozedur finden Sie unter denCREATE PROCEDURE- und CREATE FUNCTION-Anweisungen. Cloud SQL unterstützt die CREATE FUNCTION-Anweisung nicht. Weitere Informationen finden Sie unter Nicht unterstützte MySQL-Features für Cloud SQL.

Gespeicherte Prozeduren für verwaltete Replikatindexe

Mit den folgenden gespeicherten Prozeduren können Sie verwaltete Replikatindexe für Ihre Replikate erstellen, verwalten und löschen. Wenn Ihre Replikate neu erstellt werden, werden diese Indexe automatisch wiederhergestellt.

Bei jedem Aufruf einer gespeicherten Prozedur wird eine COMMIT-Anweisung ausgeführt, mit der die Änderungen in der aktuellen Sitzung abgeschlossen werden. Daher können DML-Anweisungen (Datenbearbeitungssprache), die mit diesen gespeicherten Prozeduren ausgeführt werden, nicht innerhalb einer Transaktion rückgängig gemacht werden.

Weitere Informationen finden Sie unter Verwaltete Replikatindexe.

mysql.cloudsql_replica_idx_defn_create

Syntax

mysql.cloudsql_replica_idx_defn_create(IDXNAME, CREATESTMT)

Beschreibung

Erstellt eine Definition für einen sekundären Index. Führen Sie diese gespeicherte Prozedur auf der primären Instanz aus, um die Indexdefinition auf die Replikate zu replizieren.

Die gespeicherte Prozedur gibt eine IDXID zurück, eine eindeutige Ganzzahl-ID der Definition des sekundären Index.

  • IDXNAME: Name für die Indexdefinition.
  • CREATESTMT: SQL-Anweisung zum Erstellen des Index. Muss eine DDL-Anweisung mit Schema-Präfix (z. B. schema_name.table_name) sein.

mysql.cloudsql_replica_idx_defn_drop

Syntax

mysql.cloudsql_replica_idx_defn_drop(IDXID)

Beschreibung

Löscht eine sekundäre Indexdefinition. Führen Sie diese gespeicherte Prozedur auf der primären Instanz aus.

  • IDXID: Eindeutige Ganzzahl-ID der Indexdefinition des gelöschten Index.

mysql.cloudsql_replica_idx_group_add

Syntax

mysql.cloudsql_replica_idx_group_add(IDXID, GRPNAME)

Beschreibung

Fügt einer Replikatgruppe eine sekundäre Indexdefinition hinzu. Führen Sie diese gespeicherte Prozedur auf der primären Instanz aus.

  • IDXID: Eindeutige Ganzzahl-ID der Indexdefinition.
  • GRPNAME: Name der Replikatgruppe. GRPNAME ist ein benutzerdefinierter Name, den Sie auswählen. Wenn diese Replikatgruppe nicht vorhanden ist, erstellt Cloud SQL eine neue.

mysql.cloudsql_replica_idx_group_drop

Syntax

mysql.cloudsql_replica_idx_group_drop(IDXID, GRPNAME)

Beschreibung

Löscht einen sekundären Index aus einer Replikationsgruppenzuordnung. Führen Sie diese gespeicherte Prozedur auf der primären Instanz aus.

  • IDXID: Eindeutige Ganzzahl-ID der Indexdefinition.
  • GRPNAME: Name der Replikatgruppe.

mysql.cloudsql_replica_idx_show_status

Syntax

mysql.cloudsql_replica_idx_show_status()

Beschreibung

Zeigt den Status und Fortschritt laufender Indexerstellungs- oder Löschvorgänge auf einer Replikatinstanz an.

Wenn Sie einen detaillierten Fortschrittsbericht aufrufen möchten, müssen Sie das MySQL-Leistungsschema auf der Instanz aktivieren. Außerdem müssen Sie die Stage-Instrumente und -Nutzer aktivieren. Führen Sie dazu die folgenden SQL-Befehle aus:

  1. Aktivieren Sie die Stage-Instrumente:

    UPDATE performance_schema.setup_instruments
    SET ENABLED = 'YES'
    WHERE NAME LIKE 'stage/innodb/alter%';
  2. Aktivieren Sie die Stage-Ereignis-Consumer:

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

Weitere Informationen finden Sie unter Beispiel für das Monitoring von ALTER TABLE mit dem Leistungsschema.

mysql.cloudsql_replica_idx_show_errors

Syntax

mysql.cloudsql_replica_idx_show_errors()

Beschreibung

Listet Versuche zur Neuerstellung von Indexen auf, die bei der letzten Ausführung fehlgeschlagen sind, und zeigt Fehlermeldungen und die Anzahl der Wiederholungsversuche auf einer Replikatinstanz an. Ein Fehler bei einem Index blockiert nicht die Ausführung nachfolgender Indexe in der Warteschlange.

mysql.cloudsql_replica_idx_show_all

Syntax

mysql.cloudsql_replica_idx_show_all()

Beschreibung

Listet den Status, die Anzahl der Wiederholungsversuche, die Ausführungsdauer und die Fehlermeldungen für alle Datensätze zur Neuerstellung von sekundären Replikatindexen in der Metadatenstatustabelle auf. Führen Sie diese gespeicherte Prozedur auf einer Replikatinstanz aus.

Gespeicherte Prozeduren für selbstverwaltete Replikatindexe

Mit den folgenden gespeicherten Prozeduren können Sie sekundäre Indexe direkt auf einem Replikat hinzufügen und löschen. Diese Indexe bleiben jedoch nicht erhalten, wenn das Replikat neu erstellt wird.

mysql.addSecondaryIdxOnReplica

Syntax

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

Beschreibung

Fügt einen sekundären Index zur Datenbank hinzu. Diese gespeicherte Prozedur ist ein Wrapper für die DDL-Anweisung CREATE INDEX.

  • IDXTYPE: Typ des Index, der erstellt werden soll. Übergeben Sie beispielsweise UNIQUE, um einen eindeutigen Index zu erstellen.
  • IDXNAME: Name des Index.
  • TABLENAME: Name der Tabelle im Format schema_name.table_name.
  • IDXDEFINITION: Definition des Index. Verwenden Sie keine äußeren Klammern.
  • IDXOPTION: Zusätzliche Optionen, die zur Erstellung des Index übergeben werden sollen. In MySQL 8.0 könnte eine Option beispielsweise INVISIBLE für einen unsichtbaren Index übergeben.

mysql.dropSecondaryIdxOnReplica

Syntax

mysql.dropSecondaryIdxOnReplica(IDXNAME, TABLENAME, IDXOPTION)

Beschreibung

Löscht einen sekundären Index für die Datenbank. Diese gespeicherte Prozedur ist ein Wrapper für die DDL-Anweisung DROP INDEX.

  • IDXNAME: Name des Index.
  • TABLENAME: Name der Tabelle im Format schema_name.table_name.
  • IDXOPTION: Zusätzliche Optionen, die beim Löschen eines Index übergeben werden sollen. Beispiel: eine Algorithmusoption wie INPLACE.

Gespeicherte Prozeduren für die Replikation externer Server

Sie können die folgende gespeicherte Prozedur während der Replikation des externen Servers verwenden.

mysql.skipReplicationError

Syntax

mysql.skipReplicationError()

Beschreibung

Überspringt einen Replikationsfehler, der während der Replikation des externen Servers aufgetreten ist, und setzt dann die Replikation fort.

Sie können diese gespeicherte Prozedur nur ausführen, wenn ein Replikationsfehler aufgetreten ist und die E/A- und SQL-Threads beendet wurden.

Diese gespeicherte Prozedur führt Folgendes aus:

  1. Bestimmt, ob eine GTID-basierte oder eine auf der Position des binären Logs basierende Replikation verwendet wird.

  2. Wenn die parallele Replikation verwendet wird, ruft die gespeicherte Prozedur zuerst START_SLAVE_UNTIL_SQL_AFTER_MTS_GAPS oder START_REPLICA UNTIL_SQL_AFTER_MTS_GAPS auf, um sicherzustellen, dass es keine Lücken in den angewendeten Transaktionen bis zur fehlgeschlagenen Transaktion gibt. Anschließend wird die Replikationskonfiguration vorübergehend auf Single-Threaded festgelegt.

  3. Bei der binären logpositionsbasierten Replikation wird durch das Verfahren SQL_SLAVE_SKIP_COUNTER oder SQL_REPLICA_SKIP_COUNTER = 1 festgelegt, um die aktuelle Transaktion zu überspringen.

  4. Bei der GTID-basierten Replikation bestimmt die gespeicherte Prozedur die GTID der aktuellen fehlgeschlagenen Transaktion anhand der Informationen in der Statusvariable gtid_executed. Anschließend wird eine leere Transaktion eingefügt, um diese GTID zu füllen.

  5. Wenn die parallele Replikation zuvor deaktiviert war, wird sie durch die gespeicherte Prozedur wieder aktiviert.

  6. Die gespeicherte Prozedur setzt die Replikation fort.

In der Tabelle mysql.skip_replication_error_history werden alle Aufrufe dieser gespeicherten Prozedur protokolliert.

Nächste Schritte