Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Computação
Elastic Cloud Server
Bare Metal Server
Auto Scaling
Image Management Service
Dedicated Host
FunctionGraph
Cloud Phone Host
Huawei Cloud EulerOS
Redes
Virtual Private Cloud
Elastic IP
Elastic Load Balance
NAT Gateway
Direct Connect
Virtual Private Network
VPC Endpoint
Cloud Connect
Enterprise Router
Enterprise Switch
Global Accelerator
Gerenciamento e governança
Cloud Eye
Identity and Access Management
Cloud Trace Service
Resource Formation Service
Tag Management Service
Log Tank Service
Config
Resource Access Manager
Simple Message Notification
Application Performance Management
Application Operations Management
Organizations
Optimization Advisor
Cloud Operations Center
Resource Governance Center
Migração
Server Migration Service
Object Storage Migration Service
Cloud Data Migration
Migration Center
Cloud Ecosystem
KooGallery
Partner Center
User Support
My Account
Billing Center
Cost Center
Resource Center
Enterprise Management
Service Tickets
HUAWEI CLOUD (International) FAQs
ICP Filing
Support Plans
My Credentials
Customer Operation Capabilities
Partner Support Plans
Professional Services
Análises
MapReduce Service
Data Lake Insight
CloudTable Service
Cloud Search Service
Data Lake Visualization
Data Ingestion Service
GaussDB(DWS)
DataArts Studio
IoT
IoT Device Access
Outros
Product Pricing Details
System Permissions
Console Quick Start
Common FAQs
Instructions for Associating with a HUAWEI CLOUD Partner
Message Center
Segurança e conformidade
Security Technologies and Applications
Web Application Firewall
Host Security Service
Cloud Firewall
SecMaster
Anti-DDoS Service
Data Encryption Workshop
Database Security Service
Cloud Bastion Host
Data Security Center
Cloud Certificate Manager
Situation Awareness
Managed Threat Detection
Blockchain
Blockchain Service
Serviços de mídia
Media Processing Center
Video On Demand
Live
SparkRTC
Armazenamento
Object Storage Service
Elastic Volume Service
Cloud Backup and Recovery
Cloud Server Backup Service
Storage Disaster Recovery Service
Scalable File Service
Volume Backup Service
Data Express Service
Dedicated Distributed Storage Service
Containers
Cloud Container Engine
SoftWare Repository for Container
Application Service Mesh
Ubiquitous Cloud Native Service
Cloud Container Instance
Bancos de dados
Relational Database Service
Document Database Service
Data Admin Service
Data Replication Service
GeminiDB
GaussDB
Distributed Database Middleware
Database and Application Migration UGO
TaurusDB
Middleware
Distributed Cache Service
API Gateway
Distributed Message Service for Kafka
Distributed Message Service for RabbitMQ
Distributed Message Service for RocketMQ
Cloud Service Engine
EventGrid
Dedicated Cloud
Dedicated Computing Cluster
Aplicações de negócios
ROMA Connect
Message & SMS
Domain Name Service
Edge Data Center Management
Meeting
AI
Face Recognition Service
Graph Engine Service
Content Moderation
Image Recognition
Data Lake Factory
Optical Character Recognition
ModelArts
ImageSearch
Conversational Bot Service
Speech Interaction Service
Huawei HiLens
Developer Tools
SDK Developer Guide
API Request Signing Guide
Terraform
Koo Command Line Interface
Distribuição de conteúdo e computação de borda
Content Delivery Network
Intelligent EdgeFabric
CloudPond
Soluções
SAP Cloud
High Performance Computing
Serviços para desenvolvedore
ServiceStage
CodeArts
CodeArts PerfTest
CodeArts Req
CodeArts Pipeline
CodeArts Build
CodeArts Deploy
CodeArts Artifact
CodeArts TestPlan
CodeArts Check
Cloud Application Engine
MacroVerse aPaaS
KooPhone
KooDrive
Central de ajuda/ GaussDB(DWS)/ Melhores práticas/ Gerenciamento de banco de dados/ Análise de instruções SQL que estão sendo executadas

Análise de instruções SQL que estão sendo executadas

Atualizado em 2024-05-09 GMT+08:00

Durante o desenvolvimento, os desenvolvedores geralmente encontram problemas como conexões SQL excessivas, tempo de consulta SQL longo e bloqueio de consulta SQL. Você pode usar as exibições PG_STAT_ACTIVITY and PGXC_THREAD_WAIT_STATUS para analisar e localizar problemas de SQL. Esta seção descreve alguns métodos comuns de localização.

Tabela 1 Alguns campos de PG_STAT_ACTIVITY

Nome

Tipo

Descrição

usename

name

Nome do usuário que efetua logon no back-end

client_addr

inet

O endereço IP do cliente conectado ao back-end null indica que o cliente está conectado por meio de um soquete Unix na máquina do servidor ou que este é um processo interno, como autovacuum.

application_name

text

Nome da aplicação conectada ao back-end

state

text

Estado geral do back-end. Os valores são:

  • active: o back-end está executando consultas.
  • idle: o back-end está aguardando novos comandos do cliente.
  • idle in transaction: o backend está em uma transação, mas não há nenhuma instrução sendo executada na transação.
  • idle in transaction (aborted): o back-end está em uma transação, mas há declarações falhadas na transação.
  • fastpath function call: o back-end está executando uma função fast-path.
  • disabled: esse estado é relatado se track_activities estiver desabilitado nesse back-end.
NOTA:

Os usuários comuns podem visualizar apenas o status da sessão de suas próprias contas. Ou seja, as informações de estado de outras contas estão vazias.

waiting

boolean

Se o back-end estiver atualmente esperando por um bloqueio, o valor será t. Caso contrário, o valor é f.

  • t significa verdadeiro.
  • f significa falso.

enqueue

text

Status de enfileiramento de uma instrução. Seu valor pode ser:

  • waiting in global queue: a instrução está enfileirando na fila concorrente global. O número de instruções simultâneas excede o valor de max_active_statements configurado para um único CN.
  • waiting in respool queue: a instrução está enfileirando no pool de recursos e a simultaneidade de trabalhos simples é limitada. A principal razão é que a simultaneidade de trabalhos simples excede o limite superior max_dop da via rápida.
  • waiting in ccn queue: o trabalho está na fila CCN, que pode ser enfileiramento de memória global, enfileiramento de memória de faixa lenta ou enfileiramento simultâneo. Os cenários são:
    1. A memória global disponível excede o limite superior, o trabalho está enfileirando na fila de memória global.
    2. As solicitações simultâneas na pista lenta no pool de recursos excedem o limite superior, que é especificado por active_statements.
    3. A memória de faixa lenta do pool de recursos excede o limite superior, ou seja, a memória estimada de trabalhos simultâneos no pool de recursos excede o limite superior especificado por mem_percent.
  • Vazio ou no waiting queue: A instrução está em execução.

pid

bigint

ID do thread de back-end.

Exibir informações de conexão

  • Defina track_activities como on.
    SET track_activities = on;

    O banco de dados coleta as informações em execução sobre consultas ativas somente se esse parâmetro está definido como on.

  • Você pode executar as seguintes instruções SQL para verificar o usuário de conexão atual, o endereço de conexão, a aplicação de conexão, o status, a espera de um bloqueio, o status do enfileiramento e o ID do thread.
    1
    SELECT usename,client_addr,application_name,state,waiting,enqueue,pid FROM PG_STAT_ACTIVITY WHERE DATNAME='database name';
    

    A seguinte saída de comando é exibida:

    1
    2
    3
    4
    5
    6
     usename |  client_addr  | application_name | state  | waiting | enqueue |       pid       
    ---------+---------------+------------------+--------+---------+---------+-----------------
     leo     | 192.168.0.133 | gsql             | idle   | f       |         | 139666091022080
     dbadmin | 192.168.0.133 | gsql             | active | f       |         | 139666212681472
     joe     | 192.168.0.133 |                  | idle   | f       |         | 139665671489280
    (3 rows)
    
  • Encerre uma sessão (somente o administrador do sistema tem a permissão).
    1
    SELECT PG_TERMINATE_BACKEND(pid);
    

Exibir informações de execução de SQL

  • Execute o seguinte comando para obter todas as informações SQL que o usuário atual tem permissão para exibir (se o usuário atual tiver permissão de administrador ou função predefinida, todas as informações de consulta do usuário poderão ser exibidas):
    1
    SELECT usename,state,query FROM PG_STAT_ACTIVITY WHERE DATNAME='database name';
    
    Se o valor de state estiver active, a coluna de consulta indicará a instrução SQL que está sendo executada. Em outros casos, a coluna de consulta indica a instrução de consulta anterior. Se o valor de state for idle, a conexão ficará ociosa e aguardará que o usuário insira um comando. A seguinte saída de comando é exibida:
    1
    2
    3
    4
    5
    6
     usename | state  |                                   query                                   
    ---------+--------+---------------------------------------------------------------------------
     leo     | idle   | select * from joe.mytable;
     dbadmin | active | SELECT usename,state,query FROM PG_STAT_ACTIVITY WHERE DATNAME='gaussdb';
     joe     | idle   | GRANT SELECT ON TABLE mytable to leo;
    (3 rows)
    
  • Execute o seguinte comando para exibir as informações sobre as instruções SQL que não estão no estado ocioso:
    1
    SELECT datname,usename,query FROM PG_STAT_ACTIVITY WHERE state != 'idle' ;
    

Exibir instruções que consomem muito tempo

  • Verifique as instruções SQL que levam muito tempo para serem executadas.
    1
    SELECT current_timestamp - query_start as runtime, datname, usename, query FROM PG_STAT_ACTIVITY WHERE state != 'idle' order by 1 desc;
    

    As instruções de consulta são retornadas e classificadas por duração de tempo de execução em ordem decrescente. O primeiro registro é a instrução de consulta que leva mais tempo para ser executada.

    1
    2
    3
    4
    5
         runtime     | datname  | usename |                                                                  query                                                                  
    -----------------+----------+---------+-----------------------------------------------------------------------------------------------------------------------------------------
     00:04:47.054958 | gaussdb  | leo     | insert into mytable1 select generate_series(1, 10000000);
     00:00:01.72789  | gaussdb  | dbadmin | SELECT current_timestamp - query_start as runtime, datname, usename, query FROM PG_STAT_ACTIVITY WHERE state != 'idle' order by 1 desc;
    (2 rows)
    
  • Como alternativa, você pode definir current_timestamp - query_start para ser maior que um limite para identificar instruções de consulta que são executadas por um período maior que esse limite.
    1
    SELECT query from PG_STAT_ACTIVITY WHERE current_timestamp - query_start > interval '2 days';
    

Consultar instruções bloqueadas

  • Execute o seguinte comando para exibir instruções de consulta bloqueadas:
    1
    SELECT pid, datname, usename, state, query FROM PG_STAT_ACTIVITY WHERE state <> 'idle' and waiting=true;
    
    Execute a instrução a seguir para encerrar a sessão SQL bloqueada:
    1
    SELECT PG_TERMINATE_BACKEND(pid);
    
    • Na maioria dos casos, o bloqueio é causado por bloqueios internos e waiting=true é exibido. Você pode ver o bloqueio na exibição pg_stat_activity.
    • As instruções bloqueadas sobre a gravação de arquivos e agendadores de eventos não podem ser visualizadas na exibição pg_stat_activity.
  • Exiba informações sobre as instruções de consulta bloqueadas, tabelas e esquemas.
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    SELECT w.query as waiting_query,
    w.pid as w_pid,
    w.usename as w_user,
    l.query as locking_query,
    l.pid as l_pid,
    l.usename as l_user,
    t.schemaname || '.' || t.relname as tablename
    from pg_stat_activity w join pg_locks l1 on w.pid = l1.pid
    and not l1.granted join pg_locks l2 on l1.relation = l2.relation
    and l2.granted join pg_stat_activity l on l2.pid = l.pid join pg_stat_user_tables t on l1.relation = t.relid
    where w.waiting;
    

    A saída do comando inclui um ID de sessão, informações do usuário, status da consulta e tabela ou esquema que causou o bloqueio.

    Depois de encontrar a tabela bloqueada ou informações de esquema, encerre a sessão defeituosa.

    1
    SELECT PG_TERMINATE_BACKEND(pid);
    

    Se informações semelhantes às seguintes forem exibidas, a sessão será encerrada com êxito:

    PG_TERMINATE_BACKEND 
    ----------------------  
    t 
    (1 row)

    Se informações semelhantes às seguintes forem exibidas, o usuário está tentando encerrar a sessão, mas a sessão será reconectada em vez de encerrada.

    FATAL:  terminating connection due to administrator command 
    FATAL:  terminating connection due to administrator command 
    The connection to the server was lost. Attempting reset: Succeeded.

    Se a função PG_TERMINATE_BACKEND for usada pelo cliente de gsql para encerrar os threads em segundo plano da sessão, o cliente será reconectado automaticamente em vez de ser encerrado.

Usamos cookies para aprimorar nosso site e sua experiência. Ao continuar a navegar em nosso site, você aceita nossa política de cookies. Saiba mais

Feedback

Feedback

Feedback

0/500

Conteúdo selecionado

Envie o conteúdo selecionado com o feedback