Evitar encapsulamento do ID da transação

O recommender 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 PostgreSQL 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 PostgreSQL do Cloud SQL.

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 do 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 console do Google 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 do Google Cloud, a 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 do 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 | Gemini 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