统计信息函数
pg_stat_set_last_data_changed_time(oid)
描述:手动设置该表上最后一次insert/update/delete, exchange/truncate/drop partition操作的时间。
返回值类型:void
pg_stat_set_last_data_changed_num(oid)
描述:设置该表上当前节点的历史累计修改计数。
返回值类型:void
pv_session_time()
描述:统计当前节点各会话线程的运行时间信息及各执行阶段所消耗时间。
返回值类型:record
pv_instance_time()
描述:统计当前节点的运行时间信息及各执行阶段所消耗时间。
返回值类型:record
pg_stat_get_activity(integer)
描述:返回一个关于带有特殊PID的后台进程的记录信息,当参数为NULL时,则返回每个活动的后台进程的记录。返回结果是PG_STAT_ACTIVITY视图中的一个子集,不包含connection_info列。
返回值类型:setof record
pg_stat_get_activity_with_conninfo(integer)
描述:返回一个关于带有特殊PID的后台进程的记录信息,当参数为NULL时,则返回每个活动的后台进程的记录。返回结果是PG_STAT_ACTIVITY视图中的一个子集。
返回值类型:setof record
pg_stat_get_function_calls(oid)
描述:函数已被调用次数。
返回值类型:bigint
pg_stat_get_function_total_time(oid)
描述:该函数花费的总挂钟时间,以微秒为单位。包括花费在此函数调用上的时间。
返回值类型:double precision
pg_stat_get_function_self_time(oid)
描述:在当前事务中仅花费在此函数上的时间。不包括花费在调用函数上的时间。
返回值类型:double precision
pg_stat_get_backend_idset()
描述:设置当前活动的服务器进程数(从1到活动服务器进程的数量)。
返回值类型:setofinteger
pg_stat_get_backend_pid(integer)
描述:给定的服务器线程的线程ID。
返回值类型:bigint
1 2 3 4 5 |
SELECT pg_stat_get_backend_pid(1); pg_stat_get_backend_pid ------------------------- 139706243217168 (1 row) |
pg_stat_get_backend_activity(integer)
描述:给定服务器进程的当前活动查询,仅在调用者是系统管理员或被查询会话的用户,并且打开track_activities的时候才能获得结果。
返回值类型:text
pg_stat_get_backend_waiting(integer)
描述:如果给定服务器进程在等待某个锁,并且调用者是系统管理员或被查询会话的用户,并且打开track_activities的时候才返回真。
返回值类型:boolean
pg_stat_get_backend_activity_start(integer)
描述:给定服务器进程当前正在执行的查询的起始时间,仅在调用者是系统管理员或被查询会话的用户,并且打开track_activities的时候才能获得结果。
返回值类型:timestampwithtimezone
pg_stat_get_backend_xact_start(integer)
描述:给定服务器进程当前正在执行的事务的开始时间,但只有当前用户是系统管理员或被查询会话的用户,并且打开track_activities的时候才能获得结果。
返回值类型:timestampwithtimezone
pg_stat_get_backend_start(integer)
描述:给定服务器进程启动的时间,如果当前用户不是系统管理员或被查询的后端的用户,则返回NULL。
返回值类型:timestampwithtimezone
gs_stack()
描述:获取CN或DN进程的堆栈信息,函数入参actor_name、tid均需要通过视图或其他函数进行获取,不支持lwtid。该函数仅25.5.0及以上集群版本支持。
gs_stack()提供了比gdb、gstack等命令更灵活、更快速的堆栈获得手段。仅建议管理员用户在问题分析定位过程中使用,不建议作为日常的监控工具使用。
- actor_name:线程所在的actor名称。
- tid:线程ID。
- lwtid:轻量级线程ID。
- stack:tid或lwtid线程对应的堆栈信息。
gs_stack()函数有三种使用方式:
- 方式一:gs_stack()函数入参为空,表示打印CN和DN所有线程的堆栈。
- 可通过gsql连接CN执行。
- 获取CN和所有DN上所有线程的运行堆栈,运行时间长,对正常业务运行有影响,不建议频繁使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
select * from gs_stack(); actor_name | tid | lwtid | stack --------------+-----------------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------- coordinator1 | 106927505866816 | 186762 | GsStackBacktrace(int) + 0x1a + | | | 0x7ffb45f6d1f0 + | | | __poll + 0x4f + | | | poll + 0xa0 + | | | poll(pollfd*, unsigned long, int, void (*)()) + 0x19e + | | | ServerLoop() + 0x570 + | | | PmStartupThreads() + 0x167 + | | | PostmasterMain(int, char**) + 0x22f | | | coordinator1 | 106927505998400 | 186773 | GsStackBacktrace(int) + 0x1a + | | | 0x7ffb45f6d1f0 + | | | 0x7ffb45fb41aa + | | | pthread_cond_clockwait + 0x1e2 + | | | std::__condvar::wait_until(std::mutex&, int, timespec&) + 0x39
- 方式二:gs_stack(actor_name)函数入参值为指定的actor_name,表示打印名称为actor_name的actor上所有线程的堆栈。
- 可通过gsql连接CN执行。
- actor_name必须为CN或DN的名字,否则会报错“invalid actor_name”。
- actor_name需通过其他视图或函数获取(例如函数fabricsql_query_wait_status)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
select * from gs_stack('coordinator1'); actor_name | tid | lwtid | stack --------------+-----------------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------- coordinator1 | 106927505866816 | 186762 | GsStackBacktrace(int) + 0x1a + | | | 0x7ffb45f6d1f0 + | | | __poll + 0x4f + | | | poll + 0xa0 + | | | poll(pollfd*, unsigned long, int, void (*)()) + 0x19e + | | | ServerLoop() + 0x570 + | | | PmStartupThreads() + 0x167 + | | | PostmasterMain(int, char**) + 0x22f
- 方式三:gs_stack(actor_name,tid)函数入参值为指定的actor_name和tid,表示打印名称为actor_name的actor上指定tid线程的堆栈。
- 可通过gsql连接CN执行。
- actor_name必须为CN或DN的名字,否则会报错“invalid actorName”。
- actor_name和tid需通过其他视图或函数获取(例如函数fabricsql_query_wait_status)。
- 获取指定CN或DN进程内指定线程的运行堆栈,运行时间短,对正常业务运行无影响,推荐使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
select * from gs_stack('coordinator1',106927505998400); actor_name | tid | lwtid | stack --------------+-----------------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------- coordinator1 | 106927505998400 | 186773 | GsStackBacktrace(int) + 0x1a + | | | 0x7ffb45f6d1f0 + | | | 0x7ffb45fb41aa + | | | pthread_cond_clockwait + 0x1e2 + | | | std::__condvar::wait_until(std::mutex&, int, timespec&) + 0x39 + | | (1 row)