Solucionar problemas

Verifique se sua dúvida ou problema já foi abordado em uma das seguintes páginas:

Os tópicos nesta página incluem:

Backup e recuperação

Emitir Solução de problemas
Você não pode ver o status da operação atual. O Google Cloud O console informa apenas o sucesso ou a falha quando a operação é concluída. Ele não foi projetado para exibir avisos ou outras atualizações.

Execute o comando gcloud sql operations list para listar todas as operações da instância do Cloud SQL fornecida.

Você quer descobrir quem emitiu uma operação de backup sob demanda. A interface do usuário não mostra o usuário que iniciou uma operação.

Consulte os logs e filtre por texto para encontrar o usuário. Pode ser necessário usar logs de auditoria para obter informações privadas. Os arquivos de log relevantes incluem:

  • cloudsql.googleapis.com/postgres.log
  • Se os Logs de Auditoria do Cloud estiverem ativados e você tiver as permissões necessárias para visualizá-los, cloudaudit.googleapis.com/activity também poderá estar disponível.
Depois que uma instância é excluída, você não pode fazer um backup dela.

Se você excluir uma instância sem fazer um backup final dos dados, não será possível recuperá-los. No entanto, se você restaurar a instância, o Cloud SQL também restaurará os backups. Para obter mais informações sobre como recuperar uma instância excluída, consulte Backups de recuperação .

Se você tiver realizado uma operação de exportação, crie uma nova instância e, em seguida, execute uma operação de importação para recriar o banco de dados. As exportações são gravadas no Cloud Storage e as importações são lidas de lá.

Um backup automatizado fica travado por muitas horas e não pode ser cancelado. Os backups podem demorar muito tempo dependendo do tamanho do banco de dados.

Se você realmente precisar cancelar a operação, pode pedir ao suporte ao cliente para force restart da instância.

Uma operação de restauração pode falhar quando um ou mais usuários referenciados no arquivo de despejo SQL não existem. Antes de restaurar um dump de SQL, todos os usuários do banco de dados que possuem objetos ou receberam permissões sobre objetos no banco de dados dumpado devem existir no banco de dados de destino. Caso contrário, a operação de restauração não conseguirá recriar os objetos com a propriedade ou as permissões originais.

Crie os usuários do banco de dados antes de restaurar o dump SQL.

Você quer aumentar o número de dias em que pode manter backups automáticos de sete para 30 dias, ou mais. Você pode configurar o número de backups automatizados a serem mantidos , de 1 a 365. Os backups automatizados são removidos regularmente com base no valor de retenção configurado. Infelizmente, isso significa que os backups atualmente visíveis são os únicos backups automatizados dos quais você pode restaurar.

Para manter os backups indefinidamente, você pode criar um backup sob demanda , pois eles não são excluídos da mesma forma que os backups automatizados. Os backups sob demanda permanecem indefinidamente. Ou seja, permanecem até serem excluídos ou até que a instância à qual pertencem seja excluída. Como esse tipo de backup não é excluído automaticamente, ele pode afetar a cobrança.

Um backup automatizado falhou e você não recebeu uma notificação por e-mail. Para que o Cloud SQL notifique você sobre o status do backup, configure um alerta baseado em log .
Uma instância está falhando repetidamente porque está alternando entre os estados de falha e restauração de backup. As tentativas de conexão e uso do banco de dados após a restauração falham.
  • Pode haver muitas conexões abertas. O excesso de conexões pode resultar de erros que ocorrem no meio de uma conexão, sem configurações autovacuum para limpar conexões inativas.
  • O ciclo pode ocorrer se qualquer código personalizado estiver usando uma lógica de repetição que não para após algumas falhas.
  • Pode haver muito tráfego. Use o pool de conexões e outras práticas recomendadas para conectividade .

Coisas para tentar:

  1. Verifique se o banco de dados está configurado para autovacuum .
  2. Verifique se há alguma lógica de nova tentativa de conexão configurada no código personalizado.
  3. Reduza o tráfego até que o banco de dados se recupere e então aumente o tráfego lentamente.
Você percebe que estão faltando dados ao executar uma operação de backup/restauração. As tabelas foram criadas como não registradas. Por exemplo:

CREATE UNLOGGED TABLE ... .

Estas tabelas não estão incluídas em uma restauração de um backup:

  • O conteúdo de tabelas não registradas não sobrevive ao failover em uma instância de HA.
  • Tabelas não registradas não sobrevivem a falhas do postgres.
  • Tabelas não registradas não são replicadas para réplicas de leitura.
  • Tabelas não registradas são apagadas automaticamente durante a restauração do backup.

A solução é evitar o uso de tabelas não registradas se você quiser restaurá-las por meio de um backup. Se estiver restaurando a partir de um banco de dados que já possui tabelas não registradas, você pode despejar o banco de dados em um arquivo e recarregar os dados após modificar o arquivo despejado para ALTER TABLE para SET LOGGED nessas tabelas.

Cancelar importação e exportação

Emitir Solução de problemas
Mensagem de erro: You can't cancel operation [operation-ID] because this operation isn't in progress.

Você está tentando cancelar uma operação de importação ou exportação que foi concluída, falhou ou cancelada. Se a operação estiver em execução, você pode cancelá-la.

Mensagem de erro: You can't cancel operation [operation-ID] because Cloud SQL doesn't support the cancellation of an [operation-type] operation.

O Cloud SQL não oferece suporte ao cancelamento da operação porque ela tem um tipo de operação diferente de IMPORT ou EXPORT .

Mensagem de erro: The [operation-type] operation isn't cancelled. Wait and retry in a few seconds.

O Cloud SQL não pode cancelar a operação de importação ou exportação neste momento. Tente novamente em alguns segundos. Se o problema persistir, entre em contato com Google Cloud Apoiar .

Clone

Emitir Solução de problemas
A clonagem falha com o erro constraints/sql.restrictAuthorizedNetworks . A operação de clonagem é bloqueada pela configuração Authorized Networks . Authorized Networks são configuradas para endereços IP públicos na seção Conectividade do Google Cloud console, e a clonagem não é permitida devido a considerações de segurança .

Remova todas as entradas de Authorized Networks da instância do Cloud SQL, se possível. Caso contrário, crie uma réplica sem nenhuma entrada Authorized Networks .

Mensagem de erro: Failed to create subnetwork. Couldn't find free blocks in allocated IP ranges. Please allocate new ranges for this service provider. Help Token: [help-token-id].

Você está tentando usar o Google Cloud console para clonar uma instância com um endereço IP privado, mas você não especificou o intervalo de IPs alocado que deseja usar e a instância de origem não foi criada com o intervalo especificado. Como resultado, a instância clonada é criada em um intervalo aleatório.

Use gcloud para clonar a instância e fornecer um valor para
Parâmetro --allocated-ip-range-name . Para obter mais informações, consulte Clonando uma instância com um IP privado .

Conectar

Emitir Solução de problemas
Aborted connection . O problema pode ser:
  • Instabilidade de rede.
  • Nenhuma resposta aos comandos TCP keep-alive (o cliente ou o servidor não está respondendo, possivelmente sobrecarregado)
  • O tempo de vida da conexão do mecanismo de banco de dados foi excedido e o servidor encerra a conexão.

Os aplicativos devem tolerar falhas de rede e seguir as melhores práticas, como pool de conexões e novas tentativas. A maioria dos poolers de conexões detecta esses erros sempre que possível. Caso contrário, o aplicativo deve tentar novamente ou falhar normalmente.

Para nova tentativa de conexão, recomendamos os seguintes métodos:

  1. Backoff exponencial . Aumenta o intervalo de tempo entre cada nova tentativa, exponencialmente.
  2. Adicione também o recuo aleatório.

A combinação desses métodos ajuda a reduzir a limitação.

Certificate verify failed .

Os certificados do cliente expiraram ou o caminho para os certificados não está correto.

Regenere os certificados recriando-os .

FATAL: database 'user' does not exist . gcloud sql connect --user só funciona com o usuário padrão postgres .

Conecte-se com o usuário padrão e depois altere os usuários.

Você quer descobrir quem está conectado. Efetue login no banco de dados e execute este comando:

SELECT datname,
usename,
application_name as appname,
client_addr,
state,
now() - backend_start as conn_age,
now() - state_change as last_activity_age
FROM pg_stat_activity
WHERE backend_type = 'client backend'
ORDER BY 6 DESC
LIMIT 20
   

Hostname/IP does not match certificate's altnames: Host: localhost. is not in the cert's altnames .

O endereço do host não corresponde ao endereço nos nomes alternativos do certificado do servidor.

Se você estiver usando Node.js com verify-full ou equivalente, use o nome DNS para o parâmetro servername . O nome DNS pode ser encontrado no certificado do servidor usando openssl . Por exemplo, openssl x509 -in server-cert.pem -noout -text |grep 'DNS:' .

 ssl: {
  rejectUnauthorized: true,
  ca: fs.readFileSync("/path/to/server/CA"),
  servername: 'N-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx.us-central1.sql.goog'
}

Criar instâncias

Emitir Solução de problemas
Mensagem de erro: Failed to create subnetwork. Couldn't find free blocks in allocated IP ranges. Please allocate new ranges for this service provider . Não há mais endereços disponíveis no intervalo de IP alocado. Podem ocorrer vários cenários possíveis:

  • O tamanho do intervalo IP alocado para a conexão de serviço privado é menor que /24.
  • O tamanho do intervalo de IP alocado para a conexão de serviço privado é muito pequeno para o número de instâncias do Cloud SQL.
  • O requisito sobre o tamanho do intervalo de IPs alocado será maior se as instâncias forem criadas em várias regiões. Consulte o tamanho do intervalo alocado.

Para resolver esse problema, você pode expandir o intervalo de IP alocado existente ou alocar um intervalo de IP adicional para a conexão de serviço privada. Para obter mais informações, consulte Alocar um intervalo de endereços IP .

Se você usou o sinalizador --allocated-ip-range-name ao criar a instância do Cloud SQL, poderá expandir somente o intervalo de IP especificado.

Se você estiver alocando um novo intervalo, tome cuidado para que a alocação não se sobreponha a nenhuma alocação existente.

Após criar um novo intervalo de IP, atualize o peering do VPC com o seguinte comando:

gcloud services vpc-peerings update \
--service=servicenetworking.googleapis.com \
--ranges=OLD_RESERVED_RANGE_NAME,NEW_RESERVED_RANGE_NAME \
--network=VPC_NETWORK \
--project=PROJECT_ID \
--force
    

Se estiver expandindo uma alocação existente, tome cuidado para aumentar apenas o intervalo de alocação e não diminuí-lo. Por exemplo, se a alocação original era 10.0.10.0/24, torne a nova alocação pelo menos 10.0.10.0/23.

Em geral, ao começar com uma alocação /24, decrementar a /mask em 1 para cada condição (grupo de tipos de instância adicional, região adicional) é uma boa regra prática. Por exemplo, ao tentar criar ambos os grupos de tipos de instância na mesma alocação, ir de /24 a /23 é suficiente.

Após expandir um intervalo de IP existente, atualize o peering do VPC com o seguinte comando:

gcloud services vpc-peerings update \
--service=servicenetworking.googleapis.com \
--ranges=RESERVED_RANGE_NAME \
--network=VPC_NETWORK \
--project=PROJECT_ID
    
Mensagem de erro: Failed to create subnetwork. Router status is temporarily unavailable. Please try again later. Help Token: [token-ID] . Tente criar a instância do Cloud SQL novamente.
Mensagem de erro: HTTPError 400: Invalid request: Incorrect Service Networking config for instance: PROJECT_ID : INSTANCE_NAME :SERVICE_NETWORKING_NOT_ENABLED.

Habilite a API de rede de serviços usando o seguinte comando e tente criar a instância do Cloud SQL novamente.

gcloud services enable servicenetworking.googleapis.com \
--project=PROJECT_ID
    
Mensagem de erro: Failed to create subnetwork. Required 'compute.projects.get' permission for PROJECT_ID . Ao criar uma instância usando um endereço IP privado, uma conta de serviço é criada imediatamente usando a API de Rede de Serviços. Se você ativou a API de Rede de Serviços recentemente, a conta de serviço pode não ser criada e a criação da instância falha. Nesse caso, você deve aguardar a propagação da conta de serviço pelo sistema ou adicioná-la manualmente com as permissões necessárias.
Mensagem de erro: More than 3 subject alternative names are not allowed. Você está tentando usar um SAN personalizado para adicionar mais de três nomes DNS ao certificado do servidor de uma instância do Cloud SQL. Não é possível adicionar mais de três nomes DNS à instância.
Mensagem de erro: Subject alternative names %s is too long. The maximum length is 253 characters. Certifique-se de que quaisquer nomes DNS que você deseja adicionar ao certificado do servidor de uma instância do Cloud SQL não tenham mais de 253 caracteres.
Mensagem de erro: Subject alternative name %s is invalid.

Verifique se os nomes DNS que você deseja adicionar ao certificado do servidor de uma instância do Cloud SQL atendem aos seguintes critérios:

  • Eles não têm caracteres curinga.
  • Eles não têm pontos finais.
  • Eles atendem às especificações RFC 1034 .

Exportar

Emitir Solução de problemas
HTTP Error 409: Operation failed because another operation was already in progress. Já existe uma operação pendente para sua instância. Apenas uma operação é permitida por vez. Tente sua solicitação após a conclusão da operação atual.
HTTP Error 403: The service account does not have the required permissions for the bucket. Verifique se o bucket existe e se a conta de serviço da instância do Cloud SQL (que está realizando a exportação) tem a função Storage Object Creator ( roles/storage.objectCreator ) para permitir a exportação para o bucket. Consulte Funções do IAM para o Cloud Storage .
A exportação CSV funcionou, mas a exportação SQL falhou. Os formatos CSV e SQL exportam de forma diferente. O formato SQL exporta o banco de dados inteiro e provavelmente leva mais tempo para ser concluído. O formato CSV permite definir quais elementos do banco de dados serão incluídos na exportação.

Use exportações CSV para exportar apenas o que você precisa.

A exportação está demorando muito. O Cloud SQL não oferece suporte a operações síncronas simultâneas.

Use o descarregamento de exportação . Em um nível mais alto, no descarregamento de exportação, em vez de emitir uma exportação na instância de origem, o Cloud SQL inicia uma instância de descarregamento para executar a exportação. O descarregamento de exportação tem várias vantagens, incluindo maior desempenho na instância de origem e o desbloqueio de operações administrativas enquanto a exportação está em execução. Com o descarregamento de exportação, a latência total pode aumentar de acordo com o tempo necessário para ativar a instância de descarregamento. Geralmente, para exportações de tamanho razoável, a latência não é significativa. No entanto, se a sua exportação for pequena o suficiente, você poderá notar um aumento na latência.

Erro ao criar extensão. O arquivo de despejo contém referências a uma extensão não suportada.

Edite o arquivo de despejo para remover as referências .

Erro ao usar pg_dumpall . O uso do utilitário pg_dumpall com o sinalizador --global requer a função de superusuário, mas essa função não é compatível com o Cloud SQL para PostgreSQL. Para evitar erros ao executar operações de exportação que incluem nomes de usuário, use também o sinalizador --no-role-passwords .
A operação de exportação expira antes de exportar qualquer coisa, e você vê a mensagem de erro Could not receive data from client: Connection reset by peer. Se o Cloud Storage não receber dados dentro de um determinado período, normalmente em torno de sete minutos, a conexão será redefinida. É possível que a consulta de exportação inicial esteja demorando muito para ser executada.

Faça uma exportação manual usando a ferramenta pg_dump .

Você quer que as exportações sejam automatizadas. O Cloud SQL não fornece uma maneira de automatizar exportações.

Você pode construir seu próprio sistema de exportação automatizado usando Google Cloudprodutos como Cloud Scheduler, Pub/Sub e funções do Cloud Run, semelhantes a este artigo sobre automação de backups .

Bandeiras

Emitir Solução de problemas
Você define o fuso horário para uma sessão, mas ele expira quando você faz logoff.

Conecte-se ao banco de dados e defina o fuso horário do banco de dados como você desejar, por usuário ou por banco de dados.

No Cloud SQL para PostgreSQL, você pode especificar o seguinte. Estas configurações permanecem após o encerramento de uma sessão, imitando uma configuração .conf :

ALTER DATABASE dbname SET TIMEZONE TO 'timezone';
ALTER USER username SET TIMEZONE TO 'timezone';

Essas configurações se aplicam apenas a novas conexões com o banco de dados. Para ver a alteração no fuso horário, desconecte-se da instância e reconecte-se a ela.

Alta disponibilidade

Emitir Solução de problemas
Você não consegue encontrar as métricas para um failover manual. Somente failovers automáticos entram nas métricas.
Os recursos da instância do Cloud SQL (CPU e RAM) estão próximos de 100% de uso, fazendo com que a instância de alta disponibilidade fique inativa. O tamanho da máquina da instância é muito pequeno para a carga.

Edite a instância para atualizar para um tamanho de máquina maior e obter mais CPUs e memória.

Importar

Emitir Solução de problemas
Mensagem de erro: permission denied for schema public Para as versões 15 e posteriores do PostgreSQL, se o banco de dados de destino for criado a partir do template0 , a importação de dados poderá falhar. Para resolver esse problema, conceda privilégios de esquema público ao usuário cloudsqlsuperuser executando o comando SQL GRANT ALL ON SCHEMA public TO cloudsqlsuperuser .
HTTP Error 409: Operation failed because another operation was already in progress . Já existe uma operação pendente para sua instância. Apenas uma operação é permitida por vez. Tente sua solicitação após a conclusão da operação atual.
A operação de importação está demorando muito. Muitas conexões ativas podem interferir nas operações de importação.

Feche as operações não utilizadas. Verifique o uso de CPU e memória da sua instância do Cloud SQL para garantir que haja recursos suficientes disponíveis. A melhor maneira de garantir o máximo de recursos para a importação é reiniciar a instância antes de iniciar a operação.

Um reinício:

  • Fecha todas as conexões.
  • Encerra quaisquer tarefas que possam estar consumindo recursos.
Uma operação de importação pode falhar quando um ou mais usuários referenciados no arquivo de despejo não existem. Antes de importar um arquivo de despejo, todos os usuários do banco de dados que possuem objetos ou receberam permissões sobre objetos no banco de dados de despejo devem existir no banco de dados de destino. Caso contrário, a operação de importação não conseguirá recriar os objetos com a propriedade ou as permissões originais.

Crie os usuários do banco de dados antes de importar.

Após importar os dados, o tamanho do uso do disco de dados é muito maior.

Pode haver um uso inesperado do disco após a importação de dados. Esse uso pode ser devido ao uso da recuperação pontual .

Para resolver isso, após importar os dados, desative a recuperação pontual se desejar excluir logs e recuperar o armazenamento. Lembre-se de que diminuir o armazenamento usado não reduz o tamanho do armazenamento provisionado para a instância.

Mensagem de erro: GRANT stderr: ERROR: must be member of role ROLE_NAME

Essa mensagem de erro aparece se você tentar importar um arquivo de despejo SQL carregado no Cloud Storage para um banco de dados Cloud SQL e o trabalho de importação tiver sido executado por cerca de quatro dias.

ROLE_NAME é uma função de banco de dados personalizada definida no banco de dados PostgreSQL de origem. O usuário padrão cloudsqlsuperuser importa o arquivo de despejo SQL. No entanto, esse usuário pode não pertencer à função ROLE_NAME .

Para resolver esse problema, siga estas etapas:

  1. Crie a função ROLE_NAME no banco de dados de destino para onde você está importando o arquivo de despejo SQL.
  2. Não use o usuário cloudsqlsuperuser para importar o arquivo. Em vez disso, no banco de dados de destino, especifique um usuário que seja membro da função ROLE_NAME . Para especificar o usuário, execute o seguinte comando:

    gcloud sql import sql INSTANCE URI [--async]
    [--database=DATABASE, -d DATABASE] [--user=USER] [GCLOUD_WIDE_FLAG …]

Integrar com o Vertex AI

Emitir Solução de problemas
Mensagem de erro: Google ML integration API is supported only on Postgres version 12 or above. Para habilitar a integração do Vertex AI no Cloud SQL, você precisa ter um banco de dados Cloud SQL para PostgreSQL, versão 12 ou posterior. Para atualizar seu banco de dados para esta versão, consulte Atualizar a versão principal do banco de dados no local .
Mensagem de erro: Google ML Integration API is not supported on shared core instance. Please upsize your machine type. Se você selecionou um núcleo compartilhado para o tipo de máquina da sua instância, não será possível habilitar a integração do Vertex AI no Cloud SQL. Atualize seu tipo de máquina para um núcleo dedicado. Para obter mais informações, consulte Tipo de Máquina .
Mensagem de erro: Google ML Integration is unsupported for this maintenance version. Please follow https://cloud.google.com/sql/docs/postgres/self-service-maintenance to update the maintenance version of the instance. Para habilitar a integração do Vertex AI no Cloud SQL, a versão de manutenção da sua instância deve ser R20240130 ou posterior. Para atualizar sua instância para esta versão, consulte Manutenção por autoatendimento .
Mensagem de erro: Cannot invoke ml_predict_row if 'cloudsql.enable_google_ml_integration' is off. O sinalizador de banco de dados cloudsql.enable_google_ml_integration está desativado. O Cloud SQL não consegue se integrar ao Vertex AI.

Para ativar esse sinalizador, use o comando gcloud sql instances patch :

gcloud sql instances patch INSTANCE_NAME --database-flags cloudsql.enable_google_ml_integration=on

Substitua INSTANCE_NAME pelo nome da instância primária do Cloud SQL.
Mensagem de erro: Failed to connect to remote host: Connection refused. A integração entre o Cloud SQL e o Vertex AI não está habilitada. Para habilitar essa integração, use o comando gcloud sql instances patch :

gcloud sql instances patch INSTANCE_NAME
--enable-google-ml-integration


Substitua INSTANCE_NAME pelo nome da instância primária do Cloud SQL.
Mensagem de erro: Vertex AI API has not been used in project PROJECT_ID before or it is disabled. Enable it by visiting /apis/api/aiplatform.googleapis.com/overview?project= PROJECT_ID then retry. A API do Vertex AI não está habilitada. Para obter mais informações sobre como habilitar esta API, consulte Habilitar integração de banco de dados com o Vertex AI .
Mensagem de erro: Permission 'aiplatform.endpoints.predict' denied on resource. As permissões do Vertex AI não são adicionadas à conta de serviço do Cloud SQL para o projeto onde a instância do Cloud SQL está localizada. Para obter mais informações sobre como adicionar essas permissões à conta de serviço, consulte Habilitar integração de banco de dados com o Vertex AI .
Mensagem de erro: Publisher Model `projects/ PROJECT_ID /locations/ REGION_NAME /publishers/google/models/ MODEL_NAME ` not found. O modelo de aprendizado de máquina ou LLM não existe no Vertex AI.
Mensagem de erro: Resource exhausted: grpc: received message larger than max. O tamanho da solicitação que o Cloud SQL passa para o Vertex AI excede o limite do gRPC de 4 MB por solicitação.
Mensagem de erro: Cloud SQL attempts to send a request to Vertex AI. However, the instance is in the %s region, but the Vertex AI endpoint is in the %s region. Make sure the instance and endpoint are in the same region. O Cloud SQL tenta enviar uma solicitação ao Vertex AI. No entanto, a instância está em uma região, mas o endpoint do Vertex AI está em outra. Para resolver esse problema, tanto a instância quanto o endpoint precisam estar na mesma região.
Mensagem de erro: The Vertex AI endpoint isn't formatted properly. O ponto de extremidade do Vertex AI não está formatado corretamente. Para obter mais informações, consulte Usar pontos de extremidade privados para previsão online .
Mensagem de erro: Quota exceeded for aiplatform.googleapis.com/online_prediction_requests_per_base_model with base model: textembedding-gecko. O número de solicitações que o Cloud SQL passa para o Vertex AI excede o limite de 1.500 solicitações por minuto por região por modelo por projeto.

Registro

Emitir Solução de problemas
O registro usa muita CPU e memória na sua instância do Cloud SQL. O registro precisa ser ajustado.

O sinalizador log_statement pode ser definido como none e o sinalizador logging_collector pode ser definido como off. Se o registro ainda estiver em andamento, pode haver outros sinalizadores relacionados ao registro que podem ser ajustados. Você pode editar a instância para modificar esses sinalizadores.

Os logs de auditoria não foram encontrados. Os logs de acesso a dados serão gravados somente se a operação for uma chamada de API autenticada e controlada pelo usuário que cria, modifica ou lê dados criados pelo usuário, ou se a operação acessa arquivos de configuração ou metadados de recursos.
Informações de operações não são encontradas nos logs. Você quer encontrar mais informações sobre uma operação.

Por exemplo, um usuário foi excluído, mas você não consegue descobrir quem fez isso. Os logs mostram que a operação foi iniciada, mas não fornecem mais informações. Você deve habilitar o registro de auditoria para que informações detalhadas e de identificação pessoal (PII) como essas sejam registradas.

Arquivos de log são difíceis de ler. Você prefere visualizar os logs como json ou texto. Você pode usar o comando gcloud logging read junto com os comandos de pós-processamento do Linux para baixar os logs.

Para baixar os logs como JSON:

gcloud logging read \
"resource.type=cloudsql_database \
AND logName=projects/PROJECT_ID \
/logs/cloudsql.googleapis.com%2FLOG_NAME" \
--format json \
--project=PROJECT_ID \
--freshness="1d" \
> downloaded-log.json
    

Para baixar os logs como TEXTO:

gcloud logging read \
"resource.type=cloudsql_database \
AND logName=projects/PROJECT_ID \
/logs/cloudsql.googleapis.com%2FLOG_NAME" \
--format json \
--project=PROJECT_ID \
--freshness="1d"| jq -rnc --stream 'fromstream(1|truncate_stream(inputs)) \
| .textPayload' \
--order=asc
> downloaded-log.txt
   
Os logs de consulta não são encontrados nos logs do PostgreSQL. Você precisa habilitar os sinalizadores pgaudit.
  1. Em um terminal, conecte-se ao seu banco de dados:
    gcloud sql connect INSTANCE_NAME
          
  2. Execute este comando para criar a extensão:
    CREATE EXTENSION pgaudit;
          
  3. Saia do banco de dados e, em um terminal, execute o seguinte comando:
    gcloud sql instances patch INSTANCE_NAME \
    --database-flags=cloudsql.enable_pgaudit=on,pgaudit.log=all
         

Gerenciar instâncias

Emitir Solução de problemas
Você quer descobrir quais consultas estão sendo executadas agora. Conecte-se ao banco de dados e execute a seguinte 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 específico. Conecte-se ao banco de dados e execute a seguinte 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 de banco de dados. Conecte-se ao banco de dados e execute a seguinte consulta (usando seu próprio SETTING_NAME ):

SHOW SETTING_NAME ;

Execute SHOW ALL; para ver todas as configurações.

Você quer interromper um processo em segundo plano bloqueado. O usuário precisa ter a função pg_signal_backend .

Execute os seguintes comandos:

  1.       GRANT pg_signal_backend TO USERNAME;
          
  2. Encontre o ID do processo bloqueado ou travado:
          SELECT pid, usename, state, query FROM pg_stat_activity;
          
  3. Pare um processo em execução ou ocioso usando estes comandos:
          SELECT pg_cancel_backend(pid)
                FROM pg_stat_activity
                WHERE usename = 'USERNAME';
          
          
          SELECT pg_terminate_backend(pid)
                FROM pg_stat_activity
                WHERE usename = 'USERNAME';
          
          
A instância está se aproximando de 100% de consumo de IDs de transação. Seu monitoramento interno alerta que a instância está se aproximando do consumo de 100% dos IDs de transação. Você deve evitar o wraparound de transações, que pode bloquear gravações.

O trabalho de autovacuum pode estar bloqueado ou pode não estar recuperando os IDs de transação rápido o suficiente para acompanhar a carga de trabalho.

Para evitar interrupções devido a problemas de wraparound de transação, você pode revisar estas dicas de autoatendimento para lidar com o wraparound de TXID.

Para obter conselhos gerais sobre ajuste, consulte Otimizando, monitorando e solucionando problemas de operações de vácuo no PostgreSQL .

O armazenamento temporário aumentou o armazenamento automático. O armazenamento automático está ativado.

Reiniciar exclui os arquivos temporários, mas não reduz o espaço de armazenamento. Somente o suporte ao cliente pode redefinir o tamanho da instância.

Os dados estão sendo excluídos automaticamente. Provavelmente um script está sendo executado em algum lugar do seu ambiente.

Verifique os logs no momento da exclusão e veja se há um script malicioso em execução em um painel ou outro processo automatizado.

A instância não pode ser excluída. Você pode 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 pode ter um status de sinalizador INSTANCE_RISKY_FLAG_CONFIG .

Algumas explicações possíveis incluem:

  • Outra operação está em andamento. As operações do Cloud SQL não são executadas simultaneamente. Aguarde a conclusão da outra operação.
  • O aviso INSTANCE_RISKY_FLAG_CONFIG é acionado sempre que pelo menos um sinalizador beta estiver sendo usado. Remova as configurações do sinalizador de risco e reinicie a instância.
A instância está travada devido ao grande tamanho de dados temporários. O sistema pode criar muitas tabelas temporárias ao mesmo tempo, dependendo das consultas e da carga.

Infelizmente, você não pode reduzir o arquivo ibtmp1 por nenhum método além de 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 a atualização. Os logs 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 após ficar sem espaço em disco. A capacidade de aumento automático de armazenamento não está habilitada.

Se a sua instância ficar sem espaço de armazenamento e o recurso de aumento automático de armazenamento não estiver habilitado, ela ficará offline. Para evitar esse problema, você pode editar a instância para habilitar o aumento automático de armazenamento.

Sua instância primária local está travada.Google Cloud não posso ajudar com instâncias que não estão no Cloud SQL.
Desligamento lento na reinicialização. Quando uma instância é desligada, qualquer conexão pendente que não termine em 60 segundos torna o desligamento impuro.

Ao manter conexões que duram menos de 60 segundos, a maioria dos desligamentos impróprios pode ser evitada, incluindo conexões a partir do prompt de comando do banco de dados. Se você mantiver essas conexões abertas por horas ou dias, os desligamentos podem ser impróprios.

Um usuário não pode ser excluído. O usuário provavelmente possui objetos no banco de dados que dependem dele. Você precisa remover esses objetos ou reatribuí-los a outro usuário.

Descubra quais objetos dependem do usuário e, em seguida, descarte ou reatribua esses objetos a um usuário diferente.

Este tópico no Stack Exchange discute como encontrar os objetos de propriedade do usuário.
Consultas específicas estão lentas. 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.

Consulte especialmente dicas gerais de desempenho .

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

  • Verifique a localização do gravador e do banco de dados; enviar dados a longas distâncias gera latência.
  • Verifique a localização 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, a recomendação é localizar os recursos de origem e destino na mesma região.

A falta de memória é indicada, mas os gráficos de monitoramento não mostram isso. Uma instância pode falhar e relatar Out of memory , mas Google Cloud Os gráficos do console ou do Cloud Monitoring parecem mostrar que ainda há memória restante.

Além da carga de trabalho, há outros fatores que podem impactar o uso de memória, como o número de conexões ativas e processos internos de sobrecarga. Esses fatores nem sempre são refletidos nos gráficos de monitoramento.

Certifique-se de que a instância tenha sobrecarga suficiente para dar conta da sua carga de trabalho, além de alguma sobrecarga adicional.

Recuperando uma instância excluída. Todos os dados em uma instância, incluindo backups, são perdidos permanentemente quando a instância é excluída.

Para preservar seus dados, exporte-os para o Cloud Storage antes de excluir uma instância .

A função de administrador do Cloud SQL inclui a permissão para excluir a instância. Para evitar exclusões acidentais, conceda essa função somente quando necessário.

Você deseja renomear uma instância existente do Cloud SQL. Não há suporte para renomear uma instância existente.

Há outras maneiras de atingir o objetivo criando uma nova instância.

  • Você pode clonar a instância que deseja renomear e definir um novo nome para a instância clonada. Isso permite criar a nova instância sem precisar importar dados manualmente. Assim como ao criar uma nova instância, a instância clonada terá um novo endereço IP.
  • Você pode exportar dados da sua instância para um bucket do Cloud Storage, criar uma nova instância com o novo nome desejado e, em seguida, importar os dados para a nova instância.

Em ambos os casos, você pode excluir sua instância antiga após a conclusão da operação. Recomendamos a clonagem, pois ela não afeta o desempenho e não exige que você refaça nenhuma configuração da instância, como sinalizadores, tipo de máquina, tamanho do armazenamento e memória.

Erro ao excluir uma instância. Se a proteção contra exclusão estiver habilitada para uma instância, confirme seus planos de excluí-la. Em seguida, desabilite a proteção contra exclusão antes de excluir a instância.

Conexão de serviço privado

Emitir Solução de problemas
O anexo de serviço da instância não aceita o ponto de extremidade do Private Service Connect.
  1. Verifique o status do ponto de extremidade.

    gcloud

    Para verificar o status, use o
    gcloud compute forwarding-rules describe .

    gcloud compute forwarding-rules describe ENDPOINT_NAME \
    --project=PROJECT_ID \
    --region=REGION_NAME \
    | grep pscConnectionStatus

    Faça as seguintes substituições:

    • ENDPOINT_NAME : o nome do ponto final
    • PROJECT_ID : o ID ou número do projeto do Google Cloud projeto que contém o ponto final
    • REGION_NAME : o nome da região para o ponto de extremidade

    DESCANSAR

    Antes de usar qualquer um dos dados solicitados, faça as seguintes substituições:

    • PROJECT_ID : o ID ou número do projeto do Google Cloud projeto que contém o ponto de extremidade do Private Service Connect
    • REGION_NAME : o nome da região
    • ENDPOINT_NAME : o nome do ponto final

    Método HTTP e URL:

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules/ENDPOINT_NAME

    Para enviar sua solicitação, expanda uma destas opções:

    Você deve receber uma resposta JSON semelhante à seguinte:

    {
      "kind": "compute#forwardingRule",
      "id": "ENDPOINT_ID",
      "creationTimestamp": "2024-05-09T12:03:21.383-07:00",
      "name": "ENDPOINT_NAME",
      "region": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME",
      "IPAddress": "IP_ADDRESS",
      "target": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/serviceAttachments/SERVICE_ATTACHMENT_NAME",
      "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules/ENDPOINT_NAME",
      "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/default",
      "serviceDirectoryRegistrations": [
        {
          "namespace": "goog-psc-default"
        }
      ],
      "networkTier": "PREMIUM",
      "labelFingerprint": "LABEL_FINGERPRINT_ID",
      "fingerprint": "FINGERPRINT_ID",
      "pscConnectionId": "CONNECTION_ID",
      "pscConnectionStatus": "ACCEPTED",
      "allowPscGlobalAccess": true
    }
    
  2. Verifique se o status do endpoint é ACCEPTED . Se o status for PENDING , a instância não está permitindo o Google Cloud Projeto que contém o endpoint. Certifique-se de que o projeto de rede no qual o endpoint foi criado seja permitido. Para obter mais informações, consulte Editar uma instância com o Private Service Connect habilitado .

Replicação

Emitir Solução de problemas
A réplica de leitura não iniciou a replicação na criação. Provavelmente há um erro mais específico nos arquivos de log. Inspecione os logs no Cloud Logging para encontrar o erro real.
Não é possível criar réplica de leitura - erro invalidFlagValue. Um dos sinalizadores na solicitação é inválido. Pode ser um sinalizador que você forneceu explicitamente ou um que foi definido com um valor padrão.

Primeiro, verifique se o valor do sinalizador max_connections é maior ou igual ao valor no primário.

Se o sinalizador max_connections estiver definido corretamente, inspecione os logs no Cloud Logging para encontrar o erro real.

Não é possível criar réplica de leitura - erro desconhecido. Provavelmente há um erro mais específico nos arquivos de log. Inspecione os logs no Cloud Logging para encontrar o erro real.

Se o erro for: set Service Networking service account as servicenetworking.serviceAgent role on consumer project , desative e reative a Service Networking API . Esta ação cria a conta de serviço necessária para continuar o processo.

O disco está cheio. O tamanho do disco da instância primária pode ficar cheio durante a criação da réplica. Edite a instância primária para atualizá-la para um tamanho de disco maior.
O espaço em disco aumenta significativamente. Um slot que não é usado ativamente para rastrear dados faz com que o PostgreSQL retenha segmentos WAL indefinidamente, aumentando o espaço em disco. Se você usar os recursos de replicação lógica e decodificação do Cloud SQL, os slots de replicação serão criados e descartados automaticamente. Slots de replicação não utilizados podem ser detectados consultando a visualização do sistema pg_replication_slots e filtrando pela coluna active . Slots não utilizados podem ser descartados para remover segmentos WAL usando o comando pg_drop_replication_slot .
A instância de réplica está usando muita memória. A réplica usa memória temporária para armazenar em cache operações de leitura solicitadas com frequência, o que pode fazer com que ela use mais memória do que a instância primária.

Reinicie a instância de réplica para recuperar o espaço de memória temporário.

A replicação foi interrompida. O limite máximo de armazenamento foi atingido e o aumento automático de armazenamento não está habilitado.

Edite a instância para habilitar automatic storage increase .

O atraso na replicação é consistentemente alto. A carga de gravação é muito alta para a réplica suportar. O atraso na replicação ocorre quando a thread SQL em uma réplica não consegue acompanhar a thread de E/S. Alguns tipos de consultas ou cargas de trabalho podem causar atrasos temporários ou permanentes na replicação de um determinado esquema. Algumas das causas típicas de atraso na replicação são:
  • Consultas lentas na réplica. Encontre e corrija-as.
  • Todas as tabelas devem ter uma chave única/primária. Cada atualização em uma tabela sem uma chave única/primária causa varreduras completas na réplica.
  • Consultas como DELETE ... WHERE field < 50000000 causam atraso na replicação com replicação baseada em linha, pois um grande número de atualizações são acumuladas na réplica.

Algumas soluções possíveis incluem:

  • Edite a instância para aumentar o tamanho da réplica.
  • Reduza a carga no banco de dados.
  • Enviar tráfego de leitura para a réplica de leitura.
  • Indexe as tabelas.
  • Identifique e corrija consultas de gravação lenta.
  • Recrie a réplica.
Erros ao reconstruir índices no PostgreSQL 9.6. Você recebe um erro do PostgreSQL informando que precisa reconstruir um índice específico. Isso só pode ser feito na instância primária. Se você criar uma nova instância de réplica, logo receberá o mesmo erro novamente. Índices de hash não são propagados para réplicas em versões do PostgreSQL anteriores à 10.

Se você precisar usar índices de hash, atualize para o PostgreSQL 10+. Caso contrário, se também quiser usar réplicas, não use índices de hash no PostgreSQL 9.6.

A consulta na instância primária está sempre em execução. Após criar uma réplica, espera-se que a consulta SELECT * from pg_stat_activity where state = 'active' and pid = XXXX and username = 'cloudsqlreplica' seja executada continuamente na sua instância primária.
A criação da réplica falha devido ao tempo limite. Transações não confirmadas de longa duração na instância primária podem causar falha na criação de réplicas de leitura.

Recrie a réplica após interromper todas as consultas em execução.

Se a instância primária e a réplica tiverem tamanhos de vCPU diferentes , poderá haver problemas de desempenho da consulta porque o otimizador de consulta leva em consideração os tamanhos de vCPU.

Para resolver esse problema, siga estas etapas:

  1. Ative o sinalizador log_duration e defina o parâmetro log_statement como ddl . Isso fornece as consultas e o tempo de execução no banco de dados. No entanto, dependendo da sua carga de trabalho, isso pode causar problemas de desempenho.
  2. Tanto na instância primária quanto na réplica de leitura, execute explain analyze para as consultas.
  3. Compare o plano de consulta e verifique se há diferenças.

Se for uma consulta específica, modifique-a. Por exemplo, você pode alterar a ordem das junções para ver se obtém melhor desempenho.