Cloud SQL 預存程序

本節說明 Cloud SQL 執行個體的預存程序。

預存程序包含可重複使用的 SQL 程式碼。

如要執行預存程序,請使用 CALL 指令,並替換下列變數:

  • procedure_name 是預存程序的名稱。
CALL procedure_name(parameters);
詳情請參閱 CALL 陳述式參考資料頁面。

如要建立預存程序,請參閱「CREATE PROCEDURE 和 CREATE FUNCTION 陳述式」。Cloud SQL 不支援 CREATE FUNCTION 陳述式。詳情請參閱「Cloud SQL 不支援的 MySQL 功能」。

代管副本索引預存程序

您可以使用下列預存程序,為副本建立、管理及捨棄代管副本索引。重新建立副本時,系統會自動還原這些索引。

每個預存程序呼叫都會執行 COMMIT 陳述式,完成目前工作階段中的變更。因此,使用這些預存程序執行的 data manipulation language (DML) 陳述式無法在交易中復原。

詳情請參閱「代管副本索引」。

mysql.cloudsql_replica_idx_defn_create

語法

mysql.cloudsql_replica_idx_defn_create(IDXNAME, CREATESTMT)

說明

建立次要索引的定義。在主要執行個體上執行這個預存程序,將索引定義複製到副本。

預存程序會傳回 IDXID,這是次要索引定義的專屬整數 ID。

  • IDXNAME:索引定義的名稱。
  • CREATESTMT:建立索引的 SQL 陳述式。必須是含有結構定義前置字串 (例如 schema_name.table_name) 的 DDL 陳述式。

mysql.cloudsql_replica_idx_defn_drop

語法

mysql.cloudsql_replica_idx_defn_drop(IDXID)

說明

捨棄次要索引定義。在主要執行個體上執行這個預存程序。

  • IDXID:已刪除索引的索引定義專屬整數 ID。

mysql.cloudsql_replica_idx_group_add

語法

mysql.cloudsql_replica_idx_group_add(IDXID, GRPNAME)

說明

將次要索引定義新增至副本群組。在主要執行個體上執行這個預存程序。

  • IDXID:索引定義的專屬整數 ID。
  • GRPNAME:副本群組的名稱。GRPNAME 是您選取的自訂名稱。如果該副本群組不存在,Cloud SQL 會建立新的群組。

mysql.cloudsql_replica_idx_group_drop

語法

mysql.cloudsql_replica_idx_group_drop(IDXID, GRPNAME)

說明

從副本群組對應關係中捨棄次要索引。在主要執行個體上執行這個預存程序。

  • IDXID:索引定義的專屬整數 ID。
  • GRPNAME:副本群組的名稱。

mysql.cloudsql_replica_idx_show_status

語法

mysql.cloudsql_replica_idx_show_status()

說明

顯示副本執行個體上,正在進行的索引建立或捨棄作業的狀態和進度。

如要查看詳細進度報表,請在執行個體上啟用 MySQL Performance Schema。此外,您必須執行下列 SQL 指令,啟用階段檢測和消費者:

  1. 啟用中心區域儀表:

    UPDATE performance_schema.setup_instruments
    SET ENABLED = 'YES'
    WHERE NAME LIKE 'stage/innodb/alter%';
  2. 啟用階段事件消費者:

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

詳情請參閱「使用效能結構定義的 ALTER TABLE 監控範例」。

mysql.cloudsql_replica_idx_show_errors

語法

mysql.cloudsql_replica_idx_show_errors()

說明

列出上次執行時失敗的索引重建嘗試,並顯示副本執行個體的錯誤訊息和重試次數。如果某個索引失敗,不會影響佇列中後續索引的執行。

mysql.cloudsql_replica_idx_show_all

語法

mysql.cloudsql_replica_idx_show_all()

說明

列出中繼資料狀態資料表中,所有副本次要索引重新建立記錄的狀態、重試次數、執行時間長度和錯誤訊息。在副本執行個體上執行這個預存程序。

自行管理的副本索引預存程序

下列預存程序可讓您直接在副本上新增及捨棄次要索引,但如果重新建立副本,這些索引就不會保留。

mysql.addSecondaryIdxOnReplica

語法

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

說明

在資料庫中新增次要索引。這個預存程序是 CREATE INDEX DDL 陳述式的包裝函式。

  • IDXTYPE:要建立的索引類型。例如,傳遞 UNIQUE 即可建立不重複的索引。
  • IDXNAME:索引名稱。
  • TABLENAME:資料表名稱,格式為 schema_name.table_name。
  • IDXDEFINITION:索引的定義。請勿加入外層括號。
  • IDXOPTION:建立索引時要傳遞的其他選項。舉例來說,在 MySQL 8.0 中,選項可能會為隱藏索引傳遞 INVISIBLE。

mysql.dropSecondaryIdxOnReplica

語法

mysql.dropSecondaryIdxOnReplica(IDXNAME, TABLENAME, IDXOPTION)

說明

捨棄資料庫中的次要索引。這個預存程序是 DROP INDEX DDL 陳述式的包裝函式。

  • IDXNAME:索引名稱。
  • TABLENAME:資料表名稱,格式為 schema_name.table_name。
  • IDXOPTION:捨棄索引時要傳遞的其他選項。例如 INPLACE 等演算法選項。

外部伺服器複製預存程序

在外部伺服器複製期間,您可以使用下列預存程序。

mysql.skipReplicationError

語法

mysql.skipReplicationError()

說明

略過外部伺服器複製期間發生的複製錯誤,然後繼續複製。

只有在發生複製錯誤,且 I/O 和 SQL 執行緒停止時,才能執行這個預存程序。

這個預存程序會執行下列操作:

  1. 決定要使用以 GTID 為基礎或以二進位記錄位置為基礎的複製模式。

  2. 如果使用平行複製,預存程序會先呼叫 START_SLAVE_UNTIL_SQL_AFTER_MTS_GAPS 或 START_REPLICA UNTIL_SQL_AFTER_MTS_GAPS,確保在失敗的交易之前,已套用的交易沒有任何缺漏。接著,程序會暫時將複製設定設為單一執行緒。

  3. 如果是以二進位記錄位置為基礎的複製作業,程序會設定 SQL_SLAVE_SKIP_COUNTER 或 SQL_REPLICA_SKIP_COUNTER = 1,略過目前的交易。

  4. 如果是以 GTID 為基礎的複製作業,預存程序會根據 gtid_executed 狀態變數中的資訊,判斷目前失敗交易的 GTID。接著,程序會插入空白交易,回填該 GTID。

  5. 如果先前已停用平行複製,預存程序會重新啟用平行複製。

  6. 預存程序會繼續複製作業。

資料表 mysql.skip_replication_error_history 會記錄這個預存程序的所有叫用。

後續步驟