Todos os produtos
Search
Central de documentação

PolarDB:dbms_sql.add_trace

Última atualização: Jun 28, 2026

O procedimento armazenado dbms_sql.add_trace registra instruções SQL específicas para rastreamento sob demanda pelo recurso SQL Trace.

Pré-requisitos

Defina o parâmetro loose_sql_trace_type como DEMAND antes de chamar este procedimento.

Sintaxe

dbms_sql.add_trace('<schema>', '<query>')

Após a execução do procedimento, o PolarDB normaliza as constantes da instrução SQL em um modelo. As instruções correspondentes a esse modelo são rastreadas automaticamente.

Parâmetros

Parâmetro

Descrição

schema

Nome do schema.

query

Instrução SQL em execução.

Observações de uso

O comportamento do procedimento varia conforme o nó de execução.

Nó primário: O registro de rastreamento é persistente. Os registros relacionados na tabela mysql.sql_sharing são excluídos e sincronizados com todos os nós somente leitura.

Nós somente leitura: O registro de rastreamento não é persistente. A execução do procedimento armazenado ocorre apenas nesses nós. Ao acessar o banco de dados por um endpoint de cluster, o sistema roteia automaticamente as instruções SQL modeladas para o nó primário.

Exemplo

Este exemplo rastreia uma consulta de intervalo e consulta ambas as tabelas do sistema para inspecionar o modelo e as estatísticas de execução.

Etapa 1: Registrar a instrução SQL para rastreamento

call dbms_sql.add_trace('test', 'select * from t where c1 > 1 and c1 < 10');

Etapa 2: Verifique o modelo de rastreamento em mysql.sql_sharing

Consulte a tabela mysql.sql_sharing para confirme se a instrução foi registrada e modelada:

select * from mysql.sql_sharing\G

Saída esperada:

*************************** 1. row ***************************
         Id: (id number)
     Sql_id: 82t4dswtqjg02
Schema_name: test
       Type: SQL_TRACE
Digest_text: SELECT * FROM `t` WHERE `c1` > ? AND `c1` < ?
    Plan_id: NULL
       Plan: NULL
    Version: 0
Create_time: 2022-11-07 19:05:27.980605
Update_time: 2022-11-07 19:05:27.980605
 Extra_info: NULL

O campo Digest_text exibe o modelo normalizado: os valores literais 1 e 10 foram substituídos por ?. Qualquer instrução correspondente a esse padrão passa a ser rastreada, independentemente dos valores constantes específicos utilizados.

Etapa 3: Execute instruções correspondentes ao modelo

select * from  t where c1 > 1 and c1 < 10;
select * from  t where c1 > 1 and c1 < 100;

Etapa 4: Inspecionar dados de rastreamento e estatísticas do plano de execução

Consulte information_schema.sql_sharing para visualizar as estatísticas e os planos de execução utilizados:

select * from information_schema.sql_sharing\G

Saída esperada:

*************************** 1. row ***************************
              TYPE: SQL
            SQL_ID: 82t4dswtqjg02
       SCHEMA_NAME: test
       DIGEST_TEXT: SELECT * FROM `t` WHERE `c1` > ? AND `c1` < ?
           PLAN_ID: NULL
              PLAN: NULL
        PLAN_EXTRA: NULL
        ERROR_CODE: NULL
            REF_BY: SQL_TRACE(DEMAND)
   FIRST_LOAD_TIME: 2022-11-07 19:05:28
     LAST_HIT_TIME: 2022-11-07 19:17:24
        EXECUTIONS: 2
     SUM_WAIT_TIME: 363
     MIN_WAIT_TIME: 179
     MAX_WAIT_TIME: 184
     SUM_EXEC_TIME: 925
     MIN_EXEC_TIME: 438
     MAX_EXEC_TIME: 487
     SUM_ROWS_SENT: 106
     MIN_ROWS_SENT: 8
     MAX_ROWS_SENT: 98
 SUM_ROWS_EXAMINED: 108
 MIN_ROWS_EXAMINED: 8
 MAX_ROWS_EXAMINED: 100
 SUM_ROWS_AFFECTED: 0
 MIN_ROWS_AFFECTED: 0
 MAX_ROWS_AFFECTED: 0
  SUM_LOGICAL_READ: 122
  MIN_LOGICAL_READ: 19
  MAX_LOGICAL_READ: 103
 SUM_PHY_SYNC_READ: 0
 MIN_PHY_SYNC_READ: 0
 MAX_PHY_SYNC_READ: 0
SUM_PHY_ASYNC_READ: 0
MIN_PHY_ASYNC_READ: 0
MAX_PHY_ASYNC_READ: 0
             EXTRA: {TRACE_ROW_ID:10}
*************************** 2. row ***************************
              TYPE: PLAN
            SQL_ID: 82t4dswtqjg02
       SCHEMA_NAME: test
       DIGEST_TEXT: NULL
           PLAN_ID: 5a4cvp4gjqgfj
              PLAN: /*+ NO_INDEX(`t`@`select#1`) */
        PLAN_EXTRA: {`t`@`select#1`:ALL}
        ERROR_CODE: 0
            REF_BY: SQL_TRACE(DEMAND)
   FIRST_LOAD_TIME: 2022-11-07 19:17:24
     LAST_HIT_TIME: 2022-11-07 19:17:24
        EXECUTIONS: 1
     SUM_WAIT_TIME: 184
     MIN_WAIT_TIME: 184
     MAX_WAIT_TIME: 184
     SUM_EXEC_TIME: 487
     MIN_EXEC_TIME: 487
     MAX_EXEC_TIME: 487
     SUM_ROWS_SENT: 98
     MIN_ROWS_SENT: 98
     MAX_ROWS_SENT: 98
 SUM_ROWS_EXAMINED: 100
 MIN_ROWS_EXAMINED: 100
 MAX_ROWS_EXAMINED: 100
 SUM_ROWS_AFFECTED: 0
 MIN_ROWS_AFFECTED: 0
 MAX_ROWS_AFFECTED: 0
  SUM_LOGICAL_READ: 103
  MIN_LOGICAL_READ: 103
  MAX_LOGICAL_READ: 103
 SUM_PHY_SYNC_READ: 0
 MIN_PHY_SYNC_READ: 0
 MAX_PHY_SYNC_READ: 0
SUM_PHY_ASYNC_READ: 0
MIN_PHY_ASYNC_READ: 0
MAX_PHY_ASYNC_READ: 0
             EXTRA: NULL
*************************** 3. row ***************************
              TYPE: PLAN
            SQL_ID: 82t4dswtqjg02
       SCHEMA_NAME: test
       DIGEST_TEXT: NULL
           PLAN_ID: 463zszw4mbv3w
              PLAN: /*+ INDEX(`t`@`select#1` `i_c1`) */
        PLAN_EXTRA: {`t`@`select#1`:range}
        ERROR_CODE: 0
            REF_BY: SQL_TRACE(DEMAND)
   FIRST_LOAD_TIME: 2022-11-07 19:17:21
     LAST_HIT_TIME: 2022-11-07 19:17:21
        EXECUTIONS: 1
     SUM_WAIT_TIME: 179
     MIN_WAIT_TIME: 179
     MAX_WAIT_TIME: 179
     SUM_EXEC_TIME: 438
     MIN_EXEC_TIME: 438
     MAX_EXEC_TIME: 438
     SUM_ROWS_SENT: 8
     MIN_ROWS_SENT: 8
     MAX_ROWS_SENT: 8
 SUM_ROWS_EXAMINED: 8
 MIN_ROWS_EXAMINED: 8
 MAX_ROWS_EXAMINED: 8
 SUM_ROWS_AFFECTED: 0
 MIN_ROWS_AFFECTED: 0
 MAX_ROWS_AFFECTED: 0
  SUM_LOGICAL_READ: 19
  MIN_LOGICAL_READ: 19
  MAX_LOGICAL_READ: 19
 SUM_PHY_SYNC_READ: 0
 MIN_PHY_SYNC_READ: 0
 MAX_PHY_SYNC_READ: 0
SUM_PHY_ASYNC_READ: 0
MIN_PHY_ASYNC_READ: 0
MAX_PHY_ASYNC_READ: 0
             EXTRA: NULL

A saída contém uma linha SQL e duas linhas PLAN, todas com o mesmo SQL_ID. Isso indica que as duas execuções rastreadas utilizaram planos de execução diferentes:

  • Linha 2 (PLAN): Varredura completa da tabela (ALL), identificada pela dica de plano NO_INDEX. Este plano examinou 100 linhas e levou 487 microssegundos.

  • Linha 3 (PLAN): Varredura de intervalo de índice usando o índice i_c1 (range). Este plano examinou apenas 8 linhas e levou 438 microssegundos.

As instruções SQL correspondentes ao modelo associam-se aos seguintes planos de execução: varreduras de intervalo de índice i_c1 e varreduras completas de tabela.