更新时间:2026-10-21 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)

相关文档