更新时间:2025-05-29 GMT+08:00

全局临时表函数

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)