Como diagnosticar problemas nas instâncias do Cloud SQL

Nesta página, mostramos uma lista dos problemas mais frequentes que podem ser encontrados ao trabalhar com instâncias do Cloud SQL, bem como os passos a serem seguidos para resolvê-los. Além disso, consulte as páginas Problemas conhecidos, Solução de problemas e Página de suporte.

Como ver registros

Veja informações sobre operações recentes nos registros de operação da instância do Cloud SQL ou nos registros de erro do MySQL.

Instância que não responde

Se a instância parar de responder às conexões ou o desempenho estiver prejudicado, verifique se tudo está em conformidade com as Diretrizes operacionais. Caso contrário, o problema não estará coberto pelo SLA do Cloud SQL.

Problemas de conexão

Para ajuda com problemas de conexão, consulte a página Como depurar problemas de conexão ou a seção Conectividade na página de solução de problemas.

Problemas da instância

Backups

Para ter o melhor desempenho com backups, mantenha a quantidade de tabelas em um número razoável.

Para outros problemas de backup, consulte a seção Backups na página de solução de problemas.

Importar e exportar

As importações e exportações no Cloud SQL são as mesmas de quando se usa o utilitário mysqldump. No entanto, com o recurso de importação e exportação do Cloud SQL, você transfere dados usando um bucket do Cloud Storage.

As importações e exportações para o Cloud SQL que usam a função de importação (por meio de um bucket do Cloud Storage) podem demorar muito para serem concluídas, dependendo do tamanho do banco de dados. Esse processo pode ter os seguintes impactos:

  • Não é possível interromper uma operação de instância do Cloud SQL de longa duração.
  • Apenas uma operação de importação ou exportação pode ser executada por vez para cada instância.

É possível diminuir o tempo necessário para concluir cada operação usando a função de importação ou exportação do Cloud SQL com lotes menores de dados.

Para exportações, use a opção sem servidor para minimizar o impacto no desempenho do banco de dados e permitir que outras operações sejam executadas na sua instância enquanto a exportação é feita.

Outros fatores a considerar durante a importação:

  • Se a importação estiver falhando, talvez seja por causa de um erro de falta de memória (OOM, na sigla em inglês). Se esse for o caso, tente usar comandos do MySQL diretamente para adicionar os parâmetros --extended-insert=FALSE --complete-insert. Esses parâmetros reduzem a velocidade da importação, mas também reduzem a quantidade de memória necessária.

Para outros problemas de importação e exportação, consulte a seção Importar e exportar na página de solução de problemas.

Espaço em disco

Se a sua instância atingir o armazenamento máximo permitido, as gravações no banco de dados não serão feitas. Se você excluir dados, por exemplo, eliminando uma tabela, o espaço liberado não será refletido no Armazenamento usado relatado da instância. Veja uma explicação desse comportamento nas "Perguntas frequentes" Como recuperar o espaço de uma tabela eliminada?.

Atingir o limite máximo de armazenamento também pode fazer com que a instância fique travada na reinicialização.

Evitar a corrupção de dados

Evite colunas geradas

Devido a um problema no MySQL, o uso de colunas geradas pode causar corrupção de dados. Para mais informações, consulte o bug nº 82736 do MySQL.

Encerramentos limpos

Quando o Cloud SQL encerra uma instância, por exemplo, para manutenção, novas conexões não são enviadas à instância. Além disso, as conexões existentes são encerradas. O tempo fornecido ao mysqld para o encerramento é limitado a 1 minuto. Se o encerramento não for concluído nesse período, o processo mysqld será interrompido de modo forçado. Isso pode fazer com que gravações de disco sejam abortadas antes da conclusão.

Mecanismos de banco de dados

O InnoDB é o único mecanismo de armazenamento compatível com instâncias do MySQL porque ele é mais resistente ao corrompimento de tabelas do que outros mecanismos de armazenamento MySQL, como o MyISAM.

Por padrão, as tabelas de banco de dados do Cloud SQL são criadas com o mecanismo de armazenamento InnoDB. Se a sintaxe CREATE TABLE incluir uma opção ENGINE especificando um mecanismo de armazenamento que não seja o InnoDB, por exemplo, ENGINE = MyISAM, a tabela não será criada e você verá mensagens de erro como:

ERROR 3161 (HY000): Storage engine MyISAM is disabled (Table creation is disallowed).

Para evitar esse erro, remova a opção ENGINE = MyISAM do comando CREATE TABLE. Assim, a tabela será criada com o mecanismo de armazenamento InnoDB.

Alterações nas tabelas do sistema

As tabelas do sistema do MySQL usam o mecanismo de armazenamento MyISAM, incluindo todas as tabelas do banco de dados mysql, por exemplo, mysql.user e mysql.db. Essas tabelas são vulneráveis a encerramentos com erros. Emita o comando FLUSH CHANGES depois de fazer alterações nessas tabelas. Em caso de corrompimento do MyISAM, CHECK TABLE e REPAIR TABLE podem fazer o retorno para um ponto de bom estado, mas sem salvar dados.

Identificadores de transações globais (GTID, na sigla em inglês)

Todas as instâncias do MySQL têm o GTID ativado automaticamente. O GTID oferece proteção contra perda de dados durante a criação de réplicas e failover e torna a replicação mais robusta. No entanto, ele apresenta algumas limitações impostas pelo MySQL, conforme documentado no manual do MySQL. As operações transacionais não seguras a seguir não podem ser usadas em um servidor MySQL com GTID ativado:

  • Instruções CREATE TABLE ... SELECT
  • Instruções CREATE TEMPORARY TABLE dentro de transações
  • Transações ou instruções que afetam tabelas transacionais e não transacionais

Se usar uma transação não segura, você verá uma mensagem de erro como:

 Exception: SQLSTATE[HY000]: General error: 1786
 CREATE TABLE ... SELECT is forbidden when @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1.

Como trabalhar com gatilhos e funções armazenadas

Se a instância tiver a geração de registros binária ativada e você precisar trabalhar com gatilhos ou funções armazenadas, verifique se a instância tem a sinalização log_bin_trust_function_creators definida como on.

Estado suspenso

Há vários motivos pelos quais o Cloud SQL pode suspender uma instância, entre os quais:

  • Problemas de faturamento

    Por exemplo, se o cartão de crédito da conta de faturamento do projeto tiver expirado, a instância poderá ser suspensa. Verifique as informações de faturamento de um projeto acessando a página de faturamento do Console do Google Cloud, basta selecionar o projeto e visualizar as informações da conta de faturamento usada no projeto. Depois de resolver o problema de faturamento, a instância retorna ao status executável em algumas horas.

  • Problemas de chave do KMS

    Por exemplo, se a versão da chave do KMS usada para criptografar os dados do usuário na instância do Cloud SQL não estiver presente ou se tiver sido desativada ou destruída. Consulte Como usar chaves de criptografia gerenciadas pelo cliente (CMEK, na sigla em inglês).

  • problemas legais

    Por exemplo, uma violação da política de uso aceitável do Google Cloud pode causar a suspensão da instância. Para mais informações, consulte "Suspensões e remoções" nos Termos de Serviço do Google Cloud.

  • Problemas operacionais

    Por exemplo, se uma instância estiver presa em um ciclo de falha (ela falha durante ou logo após a inicialização), o Cloud SQL poderá suspendê-la.

Durante a suspensão de uma instância, é possível continuar visualizando informações sobre ela ou excluí-la, caso a suspensão tenha sido acionada por problemas de faturamento.

Os usuários do Cloud SQL com pacotes de suporte Platinum, Gold ou Silver podem contatar a equipe de suporte diretamente sobre instâncias suspensas. Todos os usuários podem usar a orientação anterior com o fórum google-cloud-sql (em inglês).

Desempenho

Visão geral

O Cloud SQL oferece é compatível com cargas de trabalho de alto desempenho com até 60.000 IOPS sem custo extra por E/S. O desempenho das IOPS e da capacidade depende do tamanho do disco, do número de vCPUs da instância, do tamanho do bloco de E/S, entre outros fatores.

O desempenho da instância também depende da opção de armazenamento e da carga de trabalho.

Saiba mais sobre estas situações:

Ativar registros de consulta

Para ajustar o desempenho das consultas, configure o Cloud SQL para registrar consultas lentas adicionando as sinalizações do banco de dados --log_output='FILE' e --slow_query_log=on à instância. Isso disponibiliza a saída de registro usando o visualizador de registros no Console do Google Cloud. As cobranças de registro do pacote de operações do Google Cloud são aplicáveis.

Não defina log_output como TABLE. Isso pode causar problemas de conexão descritos em Dicas para trabalhar com sinalizações.

Veja este tutorial para instruções sobre como registrar e monitorar consultas lentas do Cloud SQL para MySQL usando o Cloud Logging and Monitoring.

Ativar o monitoramento de bloqueio

Os monitores do InnoDB fornecem informações sobre o estado interno do mecanismo de armazenamento InnoDB, que você pode usar no ajuste de desempenho.

Acesse a instância usando o MySQL Client para receber os resultados da monitoração sob demanda:

SHOW ENGINE INNODB STATUS\G

Para ver explicações sobre as seções dos resultados de monitoramento, consulte Saída do monitor padrão e do monitor de bloqueio do InnoDB.

É possível ativar monitores do InnoDB para que a saída seja gerada periodicamente em um arquivo ou tabela, com degradação no desempenho. Para conferir mais informações, veja Ativar monitores do InnoDB.

Usar esquema de desempenho

O MySQL Performance Schema é um recurso para monitorar a execução do MySQL Server em um nível baixo. A maneira mais acessível de consumir as estatísticas geradas em performance_schema é pela funcionalidade Relatórios de desempenho do MySQL Workbench.

Mantenha um número razoável de tabelas de banco de dados

As tabelas de banco de dados consomem recursos do sistema. Um grande número pode afetar o desempenho e a disponibilidade da instância e fazer com que a instância perca a cobertura do SLA. Saiba mais

Dicas de desempenho geral

. Para atualizações, exclusões ou inserções lentas no banco de dados, considere as seguintes ações:
  • Verifique as localizações do gravador e do banco de dados. O envio de dados de longa distância introduz latência.

Para seleções lentas do banco de dados, considere o seguinte:

  • O armazenamento em cache é importante para o desempenho de leitura. Compare o tamanho do conjunto de dados com a capacidade de RAM da instância. O ideal é que todo o conjunto de dados se ajuste a 70% da RAM da instância. Nesse caso, as consultas não são limitadas ao desempenho de E/S. Caso contrário, considere aumentar o tamanho da RAM da instância.
  • Se a carga de trabalho consistir em consultas com uso intensivo de CPU (classificação, expressões regulares, outras funções complexas), a instância poderá ser limitada. Aumente o nível.
  • Verifique o local do leitor e do banco de dados. A latência afeta o desempenho de leitura ainda mais do que o desempenho de gravação.
  • Investigue as melhorias de desempenho específicas não relacionadas ao Cloud SQL, como adicionar indexação apropriada, reduzir dados digitalizados e evitar ciclos extras.
  • Caso você perceba um desempenho ruim na execução de consultas, use EXPLAIN. EXPLAIN é uma instrução adicionada a outras, como SELECT, e retorna informações sobre como o MySQL executa a instrução. Ela funciona com SELECT, DELETE, INSERT, REPLACE e UPDATE. Por exemplo, EXPLAIN SELECT * FROM myTable;.

    Use EXPLAIN para identificar onde você pode:

    • adicionar índices a tabelas e melhorar o desempenho da consulta. Por exemplo, garanta que todos os campos usados como chave JOIN tenham um índice nas duas tabelas.

    • melhorar as operações ORDER BY. Se EXPLAIN mostrar "Using temporary; Using filesort" na coluna Extra da saída, os resultados intermediários serão armazenados em um arquivo que será classificado, o que geralmente resulta em baixo desempenho. Nesse caso, execute uma das seguintes etapas:

      • Se possível, use índices em vez de classificar. Veja Otimização do comando ORDER BY para saber mais informações.

      • Aumente o tamanho da variável sort_buffer_size para a sessão de consulta.

      • Use menos memória RAM por linha, declarando colunas somente com o tamanho necessário.

    Solução de problemas

    Para outros problemas com o Cloud SQL, consulte a página de solução de problemas.

    Mensagens de erro

    Para ver mensagens de erro específicas da API, consulte a página de referência Mensagens de erro.

    Solução de problemas de chaves de criptografia gerenciadas pelo cliente (CMEK)

    As operações de administrador do Cloud SQL (como criação, clonagem ou atualização) podem falhar devido a erros do Cloud KMS e ausência de papéis ou permissões. Motivos comuns de falha incluem uma versão ausente da chave do Cloud KMS, uma versão da chave do Cloud KMS desativada ou destruída, permissões de IAM insuficientes para acessar a versão da chave do Cloud KMS ou a versão da chave do Cloud KMS está em uma região diferente da instância do Cloud SQL. Use a seguinte tabela de solução de problemas para diagnosticar e resolver problemas comuns.

    Tabela de solução de problemas de chaves de criptografia gerenciadas pelo cliente

    Para este erro... O problema pode ser... Tente o seguinte...
    Conta de serviço por produto, por projeto não encontrada O nome da conta de serviço está incorreto. Certifique-se de ter criado uma conta de serviço para o projeto de usuário correto.

    ACESSAR A PÁGINA "CONTAS DE SERVIÇO"

    Não é possível conceder acesso à conta de serviço A conta de usuário não tem permissão para conceder acesso a esta versão de chave. Adicione o papel Administrador da organização à sua conta de usuário ou serviço.

    ACESSAR A PÁGINA "CONTAS DE IAM"

    A versão da chave do Cloud KMS foi destruída A versão da chave foi destruída. Se a versão da chave for destruída, você não poderá usá-la para criptografar ou descriptografar dados.
    A versão da chave do Cloud KMS está desativada A versão da chave está desativada. Reative a versão da chave do Cloud KMS.

    ACESSAR A PÁGINA "CHAVES DE CRIPTOGRAFIA"

    Permissão insuficiente para usar a chave do Cloud KMS O papel cloudkms.cryptoKeyEncrypterDecrypter está ausente na conta de usuário ou serviço que você está usando para executar operações em instâncias do Cloud SQL ou a versão da chave do Cloud KMS não existe. Adicione o papel cloudkms.cryptoKeyEncrypterDecrypter à conta de usuário ou serviço.

    ACESSAR A PÁGINA "CONTAS DE IAM"


    Se o papel já estiver na sua conta, consulte Como criar uma chave para saber como criar uma nova versão de chave. Consulte a observação.
    A chave do Cloud KMS não foi encontrada A versão da chave não existe. Crie uma nova versão de chave. Consulte Como criar uma chave. Consulte a observação.
    A instância do Cloud SQL e a versão da chave do Cloud KMS estão em diferentes regiões A versão da chave do Cloud KMS e a instância do Cloud SQL precisam estar na mesma região. Ela não funcionará se a versão da chave do Cloud KMS estiver em uma região global ou em várias regiões. Crie uma versão de chave na mesma região em que você quer criar instâncias. Consulte Como criar uma chave. Consulte a observação.