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. Veja também a página Problemas conhecidos, a Solução de problemas e a Página de suporte.

Como visualizar registros

Para ver informações sobre operações recentes, consulte os registros de operações da instância do Cloud SQL ou os registros de erro do PostgreSQL.

Problemas de conexão

Verificar se o aplicativo está encerrando as conexões corretamente

Erros contendo "Aborted connection nnnn to db:" costumam indicar que o aplicativo não está interrompendo as conexões corretamente. Problemas de rede também podem causar esse erro. O erro não significa que há problemas com sua instância do Cloud SQL.

Para ver exemplos de práticas recomendadas de gerenciamento de conexões, consulte Como gerenciar conexões.

Verificar se os certificados expiraram

Se a instância estiver configurada para usar SSL, acesse a página "Instâncias" do Cloud SQL no Console do Cloud e abra a instância. Abra a página Conexões correspondente e verifique se o certificado do servidor é válido. Se ele tiver expirado, você precisará adicionar um novo e fazer a rotação dos certificados. Saiba mais.

Verificar se você está autorizado a se conectar

Caso não esteja conseguindo se conectar, verifique se você tem autorização de conexão:

  • Se você estiver com problemas para se conectar usando um endereço IP (por exemplo, você está se conectando do ambiente local com o cliente psql), confirme se o endereço IP do qual você está se conectando está autorizado a se conectar à instância o Cloud SQL.

    As conexões com uma instância do Cloud SQL usando um endereço IP privado são autorizadas automaticamente para intervalos de endereços RFC 1918. Dessa forma, todos os clientes particulares podem acessar o banco de dados sem passar pelo proxy. Os intervalos de endereços não RFC 1918 precisam ser configurados como redes autorizadas.

    Por padrão, o Cloud SQL não aprende as rotas de sub-rede não RFC 1918 da sua VPC. É necessário atualizar o peering de rede para o Cloud SQL para exportar rotas que não sejam RFC 1918. Exemplo:

    gcloud compute networks peerings update cloudsql-[mysql/postgres]-googleapis-com --network=NETWORK --export-subnet-routes-with-public-ip --project=PROJECT

  • Veja aqui o endereço IP atual.

  • Tente usar o comando gcloud sql connect para se conectar à instância. Esse comando autoriza seu endereço IP por um curto período. É possível executar esse comando em um ambiente com o SDK do Cloud e o cliente psql instalados. Também é possível executar esse comando no Cloud Shell, que está disponível no Console do Google Cloud e tem o SDK do Cloud e o cliente psql pré-instalados. O Cloud Shell fornece uma instância do Compute Engine para você se conectar ao Cloud SQL.
  • Permite temporariamente que todos os endereços IP se conectem a uma instância autorizando 0.0.0.0/0.

Determinar como as conexões são iniciadas

É possível ver informações sobre as conexões atuais executando o seguinte comando:

SELECT * from pg_stat_activity ;

As conexões que mostram um endereço IP, como 1.2.3.4, são estabelecidas com IP. As conexões com cloudsqlproxy~1.2.3.4 usam o Cloud SQL Proxy. Caso contrário, elas são originadas do App Engine. As conexões de localhost podem ser usadas por alguns processos internos do Cloud SQL.

Noções básicas sobre os limites de conexão

Não há limite de QPS para instâncias do Cloud SQL. No entanto, há limites específicos em relação à conexão, ao tamanho e ao App Engine. Consulte Cotas e limites.

As conexões do banco de dados consomem recursos no servidor e no aplicativo conectado. Sempre use boas práticas de gerenciamento de conexão para minimizar o espaço ocupado pelo seu aplicativo e reduzir a probabilidade de exceder os limites de conexão do Cloud SQL. Para mais informações, consulte Como gerenciar conexões de banco de dados.

Exibir conexões e linhas de execução

Para ver os processos em execução no banco de dados, use a tabela pg_stat_activity (em inglês):

select * from pg_stat_activity;

Conexões do Compute Engine

As conexões com uma instância do Compute Engine expiram após dez minutos de inatividade, o que pode afetar conexões de longa duração não usadas entre a instância do Compute Engine e a instância do Cloud SQL. Para mais informações, consulte Rede e firewalls na documentação do Compute Engine.

Para manter ativas as conexões de longa duração não usadas, configure o sinal de atividade TCP (em inglês). Os comandos a seguir definem o valor TCP keepalive para um minuto e tornam a configuração permanente em reinicializações de instância.

Exiba o valor tcp_keepalive_time atual.

cat /proc/sys/net/ipv4/tcp_keepalive_time

Defina tcp_keepalive_time como 60 segundos e torne-o permanente durante as reinicializações.

echo 'net.ipv4.tcp_keepalive_time = 60' | sudo tee -a /etc/sysctl.conf

Aplique a alteração.

sudo /sbin/sysctl --load=/etc/sysctl.conf

Exiba o valor tcp_keepalive_time para verificar se a alteração foi aplicada.

cat /proc/sys/net/ipv4/tcp_keepalive_time

Tempo limite da conexão

Se um cliente não puder se conectar à instância do Cloud SQL usando um IP particular, verifique se o IP utilizado está no intervalo 172.17.0.0/16. Ocorre falha nas conexões de qualquer IP no intervalo 172.17.0.0/16 para instâncias do Cloud SQL usando IP particular. Da mesma forma, as instâncias do Cloud SQL criadas com um IP nesse intervalo são inacessíveis. Esse intervalo é reservado para a rede de ponte do docker.

Falhas de conexão de vez em quando

Quando o Cloud SQL reinicia uma instância devido a eventos de manutenção, as conexões podem ser roteadas para a réplica de failover. Quando você se conecta à réplica de failover:

  • As solicitações de leitura de clientes que usam conexões não criptografadas têm êxito normalmente. No entanto, as solicitações de gravação falham e retornam uma mensagem de erro, como "Erro 1290: o servidor MySQL está em execução com a opção --read-only, portanto, não pode executar esta instrução."

  • As solicitações de leitura e gravação de clientes que usam conexões criptografadas falham e retornam uma mensagem de erro, como "x509: o certificado é válido para instância mestre, não para a instância de failover".

Depois que o evento terminar, o Cloud SQL redefinirá a conexão. Tente estabelecer conexão novamente. Recomendamos que os aplicativos sejam desenvolvidos implementando uma estratégia de tratamento de erros, como a espera exponencial, para manipular falhas de conexão de vez em quando. Consulte Implementação do aplicativo para mais informações.

Problemas da instância

Espaço em disco

Se sua instância atingir o volume de armazenamento máximo permitido, as gravações no banco de dados falharão. Se você exclui dados, por exemplo, eliminando uma tabela, o espaço é liberado, mas isso não reflete no armazenamento usado relatado da instância. É possível executar o comando VACUUM FULL para recuperar o espaço não utilizado. Observe que as operações de gravação ficam bloqueadas durante a execução do comando de vácuo. Saiba mais.

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 jurídicos

    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

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

Os esquemas e tabelas de banco de dados consomem recursos do sistema. Um número grande pode afetar o desempenho da instância.

Dicas gerais de desempenho

Garanta que a instância não seja restritra pela memória ou CPU. Para cargas de trabalho que exigem alto desempenho, verifique se a instância tem pelo menos 60 GB de memória.

Para inserções, atualizações ou exclusões demoradas de banco de dados, verifique os locais do gravador e do banco de dados. O envio de dados a longa distância gera latência.

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

  • O armazenamento em cache é importante para o desempenho de leitura. Verifique as diversas proporções blks_hit / (blks_hit + blks_read) do coletor de estatísticas do PostgreSQL (em inglês). O ideal é que a proporção esteja acima de 99%. Caso contrário, considere aumentar o tamanho da RAM da instância.
  • Se a carga de trabalho consiste em consultas com uso intensivo de CPU (classificação, expressões regulares, outras funções complexas), a instância fica limitada. Adicione vCPUs.
  • 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 a verificação de dados e evitar ciclos extras.
Caso você observe baixo desempenho na execução de consultas, use EXPLAIN e identifique em que partes é preciso adicionar índices a tabelas para melhorar o desempenho da consulta. Por exemplo, garanta que todos os campos usados como chave JOIN tenham um índice nas duas tabelas.

Chaves de criptografia gerenciadas pelo cliente (CMEK, na sigla em inglês)

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.

Solução de problemas de instâncias do Cloud SQL

Clique nos links da tabela para ver detalhes:

Para este problema... O problema pode ser... Tente o seguinte...
Você quer descobrir quais consultas estão sendo executadas agora. N/A Tente esta consulta de banco de dados.
Você quer descobrir quais unidades estão sendo usadas para um campo específico. N/A Tente esta consulta de banco de dados.
Você quer encontrar o valor atual de uma configuração de banco de dados. N/A Tente estas consultas de banco de dados.
O armazenamento temporário aumentou o armazenamento automático. O armazenamento automático está ativado. A reinicialização exclui os arquivos temporários, mas não reduz o armazenamento. Somente o suporte ao cliente pode redefinir o tamanho da instância. Saiba mais.
Os dados estão sendo excluídos automaticamente. Há um script em execução em algum lugar que está fazendo isso. Tente encontrar o script.
A instância não pode ser excluída. mais de uma causa possível. mais de uma solução possível.
A instância está travada devido ao grande tamanho dos dados temporários. Muitas tabelas temporárias foram criadas ao mesmo tempo. Reinicie a instância e teste esta opção de mitigação.
Erro fatal durante o upgrade. Há muitas causas possíveis. Os registros podem revelar mais. Talvez seja necessário entrar em contato com o suporte ao cliente para forçar uma reinicialização.
A instância trava na reinicialização quando acaba o espaço em disco. O recurso de aumento automático de armazenamento não está ativado. Ative o aumento automático de armazenamento.
A instância principal local está paralisada. N/A O suporte ao cliente do Cloud SQL não pode ajudar com instâncias que não estão no Cloud SQL.
Desligamento lento na reinicialização. Conexões pendentes que não são encerradas após 60 segundos podem causar erros no desligamento. Tenha apenas conexões que durem menos de 60 segundos.
Access denied for user. É possível que a autenticação do usuário ou certificados SSL/TLS tenham expirado. Verifique os status de usuário e certificado.
Não é possível excluir um usuário. Pode ser que o usuário seja proprietário de objetos no banco de dados. Talvez seja necessário descartar ou reatribuir objetos.
Não é possível atribuir um endereço IP particular a uma instância atual em uma VPC compartilhada. Os endereços das instâncias são vinculados aos projetos no momento da criação. Crie uma nova instância do Cloud SQL para substituir a atual.
As consultas específicas estão lentas. Problemas específicos do banco de dados ou latência de rede. Confira estas sugestões.
A falta de memória é indicada, mas os gráficos de monitoramento não mostram isso. Talvez parte da RAM esteja sendo usada por processos de sobrecarga interna. Verifique se a instância tem sobrecarga suficiente para sua carga de trabalho.


Você quer descobrir quais consultas estão sendo executadas no momento

Você quer descobrir quais consultas estão sendo executadas no momento.

O problema pode ser

N/A

O que você deve tentar

Conecte-se ao banco de dados e execute esta consulta: SELECT datname, usename, application_name as appname, client_addr, state, now() - backend_start as conn_age, now() - xact_start as xact_age, now() - query_start as query_age, now() - state_change as last_activity_age, wait_event_type, wait_event, query FROM pg_stat_activity WHERE state <> 'idle' ORDER BY 8 DESC LIMIT 20;


Você quer descobrir quais unidades estão sendo usadas para um campo

Você quer descobrir quais unidades estão sendo usadas para um determinado campo.

O problema pode ser

N/A

O que você deve tentar

Conecte-se ao banco de dados e execute esta consulta (usando seu próprio FIELD_NAME): SELECT name, setting, unit FROM pg_settings WHERE name = '[FIELD_NAME]'.


Você quer encontrar o valor atual de uma configuração

Você quer encontrar o valor atual de uma configuração específica.

O problema pode ser

N/A

O que você deve tentar

Conecte-se ao banco de dados e execute esta consulta (usando seu próprio SETTING_NAME): SHOW [SETTING_NAME]; ou SHOW ALL; para ver todas as configurações.


O armazenamento temporário aumentou o armazenamento automático

Tabelas temporárias aumentaram o uso do armazenamento, e o armazenamento automático foi aumentado.

O problema pode ser

O armazenamento automático está ativado.

O que você deve tentar

Reiniciar para excluir tabelas temporárias não reduz o tamanho do armazenamento automaticamente.


Os dados estão sendo excluídos automaticamente

Você percebe que os dados estão sendo excluídos automaticamente em intervalos regulares.

O problema pode ser

Provavelmente, um script está sendo executado em algum lugar no seu ambiente.

O que você deve tentar

Procure nos registros próximos ao momento da exclusão e veja se há um script não autorizado em execução em um painel ou outro processo automatizado.


A instância não pode ser excluída

Você verá a mensagem de erro ERROR: (gcloud.sql.instances.delete) HTTP Error 409: The instance or operation is not in an appropriate state to handle the request ou a instância apresentará um status de sinalização INSTANCE_RISKY_FLAG_CONFIG.

O problema pode ser

  1. Outra operação está em andamento.
  2. O aviso INSTANCE_RISKY_FLAG_CONFIG é acionado sempre que pelo menos uma sinalização beta é usada.

O que você deve tentar

  1. As operações do Cloud SQL não são executadas simultaneamente. Aguarde a conclusão da outra operação.
  2. Remova as configurações de sinalização arriscadas e reinicie a instância.

O sistema está travado devido ao grande tamanho dos dados temporários

O sistema está travado devido ao grande tamanho dos dados temporários.

O problema pode ser

O sistema pode criar muitas tabelas temporárias de uma só vez, dependendo das consultas e da carga.

O que você deve tentar

Infelizmente, não é possível reduzir o arquivo ibtmp1 por nenhum método que não seja reiniciar o serviço.

Uma opção de mitigação é criar a tabela temporária com ROW_FORMAT=COMPRESSED, para que ela seja armazenada em tablespaces de arquivo por tabela, no diretório de arquivos temporários. No entanto, a desvantagem são os custos de desempenho associados à criação e remoção de um tablespace de arquivo por tabela para cada tabela temporária.


Erro fatal durante o upgrade

Você verá a mensagem de erro ERROR_INTERNAL_FATAL ao fazer upgrade dos recursos na instância.

O problema pode ser

Há muitas causas possíveis.

O que você deve tentar

Os registros podem revelar mais. Mas, em qualquer caso, o suporte ao cliente pode ser necessário para forçar a recriação da instância.


A instância trava na reinicialização quando acaba o espaço em disco

A instância trava na reinicialização quando acaba o espaço em disco

O problema pode ser

O recurso de aumento automático de armazenamento não está ativado.

O que você deve tentar

Se a instância ficar sem espaço de armazenamento e o recurso de aumento automático de armazenamento não estiver ativado, a instância ficará off-line. Para evitar esse problema, edite a instância para ativar o aumento automático de armazenamento.


A instância principal local está paralisada

Você quer saber se o suporte ao cliente do Cloud SQL pode ajudar quando uma instância principal local está paralisada.

O problema pode ser

A instância não está no Cloud SQL.

O que você deve tentar

O suporte ao cliente do Cloud SQL não pode ajudar com instâncias que não estão no Cloud SQL.


Desligamento lento na reinicialização

Desligamento lento na reinicialização.

O problema pode ser

Quando uma instância é encerrada, todas as conexões pendentes que não são encerradas em até 60 segundos produzirão erros no desligamento.

O que você deve tentar

Com apenas conexões que duram menos de 60 segundos, a maioria dos desligamentos com erros pode ser evitada, incluindo conexões do prompt de comando do banco de dados. Se você mantiver essas conexões abertas por horas ou dias, é possível que haja erros nos desligamentos.


Acesso negado para o usuário

Você vê a mensagem de erro Access denied for user 'XXX'@'XXX' (using password: XXX).

O problema pode ser

Há várias causas possíveis, incluindo:

  • o nome de usuário (ou senha) está incorreto;
  • o usuário está se conectando de algo diferente de @XXX;
  • o usuário não tem os privilégios corretos para o banco de dados a que está tentando se conectar.

O que você deve tentar

  • Verifique o nome de usuário e a senha correspondente
  • Verifique a origem da conexão para ver se ela corresponde a onde o usuário recebeu privilégios de acesso.
  • Verifique os privilégios de concessão do usuário no banco de dados.

Não é possível excluir o usuário

Não é possível excluir um usuário do banco de dados.

O problema pode ser

O usuário tem objetos no banco de dados que dependem dele. Primeiro, você precisa descartar esses objetos ou reatribuí-los a outro usuário.

O que você deve tentar

Descubra quais objetos dependem do usuário e, em seguida, deixe ou reatribua esses objetos para outro usuário. Esta linha de execução no Stack Exchange discute como encontrar os objetos de propriedade do usuário.


Não é possível atribuir um endereço IP particular a uma instância atual em uma VPC compartilhada

Não é possível atribuir um endereço IP privado a uma instância atual em uma VPC compartilhada.

O problema pode ser

Isso acontece porque, quando uma instância do Cloud SQL é criada, ela é automaticamente anexada a um projeto de locatário, assim como todas as instâncias do Cloud SQL nesse mesmo projeto. No entanto, quando a instância criada usa IP particular em uma VPC compartilhada, ela é anexada ao projeto de locatário associado ao projeto host da VPC compartilhada.

O que você deve tentar

Crie uma nova instância do Cloud SQL para substituir a atual.


Consultas específicas lentas

O uso da CPU está consistentemente alto.

O problema pode ser

As consultas podem ser lentas por vários motivos, principalmente devido a aspectos específicos do banco de dados. Um motivo que pode envolver o Cloud SQL é a latência da rede, quando o recurso de origem (gravador ou leitor) e o recurso de destino (Cloud SQL) estão em regiões diferentes.

O que você deve tentar

Consulte as dicas gerais de desempenho, especialmente:

Para atualizações, exclusões ou inserções lentas no banco de dados, considere as seguintes ações:

  • Verifique os locais do gravador e do banco de dados. O envio de dados por uma longa distância gera latência.
  • 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
Para reduzir a latência, recomenda-se que os recursos de origem e de destino estejam na mesma região.


A falta de memória é indicada, mas os gráficos de monitoramento não mostram isso

Uma instância falha e informa Out of memory, mas os gráficos do Console ou do {monitoring_name} parecem mostrar que ainda há memória.

O problema pode ser

Há outros fatores, além da carga de trabalho, que podem afetar o uso de memória, como o número de conexões ativas e processos de sobrecarga interna. Eles nem sempre aparecem nos gráficos de monitoramento.

O que você deve tentar

Garanta que a instância terá sobrecarga suficiente para suportar a carga de trabalho e uma possível sobrecarga extra.