更新时间:2026-07-28 GMT+08:00
分享

操作指导

前提条件

需要设置instr_unique_sql_track_type值为all。

语法

不涉及。

注意事项

DBE_PERF.STATEMENT表记录上限受instr_unique_sql_count控制,instr_unique_sql_track_type默认值为all,默认记录存储过程内语句,会使该表记录的语句条数更容易达到阈值,达到阈值后不会产生新的记录,当数据量达到阈值可以使用reset_unique_sql(scope, clean_type, clean_value) 接口清理该表数据。

查询DBE_PERF.STATEMENT_HISTORY需要在系统库执行,其他库中不保存数据。

示例

-- 检查instr_unique_sql_track_type的值,确认该参数值为all
gaussdb=# SHOW instr_unique_sql_track_type;
gaussdb=# SET instr_unique_sql_track_type='all';
-- 为了方便观察,临时设置记录全量SQL 的L0级别指标
gaussdb=# SET track_stmt_stat_level='L0,L0';
-- 创建测试库
gaussdb=# CREATE DATABASE tedb;
-- 创建存储过程并执行
gaussdb=# CREATE TABLE test(a INT,b INT);
NOTICE:  The 'DISTRIBUTE BY' clause is not specified. Using 'a' as the distribution column by default.
HINT:  Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.
gaussdb=# INSERT INTO test VALUES(generate_series(1,30),2);
gaussdb=# CREATE OR REPLACE PROCEDURE test_proc1()
AS
num INT;
BEGIN
SELECT COUNT(*) INTO num FROM test;
END;
/
gaussdb=# CALL test_proc1();
 test_proc1
------------

(1 row)
-- 递归查询DBE_PERF.statement中的记录,查询结果时间类指标受实际环境影响,结果不固定。
gaussdb=# WITH p AS (SELECT * from DBE_PERF.STATEMENT WHERE query LIKE 'call test_proc1%' LIMIT 1)
SELECT
query,
n_soft_parse,
n_hard_parse,
n_returned_rows,
db_time,
cpu_time,
execution_time,
parse_time,
plan_time,
rewrite_time,
pl_execution_time,
pl_compilation_time,
data_io_time
FROM (
SELECT * FROM p UNION ALL SELECT * from DBE_PERF.STATEMENT
WHERE parent_unique_sql_id = (SELECT unique_sql_id FROM p)
);
               query                | n_soft_parse | n_hard_parse | n_returned_rows | db_time | cpu_time | execution_time | parse_time | plan_time | rewrite_time | pl_execution_time |
pl_compilation_time | data_io_time
------------------------------------+--------------+--------------+-----------------+---------+----------+----------------+------------+-----------+--------------+-------------------+-
--------------------+--------------
 call test_proc1();                 |            0 |            2 |               1 |   21590 |    13130 |          13769 |        327 |       728 |           11 |             12539 |
                659 |         2348
 SELECT COUNT(*)          FROM test |            0 |            1 |               1 |   19194 |    17705 |            289 |        327 |       728 |           11 |              9324 |
                659 |         2348
(2 rows)

-- 同理查询DBE_PERF.statement_history,需要在系统库查询
gaussdb=# WITH p AS (SELECT * FROM DBE_PERF.STATEMENT_HISTORY WHERE query LIKE 'call test_proc1%' LIMIT 1)
SELECT
parent_unique_sql_id,
unique_query_id,
query,
n_soft_parse,
n_hard_parse,
n_returned_rows,
db_time,
cpu_time,
execution_time,
parse_time,
plan_time,
rewrite_time,
pl_execution_time,
pl_compilation_time,
data_io_time
FROM (
SELECT * FROM DBE_PERF.STATEMENT_HISTORY
WHERE unique_query_id = (SELECT unique_query_id FROM p)
UNION ALL
SELECT * FROM DBE_PERF.STATEMENT_HISTORY
WHERE parent_unique_sql_id = (SELECT unique_query_id FROM p)
);
 parent_unique_sql_id | unique_query_id |               query                | n_soft_parse | n_hard_parse | n_returned_rows | db_time | cpu_time | execution_time | parse_time | plan_t
ime | rewrite_time | pl_execution_time | pl_compilation_time | data_io_time
----------------------+-----------------+------------------------------------+--------------+--------------+-----------------+---------+----------+----------------+------------+-------
----+--------------+-------------------+---------------------+--------------
                    0 |      4276558564 | call test_proc1();                 |            0 |            2 |               1 |   14842 |     7871 |          13480 |          0 |
  0 |            0 |             12539 |                   0 |            0
           4276558564 |      1011671199 | SELECT COUNT(*)          FROM test |            0 |            1 |               1 |   12446 |    12446 |              0 |        327 |
728 |           11 |              9324 |                 659 |          615
(2 rows)

-- 非系统库查询dbe_perf.statement_history,不存放数据
gaussdb=# \c tedb
tedb=# WITH p AS (SELECT * FROM DBE_PERF.STATEMENT_HISTORY WHERE query LIKE 'call test_proc1%' LIMIT 1)
SELECT
parent_unique_sql_id,
unique_query_id,
query,
n_soft_parse,
n_hard_parse,
n_returned_rows,
db_time,
cpu_time,
execution_time,
parse_time,
plan_time,
rewrite_time,
pl_execution_time,
pl_compilation_time,
data_io_time
from (
SELECT * FROM DBE_PERF.STATEMENT_HISTORY
WHERE unique_query_id = (SELECT unique_query_id FROM p)
UNION ALL
SELECT * FROM DBE_PERF.STATEMENT_HISTORY
WHERE parent_unique_sql_id = (SELECT unique_query_id FROM p)
);
 parent_unique_sql_id | unique_query_id | query | n_soft_parse | n_hard_parse | n_returned_rows | db_time | cpu_time | execution_time | parse_time | plan_time | rewrite_time | pl_execu
tion_time | pl_compilation_time | data_io_time
----------------------+-----------------+-------+--------------+--------------+-----------------+---------+----------+----------------+------------+-----------+--------------+---------
----------+---------------------+--------------
(0 rows)

-- 切换回初始数据库,并删除测试数据库
tedb=# \c postgres
gaussdb=# DROP DATABASE tedb;

相关文档