STATEMENT_HISTORY
获得当前节点的执行语句的信息。只可在系统库中查询到结果,用户库中无法查询。

当前版本暂不支持对FOR UPDATE关键字进行识别并归一化处理。例如:SELECT * FROM table; 与SELECT * FROM table FOR UPDATE WAIT N; 会被归一化处理为相同的归一化SQL,在query字段中体现。涉及FOR UPDATE关键字的SQL,可以通过query_plan字段进行区分,执行计划中会含有'lockRows'。
名称 | 类型 | 描述 |
|---|---|---|
dbname | name | 数据库名称 |
schemaname | name | schema名称 |
origin_node | integer | 节点名称 |
user_name | name | 用户名 |
application_name | text | 用户发起的请求的应用程序名称 |
client_addr | text | 用户发起的请求的客户端地址 |
client_port | integer | 用户发起的请求的客户端端口 |
unique_query_id | bigint | 归一化SQL ID |
debug_query_id | bigint | 唯一SQL ID |
query | text | 归一化SQL(仅CN上有值) |
start_time | timestamp with time zone | 语句启动的时间 |
finish_time | timestamp with time zone | 语句结束的时间 |
slow_sql_threshold | bigint | 语句执行时慢SQL的标准 |
transaction_id | bigint | 事务ID |
thread_id | bigint | 执行线程ID |
session_id | bigint | 用户session id |
n_soft_parse | bigint | 软解析次数, n_soft_parse + n_hard_parse可能大于n_calls, 因为子查询未计入n_calls |
n_hard_parse | bigint | 硬解析次数, n_soft_parse + n_hard_parse可能大于n_calls, 因为子查询未计入n_calls |
query_plan | text | 语句执行计划 |
n_returned_rows | bigint | SELECT返回的结果集行数 |
n_tuples_fetched | bigint | 随机扫描行 |
n_tuples_returned | bigint | 顺序扫描行 |
n_tuples_inserted | bigint | 插入行 |
n_tuples_updated | bigint | 更新行 |
n_tuples_deleted | bigint | 删除行 |
n_blocks_fetched | bigint | buffer的块访问次数 |
n_blocks_hit | bigint | buffer的块命中次数 |
db_time | bigint | 有效的DB时间花费,多线程将累加(单位:微秒) |
cpu_time | bigint | CPU时间(单位:微秒) |
execution_time | bigint | 执行器内执行时间(单位:微秒) |
parse_time | bigint | SQL解析时间(单位:微秒) |
plan_time | bigint | SQL生成计划时间(单位:微秒) |
rewrite_time | bigint | SQL重写时间(单位:微秒) |
pl_execution_time | bigint | plpgsql上的执行时间(单位:微秒) |
pl_compilation_time | bigint | plpgsql上的编译时间(单位:微秒) |
data_io_time | bigint | IO上的时间花费(单位:微秒) |
net_send_info | text | 通过物理连接发送消息的网络状态,包含时间(微秒)、调用次数、吞吐量(字节)。在分布式数据库中,CN与CN、CN与客服端以及CN与DN之间都是通过物理连接进行通信,通过该字段可以分析SQL在分布式系统下的网络开销。例如:{"time":xxx, "n_calls":xxx, "size":xxx} |
net_recv_info | text | 通过物理连接接收消息的网络状态,包含时间(微秒)、调用次数、吞吐量(字节)。在分布式数据库中,CN与CN、CN与客服端以及CN与DN之间都是通过物理连接进行通信,通过该字段可以分析SQL在分布式系统下的网络开销。例如:{"time":xxx, "n_calls":xxx, "size":xxx} |
net_stream_send_info | text | 通过逻辑连接发送消息的网络状态,包含时间(微秒)、调用次数、吞吐量(字节)。在分布式数据库中,不同分片的DN之间通过逻辑连接进行通信,通过该字段可以分析SQL在分布式系统下的网络开销。 例如:{"time":xxx, "n_calls":xxx, "size":xxx} |
net_stream_recv_info | text | 通过逻辑连接接收消息的网络状态,包含时间(微秒)、调用次数、吞吐量(字节)。在分布式数据库中,不同分片的DN之间通过逻辑连接进行通信,通过该字段可以分析SQL在分布式系统下的网络开销。 例如:{"time":xxx, "n_calls":xxx, "size":xxx} |
lock_count | bigint | 加锁次数 |
lock_time | bigint | 加锁耗时 |
lock_wait_count | bigint | 加锁等待次数 |
lock_wait_time | bigint | 加锁等待耗时 |
lock_max_count | bigint | 最大持锁数量 |
lwlock_count | bigint | 轻量级加锁次数(预留) |
lwlock_wait_count | bigint | 轻量级等锁次数 |
lwlock_time | bigint | 轻量级加锁时间(预留) |
lwlock_wait_time | bigint | 轻量级等锁时间 |
details | bytea | 等待事件和语句锁事件的列表。 记录级别的值>=L0时,开始记录等待事件的列表。显示当前节点wait event的相关统计信息。内核中关键的事件信息见表2。或从视图wait_event_info中查看系统中所有的事件列表。关于每种事务锁对业务的影响程度,请参考LOCK语法小节的详细描述。 记录级别的值是L2时,开始记录语句锁事件的列表。该列表按时间顺序记录事件,记录的数量受参数track_stmt_details_size的影响。 该字段为二进制,需要借助解析函数pg_catalog.statement_detail_decode读取,见(其它函数) 事件包括:
|
is_slow_sql | boolean | 该SQL是否为slow SQL |
trace_id | text | 驱动传入的trace id,与应用的一次请求相关联。 |
advise | text | 可能导致该SQL为slow SQL的风险信息。 说明: 如果语句通过SQLBypass方式执行(可通过explain查看计划判断),可以认为无慢SQL风险,本字段信息可能会缺失。 |
parent_unique_sql_id | bigint | 当前语句的外层SQL的归一化SQL ID,对于存储过程内执行的语句,该值为调用存储过程语句的归一化SQL ID,存储过程外的语句该值为0。 |

