本節說明 Cloud SQL 執行個體的預存程序。
預存程序包含可重複使用的 SQL 程式碼。
如要執行預存程序,請使用 CALL 指令,並替換下列變數:
- procedure_name 是預存程序的名稱。
CALL procedure_name(parameters);
如要建立預存程序,請參閱「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 指令,啟用階段檢測和消費者:
啟用中心區域儀表:
UPDATE performance_schema.setup_instruments SET ENABLED = 'YES' WHERE NAME LIKE 'stage/innodb/alter%';
啟用階段事件消費者:
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 執行緒停止時,才能執行這個預存程序。
這個預存程序會執行下列操作:
決定要使用以 GTID 為基礎或以二進位記錄位置為基礎的複製模式。
如果使用平行複製,預存程序會先呼叫
START_SLAVE_UNTIL_SQL_AFTER_MTS_GAPS或START_REPLICA UNTIL_SQL_AFTER_MTS_GAPS,確保在失敗的交易之前,已套用的交易沒有任何缺漏。接著,程序會暫時將複製設定設為單一執行緒。如果是以二進位記錄位置為基礎的複製作業,程序會設定
SQL_SLAVE_SKIP_COUNTER或SQL_REPLICA_SKIP_COUNTER = 1,略過目前的交易。如果是以 GTID 為基礎的複製作業,預存程序會根據
gtid_executed狀態變數中的資訊,判斷目前失敗交易的 GTID。接著,程序會插入空白交易,回填該 GTID。如果先前已停用平行複製,預存程序會重新啟用平行複製。
預存程序會繼續複製作業。
資料表 mysql.skip_replication_error_history 會記錄這個預存程序的所有叫用。
後續步驟
- 瞭解如何在 Cloud SQL 唯讀副本中新增及捨棄索引。
- 瞭解如何建立及管理唯讀副本索引。