全局临时表函数
- pg_get_gtt_relstats(relOid)
描述:显示当前会话指定的全局临时表的基本信息。分布式全局临时表在CN上查询结果不具有参考价值,DN上查询结果为空,因此不建议在分布式上使用。
参数:全局临时表的OID。
返回值类型:record
示例:
gaussdb=# SELECT * FROM pg_get_gtt_relstats(24576); relfilenode | relpages | reltuples | relallvisible | relfrozenxid | relminmxid -------------+----------+-----------+---------------+--------------+------------ 24576 | 0 | 0 | 0 | 53969 | 0 (1 row) - pg_get_gtt_statistics(relOid, attnum, ''::text)
描述:显示当前会话指定的全局临时表的单列统计信息。使用时,需先对表进行ANALYZE。
参数:全局临时表的OID和属性attnum。
返回值类型:record
示例:
gaussdb=# SELECT * FROM pg_get_gtt_statistics(24576, 1,''::text); starelid | starelkind | staattnum | stainherit | stanullfrac | stawidth | stadistinct | stakind1 | stakind2 | stakind3 | stakind4 | stakind5 | staop1 | staop2 | staop3 | staop4 | staop5 | stanumbers1 | stanumbers2 | stanumbers3 | stanumbers 4 | stanumbers5 | stavalues1 | stavalues2 | stavalues3 | stavalues4 | stavalues5 | stadndistinct | staextinfo ----------+------------+-----------+------------+-------------+----------+-------------+----------+----------+----------+----------+----------+--------+--------+--------+--------+--------+-------------+-------------+-------------+----------- --+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+---------------+----------- - 24576 | c | 1 | f | 0 | 4 | -1 | 2 | 3 | 0 | 0 | 0 | 97 | 97 | 0 | 0 | 0 | | {.495105} | | | | {1,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115,120,125,130,135,140,145,150,155,160,165,170,175,180,185,190,195,200,205,210,215,220,225,230,235,240,245,250,255,260,265,270,275,280,285,290,295,300, 305,310,315,320,325,330,335,340,345,350,355,360,365,370,375,380,385,390,395,400,405,410,415,420,425,430,435,440,445,450,455,460,465,470,475,480,485,490,495,500} | | | | | 1 | (1 row)
- pg_list_gtt_relfrozenxids()
描述:显示各会话的冻结事务xid。pid=0的行,显示所有会话中最旧的冻结事务xid。分布式下推荐使用gs_global_list_gtt_relfrozenxids()。
参数:无。
返回值类型:record
示例:
gaussdb=# SELECT * FROM pg_list_gtt_relfrozenxids(); pid | relfrozenxid -----------------+-------------- 139988750038784 | 53969 0 | 53969 (2 rows) - pg_gtt_attached_pid(relOid)
描述:显示正在使用指定全局临时表的所有线程pid和会话ID。当线程池开启时,如果正在使用全局临时表的会话为detach状态,pid会显示为0,sessionid为会话的ID。分布式下推荐使用gs_gtt_attached_pid(relOid)。
参数:全局临时表的OID。
返回值类型:record
示例:
gaussdb=# SELECT * FROM pg_gtt_attached_pid(24576); relid | pid | sessionid -------+-----------------+----------- 24576 | 139988750038784 | 1 (1 row) - gs_gtt_attached_pid(relOid)
描述:DN上执行,显示正在使用指定分布式全局临时表的所有会话ID。不支持在CN上执行。
参数:全局临时表的OID。
返回值类型:record
示例:
gaussdb=# SELECT * FROM gs_gtt_attached_pid(16384); relid | pid | cn_name | cn_timeline | cn_sequence | cn_session_id -------+-----------------+--------------+-------------+-------------+--------------- 16384 | 140648560719616 | coordinator1 | 2 | 1 | 1 (1 row) - gs_global_list_gtt_relfrozenxids()
描述:CN上执行,用于显示各个DN的冻结事务XID信息。当前会话未关联GTT表时,pid为-1。不支持在DN上执行。
参数:无
返回值类型:record
示例:
gaussdb=# SELECT * FROM gs_global_list_gtt_relfrozenxids(); node_name | pid | relfrozenxid -----------+-----------------+-------------- datanode1 | 140648560719616 | 53959 datanode1 | 0 | 53959 datanode2 | 140539996403456 | 53959 datanode2 | 0 | 53959 (4 rows) - gs_local_gtt_clean_session(clean_type, clean_obj, clean_table)
描述:DN上执行,用于清理与CN全局会话关联的全局临时表信息。不支持在CN上执行。
参数:
名称
类型
描述
clean_type
枚举
- 0:清理所有小于当前timeLine的会话映射。
- 1:清理指定的与该CN会话关联的会话映射。
- 2:标记清理指定的表在所有会话上的数据(系统内部使用,用户不可执行)
clean_obj
string
构造方式:
- coorname_timeline_seq_sess(clean_type为1)
- coorname_timeline(clean_type为0)
- schema name(clean_type为2)
clean_table
string
clean_type为2时,设置为table name;clean_type为其他类型时,则指定为空值。
返回值类型:void
示例:
首先在CN上使用gs_local_get_cn_session_key获取最新的cn_session_key。
gaussdb=# SELECT * FROM gs_local_get_cn_session_key(); cn_name | cn_timeline | cn_sequence | cn_session_id --------------+-------------+-------------+--------------- coordinator1 | 2 | 1 | 1 (1 row)在需要手动清理的DN上使用gs_local_dump_gtt_sess_map获取DN上残留的cn_session_key。
gaussdb=# SELECT * FROM gs_local_dump_gtt_sess_map(); cn_name | cn_timeline | cn_sequence | cn_session_id | uniq_sess_id | refcnt | database_id | current_database_id --------------+-------------+-------------+---------------+--------------+--------+-------------+--------------------- coordinator1 | 1 | 1 | 1 | 1 | 0 | 13771 | 13771 (1 row)清理满足如下条件的残留cn_session_key:
- timeline < CN timeline
- refcnt = 0
gaussdb=# SELECT * FROM gs_local_gtt_clean_session(0, 'coordinator1_2', ''); gs_local_gtt_clean_session ---------------------------- (1 row) - gs_global_dist_gtt_clean_remain_sessions()
描述:CN上执行,清理全局临时表残留的所有会话信息。不支持在DN上执行。
参数:无
返回值类型:void
示例:
gaussdb=# SELECT * FROM gs_global_dist_gtt_clean_remain_sessions(); gs_global_dist_gtt_clean_remain_sessions ------------------------------------------ (1 row) - gs_local_get_cn_session_key()
描述:CN上执行,显示当前会话的session key。不支持在DN上执行。
参数:无
返回值类型:record
示例:
gaussdb=# SELECT * FROM gs_local_get_cn_session_key(); cn_name | cn_timeline | cn_sequence | cn_session_id --------------+-------------+-------------+--------------- coordinator1 | 2 | 1 | 1 (1 row) - gs_local_dump_gtt_sess_map()
描述:DN上执行,显示DN上保存的分布式全局临时表会话唯一标识cn_session_key,该标识由如下字段组成:cn_name、cn_timeline、cn_sequence、cn_session_id、uniq_sess_id以及refcnt、database_id、current_database_id。不支持在CN上执行。
参数:无
返回值类型:record
示例:
gaussdb=# SELECT * FROM gs_local_dump_gtt_sess_map(); cn_name | cn_timeline | cn_sequence | cn_session_id | uniq_sess_id | refcnt | database_id | current_database_id --------------+-------------+-------------+---------------+--------------+--------+-------------+--------------------- coordinator1 | 1 | 1 | 1 | 1 | 0 | 13771 | 13771 (1 row) -
gs_global_gtt_clean_data(schema_name, table_name)
描述:标记清理指定的全局临时表在所有会话上的数据文件。系统内部使用,用户不可执行。
参数:
名称
类型
描述
schema_name
string
需要清理的schema名。
table_name
string
需要清理的表名。
返回值类型:void
示例:
gaussdb=# SELECT gs_global_gtt_clean_data('public', 'gtt'); ERROR: The input parameter is invalid. CONTEXT: referenced column: gs_local_gtt_clean_session SQL statement "EXECUTE DIRECT ON DATANODES 'SELECT pg_catalog.gs_local_gtt_clean_session(2, ''public'', ''gtt'')'" PL/pgSQL function gs_global_gtt_clean_data(text,text) line 6 at EXECUTE statement referenced column: gs_global_gtt_clean_data - gs_gtt_local_clean_cn_remain_session_keys()
描述:CN上执行,用于清理某个DN故障时其他DN上的全局临时表的残留数据,不支持在DN上执行。
返回值类型:void
gaussdb=# select * from gs_gtt_local_clean_cn_remain_session_keys(); gs_gtt_local_clean_cn_remain_session_keys ------------------------------------------- (1 row)