GaussDB-STATEMENT_HISTORY

95 阅读6分钟

GaussDB-STATEMENT_HISTORY

获得当前节点的执行语句的信息。查询系统表必须具有sysadmin权限。只可在系统库中查询到结果,用户库中无法查询。

对于此系统表查询有如下约束:

  • 必须在postgres库内查询,其它库中不存数据。
  • 此系统表受track_stmt_stat_level控制,默认为"OFF,L0",第一部分控制Full SQL,第二部分控制Slow SQL,具体字段记录级别见下表。考虑性能影响,更改该参数的值时建议通过set方式设置,使该参数仅对当前会话生效。
  • 对于Slow SQL,当track_stmt_stat_level的值为非OFF时,且SQL执行时间超过log_min_duration_statement,会记录为慢SQL。
名称类型描述记录级别
db_namename数据库名称。L0
schema_namenameschema名称。L0
origin_nodeinteger节点名称。L0
user_namename用户名。L0
application_nametext用户发起的请求的应用程序名称。L0
client_addrtext用户发起的请求的客户端地址。L0
client_portinteger用户发起的请求的客户端端口。L0
unique_query_idbigint归一化SQL ID。L0
debug_query_idbigint唯一SQL ID。部分语句存在不唯一的情况,如Parse报文、DCL和TCL等语句的debug_query_id值为0。L0
querytext归一化SQL(仅在CN上有值),track_stmt_parameter参数开启时,显示完整SQL。L0
start_timetimestamp with time zone语句启动的时间。L0
finish_timetimestamp with time zone语句结束的时间。L0
slow_sql_thresholdbigint语句执行时慢SQL的标准。L0
transaction_idbigint事务ID。L0
thread_idbigint执行线程ID。L0
session_idbigint用户session id。L0
n_soft_parsebigint软解析次数, n_soft_parse + n_hard_parse可能大于n_calls, 因为子查询未计入n_calls。L0
n_hard_parsebigint硬解析次数, n_soft_parse + n_hard_parse可能大于n_calls, 因为子查询未计入n_calls。L0
query_plantext语句执行计划。L1(Full SQL)L0(Slow SQL)
n_returned_rowsbigintSELECT返回的结果集行数。L0
n_tuples_fetchedbigint随机扫描行。L0
n_tuples_returnedbigint顺序扫描行。L0
n_tuples_insertedbigint插入行。L0
n_tuples_updatedbigint更新行。L0
n_tuples_deletedbigint删除行。L0
n_blocks_fetchedbigintbuffer的块访问次数。L0
n_blocks_hitbigintbuffer的块命中次数。L0
db_timebigint有效的DB时间花费,多线程将累加(单位:微秒)。L0
cpu_timebigintCPU时间(单位:微秒)。L0
execution_timebigint执行器内执行时间(单位:微秒)。L0
parse_timebigintSQL解析时间(单位:微秒)。L0
plan_timebigintSQL生成计划时间(单位:微秒)。L0
rewrite_timebigintSQL重写时间(单位:微秒)。L0
pl_execution_timebigintplpgsql上的执行时间(单位:微秒)。L0
pl_compilation_timebigintplpgsql上的编译时间(单位:微秒)。L0
data_io_timebigintIO上的时间花费(单位:微秒)。L0
net_send_infotext通过物理连接发送消息的网络状态,包含时间(微秒)、调用次数、吞吐量(字节)。在分布式数据库中,CN与CN、CN与客户端以及CN与DN之间都是通过物理连接进行通信,通过该字段可以分析SQL在分布式系统下的网络开销。例如:{"time":xxx, "n_calls":xxx, "size":xxx}。L0
net_recv_infotext通过物理连接接收消息的网络状态,包含时间(微秒)、调用次数、吞吐量(字节)。在分布式数据库中,CN与CN、CN与客户端以及CN与DN之间都是通过物理连接进行通信,通过该字段可以分析SQL在分布式系统下的网络开销。例如:{"time":xxx, "n_calls":xxx, "size":xxx}。L0
net_stream_send_infotext通过逻辑连接发送消息的网络状态,包含时间(微秒)、调用次数、吞吐量(字节)。在分布式数据库中,不同分片的DN之间通过逻辑连接进行通信,通过该字段可以分析SQL在分布式系统下的网络开销。例如:{"time":xxx, "n_calls":xxx, "size":xxx}。L0
net_stream_recv_infotext通过逻辑连接接收消息的网络状态,包含时间(微秒)、调用次数、吞吐量(字节)。在分布式数据库中,不同分片的DN之间通过逻辑连接进行通信,通过该字段可以分析SQL在分布式系统下的网络开销。例如:{"time":xxx, "n_calls":xxx, "size":xxx}。L0
lock_countbigint加锁次数。L0
lock_timebigint加锁耗时。L1
lock_wait_countbigint加锁等待次数。L0
lock_wait_timebigint加锁等待耗时。L1
lock_max_countbigint最大持锁数量。L0
lwlock_countbigint轻量级加锁次数(预留)。L0
lwlock_wait_countbigint轻量级等锁次数。L0
lwlock_timebigint轻量级加锁时间(预留)。L1
lwlock_wait_timebigint轻量级等锁时间。L1
detailsbytea等待事件和语句锁事件的列表。记录级别的值>=L0时,开始记录等待事件的列表。显示当前节点wait event的相关统计信息。内核中关键的事件信息请参见表2表3表4表5,或从视图wait_event_info中查看系统中所有的事件列表。关于每种事务锁对业务的影响程度,请参考LOCK语法小节的详细描述。记录级别的值是L2时,开始记录语句锁事件的列表。该列表按时间顺序记录事件。记录的数量受参数track_stmt_details_size的影响。该字段为二进制,需要借助解析函数pg_catalog.statement_detail_decode读取,见(表12)。事件包括:- 加锁开始
  • 加锁结束
  • 等锁开始
  • 等锁结束
  • 放锁开始
  • 放锁结束
  • 轻量级等锁开始
  • 轻量级等锁结束 | L0/L2 | | is_slow_sql | boolean | 该SQL是否为Slow SQL。- t(true):表示是。
  • f(false):表示不是。 | L0 | | trace_id | text | 驱动传入的trace id,与应用的一次请求相关联。 | L0 | | advise | text | 可能导致该SQL为Slow SQL的风险信息。 | L0 | | parent_unique_sql_id | bigint | 当前语句的外层SQL的归一化SQL ID,对于存储过程内执行的语句,该值为调用存储过程语句的归一化SQL ID,存储过程外的语句该值为0。 | L0 | | finish_status | text | 语句完成状态。- normal:表示正常。默认为normal。
  • cancelled:表示被取消或被terminate。 | L0 |

NOTICE:

  • query_plan字段的记录级别对于Full SQL为L1,对于Slow SQL为L0。

  • 对于db_time时间模型,在statement_history中各维度时间统计满足db_time >= max(cpu_time, parse_time, plan_time, rewrite_time, data_io_time, net_send_info.time, net_recv_info.time, net_stream_send_info.time, net_stream_recv_info.time)。

  • 对于db_time时间模型公式,如下维度不纳入统计准确范围:

    1. execution_time
    2. pl_execution_time
    3. pl_compilation_time
  • 等待事件的嵌套深度最大值是20,如超过最大深度,新的等待事件会覆盖最后一次等待事件。

更多详情请参考GaussDB 文档中心:doc.hcs.huawei.com/db/zh-cn/ga…