Evitar encapsulamento do ID da transação

O recomendador de alta utilização do ID da transação do Cloud SQL gera recomendações proativas que ajudam a evitar possíveis encapsulamentos de ID da transação para instâncias do Cloud SQL para PostgreSQL. O recomendador de alta utilização do ID da transação do Cloud SQL tem suporte apenas para instâncias da edição Enterprise Plus do Cloud SQL.

É possível aplicar essa recomendação quando uma instância do Cloud SQL tende para um problema de encapsulamento de ID da transação. Nesta página, descrevemos como o recomendador de alta utilização do ID da transação do Cloud SQL funciona e como você pode usá-lo.

Como funciona

Um ID da transação é atribuído quando a transação é iniciada e é congelado quando ela é aspirada. O uso do ID da transação é o número de transações não aspiradas (atribuídas menos congeladas) expressas como uma fração do valor máximo de 2 bilhões. Nas configurações padrão do PostgreSQL, com processos de vácuo executando de maneira ideal e sem interrupção, a maioria dos bancos de dados tem utilização do ID da transação em aproximadamente 10%. Níveis mais altos de utilização do ID da transação podem ser observados em bancos de dados movimentados, em que as cargas de trabalho regulares geralmente têm precedência sobre o vácuo. Se a utilização do ID da transação tende para valores muito altos (80% ou mais), o banco de dados pode estar em risco de exaustão do ID da transação. O uso do ID da transação que atinge 100% é chamado de encapsulamento do ID da transação. Quando a porcentagem de utilização do ID da transação atinge 100%, o PostgreSQL para de aceitar consultas de gravação.

O recomendador de alta utilização do ID da transação do Cloud SQL analisa a utilização do ID da transação em uma instância do Cloud SQL para PostgreSQL.

Se a porcentagem de utilização do ID da transação for maior ou igual a 80%, é recomendável tomar medidas para evitar o encapsulamento do ID da transação.

Preços

O recomendador de alta utilização do ID da transação do Cloud SQL está no nível de preço Standard.

Antes de começar

Antes de visualizar as recomendações e insights, faça o seguinte:

  • Para conseguir as permissões de visualização e trabalho com insights e recomendações, verifique se você tem os papéis necessários.
    Tarefas Papéis
    Ver recomendações Um destes papéis: recommender.cloudsqlViewer ou cloudsql.viewer.
    Aplicar recomendações Um destes papéis: recommender.cloudsqlAdmin, cloudsql.editor, ou cloudsql.admin.
    Para mais informações sobre papéis, consulte Noções básicas sobre papéis e Como conceder permissões do IAM.
  • Enable the Recommender API.

    Enable the API

Listar recomendações para melhorar o desempenho da instância

É possível listar as recomendações para melhorar o desempenho da instância usando o console Google Cloud , o gcloud CLI ou a API Recommender.

As recomendações para melhorar o desempenho da instância serão exibidas somente se você tiver instâncias perto de um encapsulamento do ID da transação.

Console

Para listar recomendações sobre o desempenho da instância usando o consoleGoogle Cloud , siga estas etapas:

  1. Acesse a página Instâncias" do Cloud SQL

    Acesse "Instâncias do Cloud SQL"

  2. Clique em Ver tudo no banner de recomendações "Evitar encapsulamento de ID de transação".

Ou então:

  1. Acesse o Hub de recomendações. Consulte também os Primeiros passos com o Hub de recomendações.

    Acesse o Hub de recomendações

  2. No card Melhorar o desempenho das instâncias do Cloud SQL, clique em Ver tudo.

  3. Selecione as instâncias com a recomendação Evitar encapsulamento de ID da transação.

CLI da gcloud

Para listar as recomendações para melhorar o desempenho da instância usando a gcloud CLI, execute o comando gcloud recommender recommendations list da seguinte maneira:

gcloud recommender recommendations list \
--project=PROJECT_ID \
--location=LOCATION \
--recommender=google.cloudsql.instance.PerformanceRecommender \
--filter=recommenderSubtype=POSTGRES_HIGH_TRANSACTION_ID_UTILIZATION_BEST_PRACTICE

Substitua:

  • PROJECT_ID: o ID do projeto
  • LOCATION: uma região, como us-central1;

API

Para listar as recomendações para melhorar o desempenho da instância usando a API Recommendations, chame o método recommendations.list da seguinte maneira:

GET https://recommender.googleapis.com/v1beta1/projects/PROJECT-ID/locations/LOCATION/recommenders/google.cloudsql.instance.PerformanceRecommender.PostgresHighTransactionIdUtilizationBestPractice/recommendations

Substitua:

  • PROJECT_ID: o ID do projeto
  • LOCATION: uma região, como us-central1.

Se o recomendador detectar instâncias com alta utilização do ID da transação, ele as lista em uma tabela com outras recomendações de desempenho. Cada linha mostra o ID da instância, uma breve recomendação, o mecanismo de banco de dados, o local e a data da última atualização.

Ver insights e recomendações detalhadas

É possível ver insights e recomendações detalhadas sobre instâncias que tendem para um encapsulamento do ID da transação usando o console Google Cloud , gcloud CLI ou a API Recommender.

Console

Para ver insights e recomendações detalhadas sobre instâncias próximas do limite de desempenho usando o console Google Cloud , clique no link de recomendação na lista de instâncias.

CLI da gcloud

Para ver insights e recomendações detalhadas sobre instâncias próximas do limite de desempenho usando a gcloud CLI, execute o comando gcloud recommender insights list da seguinte maneira:

gcloud recommender insights list \
--project=PROJECT_ID \
--location=LOCATION \
--insight-type=google.cloudsql.instance.PerformanceInsight \
--filter=insightSubtype=POSTGRES_HIGH_TRANSACTION_ID_UTILIZATION

Substitua:

  • PROJECT_ID: o ID do projeto
  • LOCATION: uma região, como us-central1.

API

Para ver insights e recomendações detalhadas sobre instâncias próximas do limite de desempenho usando a API Recommendations, chame o insights.list da seguinte forma:

GET https://recommender.googleapis.com/v1beta1/projects/PROJECT-ID/locations/LOCATION/insightTypes/google.cloudsql.instance.PerformanceRecommender.PostgresHighTransactionIdUtilization/insights

Substitua:

  • PROJECT_ID: o ID do projeto
  • LOCATION: uma região, como us-central1.

A tabela a seguir lista o insight e a recomendação que o recomendador de alta utilização do ID da transação do Cloud SQL gera. Os subtipos são visíveis nos resultados da gcloud CLI e da API.

Insight Recomendação
A porcentagem de utilização do ID da transação nessa instância é alta e próxima de 100%.
Subtipo: POSTGRES_HIGH_TRANSACTION_ID_UTILIZATION
Evite possíveis encapsulamentos de ID da transação para instâncias do Cloud SQL.
Subtipo: POSTGRES_HIGH_TRANSACTION_ID_UTILIZATION_BEST_PRACTICE

Aplicar recomendações

Avalie as recomendações com atenção e siga um destes procedimentos:

Otimizar o desempenho da instância

Para resolver o problema de ID da transação com a instância, faça o seguinte:

  1. Encontre o banco de dados e a tabela que estão causando o encapsulamento

  2. Analise e interprete as métricas de utilização do ID da transação nas instâncias do banco de dados.

  3. Verifique se há um código de transação travado

  4. Remova bloqueadores VACUUM

  5. Confira e acelere a velocidade do VACUUM

Para mais informações, consulte também a postagem do blog Como usar VACUUM para acelerar a congelamento do ID da transação no Cloud SQL para PostgreSQL.

Evitar encapsulamento do ID da transação

Para evitar o encapsulamento de ID da transação em uma instância, execute o seguinte comando:

SELECT * FROM google_vacuum_mgmt.pg_fix_wraparound();

Exemplo de saída:

postgres=> select * from google_vacuum_mgmt.pg_fix_wraparound();
-[ RECORD 1 ]-----+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
issue_description | Cloud SQL for PostgreSQL has detected an open prepared transaction on your instance which is blocking VACUUM. Monitor the transaction ID utilization and commit or rollback the transaction, as needed.
query             | ROLLBACK PREPARED 'trx_id_pin'; or COMMIT PREPARED 'trx_id_pin';
recommendation    | To commit a prepared transaction, you must be connected as the same user that originally executed the transaction: postgres
insights          | Transaction ID Utilization: 88.49%

A seguir