
# 全局临时表函数
#### 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)
```
