全局临时表函数
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 |
枚举 |
|
clean_obj |
string |
构造方式:
|
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)