Procedimentos armazenados do Cloud SQL

Nesta seção, descrevemos os procedimentos armazenados para instâncias do Cloud SQL.

Um procedimento armazenado é um código SQL que pode ser reutilizado

Para executar o procedimento armazenado, use o comando CALL e substitua a seguinte variável.

  • procedure_name é o nome do procedimento armazenado.
CALL procedure_name(parameters);
Para mais informações, consulte a página de referência da instrução CALL.

Para criar um procedimento armazenado, consulte Instruções CREATE PROCEDURE e CREATE FUNCTION. O Cloud SQL não é compatível com a instrução CREATE FUNCTION. Para mais informações, consulte Recursos MySQL não compatíveis com o Cloud SQL.

Procedimentos armazenados de índices de réplica gerenciada

Use os procedimentos armazenados a seguir para criar, gerenciar e descartar índices de réplica gerenciados para suas réplicas. Quando as réplicas são recriadas, esses índices são restaurados automaticamente.

Cada chamada de procedimento armazenado executa uma instrução COMMIT que finaliza as mudanças na sessão atual. Como resultado, as instruções de linguagem de manipulação de dados (DML) executadas usando esses procedimentos armazenados não podem ser revertidas em uma transação.

Para mais informações, consulte Índices de réplica gerenciados.

mysql.cloudsql_replica_idx_defn_create

Sintaxe

mysql.cloudsql_replica_idx_defn_create(IDXNAME, CREATESTMT)

Descrição

Cria uma definição para um índice secundário. Execute esse procedimento armazenado na instância principal, que replica a definição do índice para as réplicas.

O procedimento armazenado retorna um IDXID, um identificador inteiro exclusivo da definição do índice secundário.

  • IDXNAME: nome da definição do índice.
  • CREATESTMT: instrução SQL para criar o índice. Precisa ser uma instrução DDL com prefixo de esquema (por exemplo, schema_name.table_name).

mysql.cloudsql_replica_idx_defn_drop

Sintaxe

mysql.cloudsql_replica_idx_defn_drop(IDXID)

Descrição

Descarta uma definição de índice secundário. Execute esse procedimento armazenado na instância principal.

  • IDXID: identificador inteiro exclusivo da definição do índice excluído.

mysql.cloudsql_replica_idx_group_add

Sintaxe

mysql.cloudsql_replica_idx_group_add(IDXID, GRPNAME)

Descrição

Adiciona uma definição de índice secundário a um grupo de réplicas. Execute esse procedimento armazenado na instância principal.

  • IDXID: ID inteiro exclusivo da definição do índice.
  • GRPNAME: nome do grupo de réplicas. GRPNAME é um nome personalizado que você seleciona. Se esse grupo de réplicas não existir, o Cloud SQL vai criar um novo.

mysql.cloudsql_replica_idx_group_drop

Sintaxe

mysql.cloudsql_replica_idx_group_drop(IDXID, GRPNAME)

Descrição

Descarta um índice secundário de um mapeamento de grupo de réplicas. Execute esse procedimento armazenado na instância principal.

  • IDXID: ID inteiro exclusivo da definição do índice.
  • GRPNAME: nome do grupo de réplicas.

mysql.cloudsql_replica_idx_show_status

Sintaxe

mysql.cloudsql_replica_idx_show_status()

Descrição

Mostra o status e o progresso das operações de criação ou remoção de índices em andamento em uma instância de réplica.

Para ver um relatório de progresso detalhado, ative o esquema de desempenho do MySQL na instância. Além disso, é preciso ativar os instrumentos de estágio e os consumidores executando os seguintes comandos SQL:

  1. Ative os instrumentos de preparo:

    UPDATE performance_schema.setup_instruments
    SET ENABLED = 'YES'
    WHERE NAME LIKE 'stage/innodb/alter%';
  2. Ative os consumidores de eventos de estágio:

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

Para mais informações, consulte o exemplo de monitoramento de ALTER TABLE usando o esquema de desempenho.

mysql.cloudsql_replica_idx_show_errors

Sintaxe

mysql.cloudsql_replica_idx_show_errors()

Descrição

Lista as tentativas de recriação de índice que falharam na última execução, mostrando mensagens de erro e contagens de novas tentativas em uma instância de réplica. Uma falha em um índice não bloqueia a execução dos índices subsequentes na fila.

mysql.cloudsql_replica_idx_show_all

Sintaxe

mysql.cloudsql_replica_idx_show_all()

Descrição

Lista o status, as contagens de novas tentativas, a duração da execução e as mensagens de erro de todos os registros de recriação de índice secundário de réplica na tabela de status de metadados. Execute esse procedimento armazenado em uma instância de réplica.

Procedimentos armazenados de índices de réplica autogerenciados

Os procedimentos armazenados a seguir permitem adicionar e remover índices secundários diretamente em uma réplica, mas esses índices não persistem se a réplica for recriada.

mysql.addSecondaryIdxOnReplica

Sintaxe

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

Descrição

Adiciona um índice secundário no banco de dados. Este procedimento armazenado é um wrapper para a instrução DDL CRIAR ÍNDICE.

  • IDXTYPE: tipo de índice a ser criado. Por exemplo, transmita UNIQUE para criar um índice exclusivo.
  • IDXNAME: nome do índice.
  • TABLENAME: nome da tabela no formato schema_name.table_name.
  • IDXDEFINITION: definição do índice. Não inclua parênteses externos.
  • IDXOPTION: qualquer outra opção para transmitir a criação do índice. Por exemplo, no MySQL 8.0, uma opção pode transmitir INVISIBLE para um índice invisível.

mysql.dropSecondaryIdxOnReplica

Sintaxe

mysql.dropSecondaryIdxOnReplica(IDXNAME, TABLENAME, IDXOPTION)

Descrição

Descarta um índice secundário no banco de dados. Este procedimento armazenado é um wrapper para a instrução DDL DESCARTAR ÍNDICE.

  • IDXNAME: nome do índice.
  • TABLENAME: nome da tabela no formato schema_name.table_name.
  • IDXOPTION: qualquer outra opção a ser transmitida ao descartar um índice. Por exemplo, uma opção de algoritmo como INPLACE.

Procedimentos armazenados de replicação de servidor externo

É possível usar o procedimento armazenado a seguir durante a replicação do servidor externo.

mysql.skipReplicationError

Sintaxe

mysql.skipReplicationError()

Descrição

Ignora um erro de replicação encontrado durante a replicação do servidor externo e retoma a replicação.

Só é possível executar esse procedimento armazenado se você tiver encontrado um erro de replicação e as linhas de execução de E/S e SQL estiverem interrompidas.

Esse procedimento armazenado faz o seguinte:

  1. Determina se a replicação baseada em GTID ou em posição de registro binário é usada.

  2. Se a replicação paralela estiver sendo usada, o procedimento armazenado primeiro chamará START_SLAVE_UNTIL_SQL_AFTER_MTS_GAPS ou START_REPLICA UNTIL_SQL_AFTER_MTS_GAPS para garantir que não haja lacunas nas transações aplicadas até a transação com falha. Em seguida, o procedimento define temporariamente a configuração de replicação como linha de execução única.

  3. Para replicação baseada em posição de registro binário, o procedimento define SQL_SLAVE_SKIP_COUNTER ou SQL_REPLICA_SKIP_COUNTER = 1 para pular a transação atual.

  4. Para replicação baseada em GTID, o procedimento armazenado determina o GTID da transação com falha atual com base nas informações na variável de status gtid_executed. Em seguida, o procedimento insere uma transação vazia para preencher esse GTID.

  5. Se a replicação paralela tiver sido desativada, o procedimento armazenado vai reativá-la.

  6. O procedimento armazenado retoma a replicação.

A tabela mysql.skip_replication_error_history registra todas as invocações desse procedimento armazenado.

A seguir