STATEMENT_HISTORY
获得当前节点的执行语句的信息。查询视图必须具有sysadmin权限或者monitor admin权限。只可在系统库中查询到结果,用户库中无法查询。query长度受参数track_activity_query_size控制。
表 1 STATEMENT_HISTORY字段
名称 | 类型 | 描述 | 记录级别 |
---|
db_name | name | 数据库名称。 | L0 |
schema_name | name | schema名称。 | L0 |
origin_node | integer | 节点名称。 | L0 |
user_name | name | 用户名。 | L0 |
application_name | text | 用户发起的请求的应用程序名称。 | L0 |
client_addr | text | 用户发起的请求的客户端地址。 | L0 |
client_port | integer | 用户发起的请求的客户端端口。 | L0 |
unique_query_id | bigint | 归一化SQL ID。 | L0 |
debug_query_id | bigint | 唯一SQL ID。 | L0 |
query | text | 归一化SQL。 | L0 |
start_time | timestamp with time zone | 语句启动的时间。 | L0 |
finish_time | timestamp with time zone | 语句结束的时间。 | L0 |
slow_sql_threshold | bigint | 语句执行时慢SQL的标准。 | L0 |
transaction_id | bigint | 事务ID。 | L0 |
thread_id | bigint | 执行线程ID。 | L0 |
session_id | bigint | 用户session id。 | L0 |
n_soft_parse | bigint | 软解析次数,n_soft_parse + n_hard_parse可能大于n_calls,因为子查询未计入n_calls。 | L0 |
n_hard_parse | bigint | 硬解析次数,n_soft_parse + n_hard_parse可能大于n_calls,因为子查询未计入n_calls。 | L0 |
query_plan | text | 语句执行计划。 | L0 |
n_returned_rows | bigint | SELECT返回的结果集行数。 | L0 |
n_tuples_fetched | bigint | 随机扫描行。 | L0 |
n_tuples_returned | bigint | 顺序扫描行。 | L0 |
n_tuples_inserted | bigint | 插入行。 | L0 |
n_tuples_updated | bigint | 更新行。 | L0 |
n_tuples_deleted | bigint | 删除行。 | L0 |
n_blocks_fetched | bigint | buffer的块访问次数。 | L0 |
n_blocks_hit | bigint | buffer的块命中次数。 | L0 |
db_time | bigint | 有效的DB时间花费,多线程将累加(单位:微秒)。 | L0 |
cpu_time | bigint | CPU时间(单位:微秒)。 | L0 |
execution_time | bigint | 执行器内执行时间(单位:微秒)。 | L0 |
parse_time | bigint | SQL解析时间(单位:微秒)。 | L0 |
plan_time | bigint | SQL生成计划时间(单位:微秒)。 | L0 |
rewrite_time | bigint | SQL重写时间(单位:微秒)。 | L0 |
pl_execution_time | bigint | plpgsql上的执行时间(单位:微秒)。 |
pl_compilation_time | bigint | plpgsql上的编译时间(单位:微秒)。 | L0 |
data_io_time | bigint | IO上的时间花费(单位:微秒)。 | L0 |
net_send_info | text | 通过物理连接发送消息的网络状态,包含时间(微秒)、调用次数、吞吐量(字节)。通过该字段可以分析SQL在分布式系统下的网络开销,单机模式下不支持该字段。例如:{"time":xxx, "n_calls":xxx, "size":xxx}。 | L0 |
net_recv_info | text | 通过物理连接接收消息的网络状态,包含时间(微秒)、调用次数、吞吐量(字节)。通过该字段可以分析SQL在分布式系统下的网络开销,单机模式下不支持该字段。例如:{"time":xxx, "n_calls":xxx, "size":xxx}。 | L0 |
net_stream_send_info | text | 通过逻辑连接发送消息的网络状态,包含时间(微秒)、调用次数、吞吐量(字节)。通过该字段可以分析SQL在分布式系统下的网络开销,单机模式下不支持该字段。例如:{"time":xxx, "n_calls":xxx, "size":xxx}。 | L0 |
net_stream_recv_info | text | 通过逻辑连接接收消息的网络状态,包含时间(微秒)、调用次数、吞吐量(字节)。通过该字段可以分析SQL在分布式系统下的网络开销,单机模式下不支持该字段。例如:{"time":xxx, "n_calls":xxx, "size":xxx}。 | L0 |
lock_count | bigint | 加锁次数。 | L0 |
lock_time | bigint | 加锁耗时。 | L1 |
lock_wait_count | bigint | 加锁等待次数。 | L0 |
lock_wait_time | bigint | 加锁等待耗时。 | L1 |
lock_max_count | bigint | 最大持锁数量。 | L0 |
lwlock_count | bigint | 轻量级加锁次数(预留)。 | L0 |
lwlock_wait_count | bigint | 轻量级等锁次数。 | L0 |
lwlock_time | bigint | 轻量级加锁时间(预留)。 | L1 |
lwlock_wait_time | bigint | 轻量级加锁时间。 | L1 |
details | bytea | 等待事件和语句锁事件的列表。 记录级别的值是L0时,开始记录等待事件的列表。显示当前语句event等待相关的统计信息。具体事件信息见等待状态列表、轻量级锁等待事件列表、IO等待事件列表和事务锁等待事件列表。关于每种事务锁对业务的影响程度,请参考LOCK语法小节的详细描述。 记录级别的值是L2时,开始记录语句锁事件的列表,该列表按时间顺序记录事件,记录的数量受参数track_stmt_details_size的影响。 事件包括: - 加锁开始
- 加锁结束
- 等锁开始
- 等锁结束
- 放锁开始
- 放锁结束
- 轻量级等锁开始
- 轻量级等锁结束
| L2 |
is_slow_sql | boolean | 该SQL是否为slow SQL | L0 |
trace_id | text | 驱动传入的trace id,与应用的一次请求相关联。 | L0 |
advise | text | 可能导致该SQL为slow SQL的风险信息。 | L0 |
net_send_time | bigint | 网络上的时间花销。(单位:微秒) | L0 |
srt1_q | bigint | Q报文执行的耗时(单位:微秒) | L0 |
srt2_simple_query | bigint | exec_simple_query执行耗时(单位:微秒) | L0 |
srt3_analyze_rewrite | bigint | pg_analyze_and_rewrite执行耗时(单位:微秒) | L0 |
srt4_plan_query | bigint | pg_plan_queries执行耗时(单位:微秒) | L0 |
srt5_light_query | bigint | exec_query_through_light_proxy执行耗时(单位:微秒) | L0 |
srt6_p | bigint | P报文执行的耗时(单位:微秒) | L0 |
srt7_b | bigint | B报文执行的耗时(单位:微秒) | L0 |
srt8_e | bigint | E报文执行的耗时(单位:微秒) | L0 |
srt9_d | bigint | D报文执行的耗时(单位:微秒) | L0 |
srt10_s | bigint | S报文执行的耗时(单位:微秒) | L0 |
srt11_c | bigint | C报文执行的耗时(单位:微秒) | L0 |
srt12_u | bigint | U报文执行的耗时(单位:微秒) | L0 |
srt13_before_query | bigint | 进入下一次报文处理前的耗时(单位:微秒) | L0 |
srt14_after_query | bigint | 完成报文处理后的耗时(单位:微秒) | L0 |
rtt_unknown | bigint | 未知时间消耗,可能是session切换耗时(单位:微秒) | L0 |
parent_query_id | bigint | 存储过程中plsql父语句的信息。 | L0 |
net_trans_time | bigint | 驱动执行sql的全链路网络耗时,当前仅支持jdbc驱动。 | L0 |
相关特性
对应系统表statement_history,主要目的是记录数据库运行中产生的sql与其运行信息,保证即便数据库重启,SQL信息也依然可以查询到。
一般使用形式:
openGauss=# select * from DBE_PERF.statement_history;
主要受到以下参数控制:
log_duration:是否记录慢查询。
log_min_duration_statement:单位毫秒,标记SQL的慢查询时间,0记录所有SQL,-1则不记录任何信息。
track_stmt_stat_level:默认为OFF,L0
。参数第一部分为非OFF情况下,会记录所有SQL,第一部分为OFF,第二部分为非OFF情况下,仅记录慢SQL。
track_stmt_parameter:追踪语句更详细内容。
此处代码判断逻辑为(以下各个条件为或判定,满足其一即可):
通过设置dynamic_func_control参数打开动态语句追踪功能。
track_stmt_stat_level追踪第一个level为L0或者更高。
track_stmt_stat_level追踪第二个level为L0或者更高,且语句运行时间大于log_min_duration_statement设定值,且log_min_duration_statement大于等于0,并且没有打开track_stmt_parameter。
打开track_stmt_parameter,并且时间模式第一个值(消耗的DBTIME)大于0。
openGauss 2025-03-19 23:53:59