华为云用户手册

  • 语法格式 查询数据 1 2 3 4 5 6 7 8 9 10 11 12 13 [ WITH [ RECURSIVE ] with_query [, ...] ] SELECT [/*+ plan_hint */] [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ] { * | {expression [ [ AS ] output_name ]} [, ...] } [ FROM from_item [, ...] ] [ WHERE condition ] [ GROUP BY grouping_element [, ...] ] [ HAVING condition [, ...] ] [ WINDOW {window_name AS ( window_definition )} [, ...] ] [ { UNION | INTERSECT | EXCEPT | MINUS } [ ALL | DISTINCT ] select ] [ ORDER BY {expression [ [ ASC | DESC | USING operator ] | nlssort_expression_clause ] [ NULLS { FIRST | LAST } ]} [, ...] ] [ { [ LIMIT { count | ALL } ] [ OFFSET start [ ROW | ROWS ] ] } | { LIMIT start, { count | ALL } } ] [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ] [ {FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ]} [...] ]; condition和expression中可以使用targetlist中表达式的别名。 只能同一层引用。 只能引用targetlist中的别名。 只能是后面的表达式引用前面的表达式。 不能包含volatile函数。 不能包含Window function函数。 不支持在join on条件中引用别名。 targetlist中有多个要应用的别名则报错。 其中子查询with_query为: 1 2 with_query_name [ ( column_name [, ...] ) ] AS [ [ NOT ] MATERIALIZED ] ( {select | values | insert | update | delete} ) 其中指定查询源from_item为: 1 2 3 4 5 6 {[ ONLY ] table_name [ * ] [ partition_clause ] [ [ AS ] alias [ ( column_alias [, ...] ) ] ] |( select ) [ AS ] alias [ ( column_alias [, ...] ) ] |with_query_name [ [ AS ] alias [ ( column_alias [, ...] ) ] ] |function_name ( [ argument [, ...] ] ) [ AS ] alias [ ( column_alias [, ...] | column_definition [, ...] ) ] |function_name ( [ argument [, ...] ] ) AS ( column_definition [, ...] ) |from_item [ NATURAL ] join_type from_item [ ON join_condition | USING ( join_column [, ...] ) ]} 其中group子句为: 1 2 3 4 5 6 ( ) | expression | ( expression [, ...] ) | ROLLUP ( { expression | ( expression [, ...] ) } [, ...] ) | CUBE ( { expression | ( expression [, ...] ) } [, ...] ) | GROUPING SETS ( grouping_element [, ...] ) 其中指定分区partition_clause为: 1 2 PARTITION { ( partition_name ) | FOR ( partition_value [, ...] ) } 指定分区只适合普通表。 其中设置排序方式nlssort_expression_clause为: 1 NLSSORT ( column_name, ' NLS_SORT = { SCHINESE_PINYIN_M | generic_m_ci } ' ) 简化版查询语法,功能相当于select * from table_name。 1 TABLE { ONLY {(table_name)| table_name} | table_name [ * ]};
  • 示例2:通过行级控制实现分区权限管理 创建用户alice: 1 CREATE ROLE alice PASSWORD '{password1}'; 创建范围分区表web_returns_p1,并插入数据: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 CREATE TABLE web_returns_p1 ( wr_returned_date_sk integer, wr_returned_time_sk integer, wr_item_sk integer NOT NULL, wr_refunded_customer_sk integer ) WITH (orientation = column) DISTRIBUTE BY HASH (wr_item_sk) PARTITION BY RANGE(wr_returned_date_sk) ( PARTITION p2016 START(800) END(830) EVERY(1) ); INSERT INTO web_returns_p1 values (801,17,11,102); INSERT INTO web_returns_p1 values (802,18,12,103); 将表web_returns_p1的读取权限赋予alice用户: 1 GRANT SELECT ON web_returns_p1 TO alice; 打开行访问控制策略开关: 1 ALTER TABLE web_returns_p1 ENABLE ROW LEVEL SECURITY; 创建行级访问控制策略web_returns_rsl。其中wr_returned_date_sk为web_returns_p1分区表的分区名,801为分区值: 1 CREATE ROW LEVEL SECURITY POLICY web_returns_rsl ON web_returns_p1 USING('wr_returned_date_sk' = '801'); 将行级访问控制策略web_returns_rsl的赋予用户alice: 1 ALTER ROW LEVEL SECURITY POLICY web_returns_rsl ON web_returns_p1 TO alice; 切换至alice用户: 1 set role alice password '{password1}'; 查询表web_returns_p1: 1 select * from web_returns_p1;
  • 功能描述 对表创建行访问控制策略。 对表创建行访问控制策略时,需打开该表的行访问控制开关(ALTER TABLE ... ENABLE ROW LEVEL SECURITY)策略才能生效,否则不生效。 当前行访问控制会影响数据表的读取操作(SELECT、UPDATE、DELETE),暂不影响数据表的写入操作(INSERT、MERGE INTO)。表所有者或系统管理员可以在USING子句中创建表达式,并在客户端执行数据表读取操作时,数据库后台在查询重写阶段会将满足条件的表达式拼接并应用到执行计划中。针对数据表的每一条元组,当USING表达式返回TRUE时,元组对当前用户可见,当USING表达式返回FALSE或NULL时,元组对当前用户不可见。 行访问控制策略名称是针对表的,同一个数据表上不能有同名的行访问控制策略;对不同的数据表,可以有同名的行访问控制策略。 行访问控制策略可以应用到指定的操作(SELECT、UPDATE、DELETE、ALL),ALL表示会影响SELECT、UPDATE、DELETE三种操作;定义行访问控制策略时,若未指定受影响的相关操作,默认为ALL。 行访问控制策略可以应用到指定的用户(角色),也可应用到全部用户(PUBLIC);定义行访问控制策略时,若未指定受影响的用户,默认为PUBLIC。
  • 语法格式 1 2 3 4 5 CREATE [ ROW LEVEL SECURITY ] POLICY policy_name ON table_name [ AS { PERMISSIVE | RESTRICTIVE } ] [ FOR { ALL | SELECT | UPDATE | DELETE } ] [ TO { role_name | PUBLIC } [, ...] ] USING ( using_expression )
  • 注意事项 支持对行存表、行存分区表、列存表、列存分区表、复制表、unlogged表、hash表定义行访问控制策略。 不支持HDFS表、外表、临时表定义行访问控制策略。 不支持对视图定义行访问控制策略。 同一张表上可以创建多个行访问控制策略,一张表最多创建100个行访问控制策略。 系统管理员不受行访问控制影响,可以查看表的全量数据。 通过SQL语句、视图、函数、存储过程查询包含行访问控制策略的表,都会受影响。 不支持对行访问控制策略依赖的列进行类型修改。例如,不支持如下修改: 1 ALTER TABLE public.all_data ALTER COLUMN role TYPE text;
  • 参数说明 policy_name 行访问控制策略名称,同一个数据表上行访问控制策略名称不能相同。 table_name 行访问控制策略的表名。 PERMISSIVE 指定行访问控制策略的类型为宽容性策略。对于一个给定的查询,将使用“OR”操作符将所有的宽容性策略组合。行访问控制策略的类型默认为宽容性策略。 RESTRICTIVE 指定行访问控制策略的类型为限制性策略。对于一个给定的查询,将使用“AND”操作符将所有的限制性策略组合。 至少需要一条宽容性策略允许对记录的访问。如果只有限制性策略存在,则不能访问任何记录。当宽容性和限制性策略共存时,只有当记录能通过至少一条宽容性策略以及所有的限制性策略时,该记录才能访问。 command 当前行访问控制影响的SQL操作,可指定操作包括:ALL、SELECT、UPDATE、DELETE。当未指定时,ALL为默认值,涵盖SELECT、UPDATE、DELETE操作。 当command为SELECT时,SELECT类操作受行访问控制的影响,只能查看到满足条件(using_expression返回值为TRUE)的元组数据,受影响的操作包括SELECT,UPDATE ... RETURNING,DELETE ... RETURNING。 当command为UPDATE时,UPDATE类操作受行访问控制的影响,只能更新满足条件(using_expression返回值为TRUE)的元组数据,受影响的操作包括UPDATE, UPDATE ... RETURNING, SELECT ... FOR UPDATE/SHARE。 当command为DELETE时,DELETE类操作受行访问控制的影响,只能删除满足条件(using_expression返回值为TRUE)的元组数据,受影响的操作包括DELETE, DELETE ... RETURNING。 行访问控制策略与适配的SQL语法关系参见下表: 表1 ROW LEVEL SECURITY策略与适配SQL语法关系 Command SELECT/ALL policy UPDATE/ALL policy DELETE/ALL policy SELECT Existing row No No SELECT FOR UPDATE/SHARE Existing row Existing row No UPDATE No Existing row No UPDATE RETURNING Existing row Existing row No DELETE No No Existing row DELETE RETURNING Existing row No Existing row role_name 行访问控制影响的数据库用户。 当未指定时,PUBLIC为默认值,PUBLIC表示影响所有数据库用户,可以指定多个受影响的数据库用户。 系统管理员不受行访问控制特性影响。
  • 参数说明 statement 指定要分析的SQL语句。 ANALYZE boolean | ANALYSE boolean 显示实际运行时间和其他统计数据。 取值范围: TRUE(缺省值):显示实际运行时间和其他统计数据。 FALSE:不显示。 VERBOSE boolean 显示有关计划的额外信息。 取值范围: TRUE(缺省值):显示额外信息。 FALSE:不显示。 COSTS boolean 包括每个规划节点的估计总成本,以及估计的行数和每行的宽度。 取值范围: TRUE(缺省值):显示估计总成本和宽度。 FALSE:不显示。 CPU boolean 打印CPU的使用情况的信息。 取值范围: TRUE(缺省值):显示CPU的使用情况。 FALSE:不显示。 DETAIL boolean 打印DN上的信息。 取值范围: TRUE(缺省值):打印DN的信息。 FALSE:不打印。 NODES boolean 打印query执行的节点信息。 取值范围: TRUE(缺省值):打印执行的节点的信息。 FALSE:不打印。 NUM_NODES boolean 打印执行中的节点的个数信息。 取值范围: TRUE(缺省值):打印DN个数的信息。 FALSE:不打印。 BUFFERS boolean 包括缓冲区的使用情况的信息。 取值范围: TRUE:显示缓冲区的使用情况。 FALSE(缺省值):不显示。 TIMING boolean 包括实际的启动时间和花费在输出节点上的时间信息。 取值范围: TRUE(缺省值):显示启动时间和花费在输出节点上的时间信息。 FALSE:不显示。 PLAN 是否将执行计划存储在plan_table中。当该选项开启时,会将执行计划存储在PLAN_TABLE中,不打印到当前屏幕,因此该选项为on时,不能与其他选项同时使用。 取值范围: ON(缺省值):将执行计划存储在plan_table中,不打印到当前屏幕。执行成功返回EXPLAIN SUCCESS。 OFF:不存储执行计划,将执行计划打印到当前屏幕。 FORMAT 指定输出格式。 取值范围:TEXT,XML,JSON和YAML。 默认值:TEXT PERFORMANCE 使用此选项时,即打印执行中的所有相关信息。 STATS boolean 打印复现SQL语句的执行计划所需的信息,包括对象定义、统计信息、配置参数等,通常用于定位问题。 取值范围: TRUE(缺省值):显示复现SQL语句的执行计划所需的信息。 FALSE:不显示。
  • 功能描述 显示SQL语句的执行计划。 执行计划将显示SQL语句所引用的表采用的扫描方式,如:简单的顺序扫描、索引扫描等。如果引用了多个表,执行计划还会显示使用的JOIN算法。 执行计划的最关键部分是语句的预计执行开销,这是计划生成器估算执行该语句将花费多长的时间。 若指定了ANALYZE选项,则该语句会被执行,然后根据实际的运行结果显示统计数据,包括每个计划节点内时间总开销(毫秒为单位)和实际返回的总行数。这对于判断计划生成器是否接近现实非常有用。
  • 语法格式 显示SQL语句的执行计划,支持多种选项,对选项顺序无要求: 1 EXPLAIN [ ( option [, ...] ) ] statement; 其中选项option子句的语法为: 1 2 3 4 5 6 7 8 9 10 11 12 ANALYZE [ boolean ] | ANALYSE [ boolean ] | VERBOSE [ boolean ] | COSTS [ boolean ] | CPU [ boolean ] | DETAIL [ boolean ] | NODES [ boolean ] | NUM_NODES [ boolean ] | BUFFERS [ boolean ] | TIMING [ boolean ] | PLAN [ boolean ] | FORMAT { TEXT | XML | JSON | YAML } 显示SQL语句的执行计划,且要按顺序给出选项: 1 EXPLAIN { [ { ANALYZE | ANALYSE } ] [ VERBOSE ] | PERFORMANCE } statement; 显示复现SQL语句的执行计划所需的信息,通常用于定位问题。STATS选项必须单独使用: 1 EXPLAIN ( STATS [ boolean ] ) statement;
  • 注意事项 若仅声明分析器,那么新的文本搜索配置初始没有从符号类型到词典的映射, 因此会忽略所有的单词。后面必须调用ALTER TEXT SEARCH CONFIGURATION命令创建映射使配置生效。如果声明了COPY选项,那么会自动拷贝指定的文本搜索配置的解析器、映射、配置选项等信息。 若模式名称已给出,那么文本搜索配置会在声明的模式中创建。否则会在当前模式创建。 定义文本搜索配置的用户成为其所有者。 PARSER和COPY选项是互相排斥的,因为当一个现有配置被复制,其分析器配置也被复制了。 若仅声明分析器,那么新的文本搜索配置初始没有从符号类型到词典的映射, 因此会忽略所有的单词。
  • 参数说明 name 要创建的文本搜索配置的名称。该名称可以有模式修饰。 parser_name 用于该配置的文本搜索分析器的名称。 source_config 要复制的现有文本搜索配置的名称。 configuration_option 文本搜索配置的配置参数,主要是针对parser_name执行的解析器,或者source_config隐含的解析器而言的。 取值范围:目前共支持default、ngram、zhparser三种类型的解析器,其中default类型的解析器没有对应的configuration_option,ngram、zhparser类型解析器对应的configuration_option如表1所示。 表1 ngram、zhparser类型解析器对应的配置参数 解析器 配置参数 参数描述 取值范围 ngram gram_size 分词长度。 正整数,1~4 默认值:2 punctuation_ignore 是否忽略标点符号。 true(默认值):忽略标点符号。 false:不忽略标点符号。 grapsymbol_ignore 是否忽略图形化字符。 true:忽略图形化字符。 false(默认值):不忽略图形化字符。 zhparser punctuation_ignore 分词结果是否忽略所有的标点等特殊符号(不会忽略\r和\n)。 true(默认值):忽略所有的标点等特殊符号。 false:不忽略所有的标点等特殊符号。 seg_with_duality 是否将闲散文字自动以二字分词法聚合。 true:将闲散文字自动以二字分词法聚合。 false(默认值):不将闲散文字自动以二字分词法聚合。 multi_short 分词执行时是否执行针对长词复合切分。 true(默认值):执行针对长词复合切分。 false:不执行针对长词复合切分。 multi_duality 设定是否将长词内的文字自动以二字分词法聚合。 true:将长词内的文字自动以二字分词法聚合。 false(默认值):不将长词内的文字自动以二字分词法聚合。 multi_zmain 是否将重要单字单独显示。 true:将重要单字单独显示。 false(默认值):不将重要单字单独显示。 multi_zall 是否将全部单字单独显示。 true:将全部单字单独显示。 false(默认值):不将全部单字单独显示。
  • 示例 创建文本搜索配置: 1 CREATE TEXT SEARCH CONFIGURATION ngram1 (parser=ngram) WITH (gram_size = 2, grapsymbol_ignore = false); 创建文本搜索配置: 1 CREATE TEXT SEARCH CONFIGURATION ngram2 (copy=ngram1) WITH (gram_size = 2, grapsymbol_ignore = false); 创建文本搜索配置: 1 CREATE TEXT SEARCH CONFIGURATION english_1 (parser=default);
  • sys_guid() 描述:生成Oracle的GUID序列号,类似UUID。此函数为Oracle兼容性函数。 返回类型:text 示例: 1 2 3 4 5 SELECT sys_guid(); sys_guid ---------------------------------- 4EBD3C74A17A11E9A1BF797FF7000001 (1 row) sys_guid函数内部生成原理同uuid_generate_v1函数。
  • uuid_generate_v1() 描述:生成一个UUID类型的序列号。 返回类型:UUID 示例: 1 2 3 4 5 SELECT uuid_generate_v1(); uuid_generate_v1 -------------------------------------- c71ceaca-a175-11e9-a920-797ff7000001 (1 row) uuid_generate_v1函数根据时间信息、集群节点编号和生成该序列的线程号生成UUID,该UUID在单个集群内是全局唯一的,但在多个集群间的时间信息、集群节点编号、线程号和时钟序列仍然存在同时相等的可能性,因此多个集群间生成的UUID仍然存在极低概率的重复风险。
  • uuid() 描述:生成一个UUID类型的序列号。此函数为MySQL兼容性函数,仅8.2.0及以上集群版本支持。 返回类型:UUID 示例: 1 2 3 4 5 SELECT uuid(); uuid ---------------------------------- 6327dc96-f0e7-0100-f2f2-6c9ff700fffe (1 row) uuid函数内部生成原理同uuid_generate_v1()函数,即根据时间信息、集群节点编号和生成该序列的线程号生成UUID,该UUID在单个集群内是全局唯一的,但在多个集群间的时间信息、集群节点编号、线程号和时钟序列仍然存在同时相等的可能性,因此多个集群间生成的UUID仍然存在极低概率的重复风险。
  • UUID函数应用示例 UUID全局唯一的特点,可以作为数据表生成主键,也可以作为数据表的分布列,uuid_generate_v1()作为数据表分布列的默认值时,通过Hash分布可以将数据均匀分布到各个DN上,防止数据倾斜。 UUID的显著优点就是全局唯一,不需要中心节点,单个节点独立生成。但是也存在缺点,UUID较INT占用更多的存储空间,索引效率低,生成的ID随机,没有递增的特性,所以辨识困难。因此,在应用中,要根据实际情况选择UUID还是Sequence作为数据表主键。 示例如下: INT类型作为分布列。 创建示例哈希表mytable01,int类型作为分布列,插入数据后,查询数据存在数据倾斜。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 CREATE TABLE mytable01(a INT, b INT) DISTRIBUTE BY hash(a); CREATE TABLE INSERT INTO mytable01 VALUES(1, 10); INSERT 0 1 INSERT INTO mytable01 VALUES(1, 10); INSERT 0 1 INSERT INTO mytable01 VALUES(1, 10); INSERT 0 1 INSERT INTO mytable01 VALUES(1, 10); INSERT 0 1 INSERT INTO mytable01 VALUES(1, 10); INSERT 0 1 SELECT * FROM mytable01; a | b ---+---- 1 | 10 1 | 10 1 | 10 1 | 10 1 | 10 (5 rows) SELECT table_skewness('mytable01'); table_skewness ------------------------------------- ("dn_6003_6004 ",5,100.000%) ("dn_6001_6002 ",0,0.000%) ("dn_6005_6006 ",0,0.000%) (3 rows) UUID类型作为分布列。 创建示例哈希表mytable02,UUID类型作为分布列,插入数据后,查询数据分布正常。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 CREATE TABLE mytable02 (id UUID default uuid_generate_v1(), a INT, b INT) DISTRIBUTE BY hash(id); CREATE TABLE INSERT INTO mytable02(a, b) VALUES(1, 10); INSERT 0 1 INSERT INTO mytable02(a, b) VALUES(1, 10); INSERT 0 1 INSERT INTO mytable02(a, b) VALUES(1, 10); INSERT 0 1 INSERT INTO mytable02(a, b) VALUES(1, 10); INSERT 0 1 INSERT INTO mytable02(a, b) VALUES(1, 10); INSERT 0 1 SELECT * FROM mytable02; id | a | b --------------------------------------+---+---- 63e45c14-cc74-0e00-e9aa-0a2c3fa0fffe | 1 | 10 63e45c1f-4d18-0700-e9ab-0a2c3fa0fffe | 1 | 10 63e45c26-f859-0b00-e9ad-0a2c3fa0fffe | 1 | 10 63e45c23-9e5d-0300-e9ac-0a2c3fa0fffe | 1 | 10 63e45c2a-5825-0600-e9ae-0a2c3fa0fffe | 1 | 10 (5 rows) SELECT table_skewness('mytable02'); table_skewness ------------------------------------ ("dn_6001_6002 ",3,60.000%) ("dn_6003_6004 ",2,40.000%) ("dn_6005_6006 ",0,0.000%) (3 rows)
  • 示例 为一个INSERT语句创建一个预备语句,然后执行它: 1 2 PREPARE insert_reason(integer,character(16),character(100)) AS INSERT INTO tpcds.reason_t1 VALUES($1,$2,$3); EXECUTE insert_reason(52, 'AAAAAAAADDAAAAAA', 'reason 52');
  • 功能描述 创建一个预备语句。 预备语句是服务端的对象,可以用于优化性能。在执行PREPARE语句的时候,指定的查询被解析、分析、重写。当随后发出EXECUTE语句的时候,预备语句被规划和执行。这种设计避免了重复解析、分析工作。PREPARE语句创建后在整个数据库会话期间一直存在,一旦创建成功,即便是在事务块中创建,事务回滚,PREPARE也不会删除。只能通过显式调用DEALLOCATE进行删除,会话结束时,PREPARE也会自动删除。
  • 参数说明 configuration_parameter 运行时参数的名称。 取值范围:可以使用SHOW ALL命令查看运行时参数。 部分通过SHOW ALL查看的参数不能通过SET设置。如max_datanodes。 CURRENT_SCHEMA 当前模式。 TIME ZONE 时区。 TRANSACTION ISOLATION LEVEL 事务的隔离级别。 SESSION AUTHORIZATION 当前会话的用户标识符。 ALL 所有运行时参数。
  • pg_stat_wal_write() 描述:在CN或者DN上执行,记录当前实例的线程信息,并统计wal日志和数据页导入量及速率,这里以CN为例。 该函数仅8.2.0及以上集群版本支持。 返回值类型:bigint 返回值字段: node_name:实例名。 application_name:应用名。 query_start:当前正在执行语句的起始时间。 datapage_write:当前query导入的数据页总量,单位为bytes。 datapage_write_speed:数据页导入速率,单位为bytes/s。 wal_write:当前query导入的wal日志总量,单位为bytes。 wal_write_speed:wal导入速率,单位为bytes/s。 total_datapage_write:当前线程产生数据页总量,单位为bytes。 total_wal_write:wal总量,单位为bytes。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 SELECT * FROM pg_stat_wal_write(); node_name | datid | pid | lwtid | usesysid | application_name | state | query_start | backend_start | query_id | datapage_write | datapage_write_speed | wal_write | wal_write_speed | total_datapage_write | total_wal_write --------------+-------+-----------------+-------+----------+--------------------+--------+-------------------------------+-------------------------------+-------------------+----------------+----------------------+-----------+-----------------+----------------------+----------------- coordinator1 | 15979 | 140234153498368 | 25353 | 10 | JobScheduler | active | | 2022-11-15 11:57:54.396347+08 | 0 | 0 | | 0 | 0 | 0 | 0 coordinator1 | 15979 | 140234132027136 | 25354 | 10 | StatCollector | idle | | | 0 | 0 | | 0 | 0 | 0 | 0 coordinator1 | 15979 | 140234090084096 | 25356 | 10 | WDRSnapshot | idle | 2022-11-15 11:57:54.388948+08 | 2022-11-15 11:57:54.403055+08 | 0 | 0 | 0 | 0 | 0 | 0 | 0 coordinator1 | 15979 | 140234027169536 | 25359 | 10 | workload | active | 2022-11-15 11:57:54.404836+08 | 2022-11-15 11:57:54.389259+08 | 72620543991404472 | 0 | 0 | 1722112 | 0 | 0 | 0 coordinator1 | 15979 | 140234004621056 | 25360 | 10 | CalculateSpaceInfo | active | 2022-11-15 11:57:54.405677+08 | 2022-11-15 11:57:54.389847+08 | 72620543991349266 | 0 | 0 | 191326 | 0 | 0 | 0 coordinator1 | 15979 | 140233987839744 | 25361 | 10 | WorkloadMonitor | active | 2022-11-15 11:57:54.406263+08 | 2022-11-15 11:57:54.390373+08 | 72620543991404418 | 0 | 0 | 1183741 | 0 | 0 | 0 coordinator1 | 15979 | 140233971058432 | 25362 | 10 | WLMArbiter | active | 2022-11-15 11:57:54.406367+08 | 2022-11-15 11:57:54.390947+08 | 0 | 0 | 0 | 0 | 0 | 0 | 0 coordinator1 | 15979 | 140233228666624 | 14415 | 10 | gsql | active | 2022-11-15 21:19:32.200305+08 | 2022-11-15 21:09:38.916931+08 | 72620543991404422 | 0 | 0 | 30872 | 1000 | 0 | 0 coordinator1 | 15979 | 140233172035328 | 15516 | 10 | gsql | active | 2022-11-15 21:19:49.7877+08 | 2022-11-15 21:10:13.447312+08 | 72620543991404485 | 0 | 0 | 0 | 0 | 0 | 0 coordinator1 | 0 | 140234245269248 | 25348 | 0 | Background writer | idle | | 2022-11-15 11:57:54.383651+08 | 0 | 0 | | 0 | 0 | 0 | 0 coordinator1 | 0 | 140234291410688 | 25347 | 0 | CheckPointer | idle | | 2022-11-15 11:57:54.383231+08 | 0 | 0 | | 0 | 0 | 0 | 0 coordinator1 | 0 | 140234228487936 | 25349 | 0 | Wal Writer | idle | | 2022-11-15 11:57:54.384069+08 | 0 | 0 | | 0 | 0 | 0 | 0 coordinator1 | 0 | 140234068584192 | 25357 | 0 | TwoPhase Cleaner | idle | | 2022-11-15 11:57:54.388332+08 | 0 | 0 | | 0 | 0 | 0 | 0 coordinator1 | 0 | 140234048657152 | 25358 | 0 | LWLock Monitor | idle | | 2022-11-15 11:57:54.389239+08 | 0 | 0 | | 0 | 0 | 0 | 0 coordinator1 | 0 | 140234194925312 | 25351 | 0 | CBM Writer | idle | | 2022-11-15 11:57:54.38506+08 | 0 | 0 | | 0 | 0 | 0 | 0 coordinator1 | 0 | 140234211706624 | 25350 | 0 | Tick service | idle | | 2022-11-15 11:57:54.384136+08 | 0 | 0 | | 0 | 0 | 0 | 0 (16 rows) 行存不带索引批量导入时,数据页copy导入会产生logical newpage相关的xlog日志,在xlog量大于默认值时同样会触发流控。
  • pgxc_stat_wal_write() 描述:在所有CN上执行,记录各个DN上与CN交互的线程信息,并统计wal日志和数据页导入量及速率。该函数仅8.2.0及以上集群版本支持。 返回值类型:bigint 返回值字段: node_name:实例名。 application_name:应用名。 query_start:当前正在执行语句的起始时间。 datapage_write:当前query导入的数据页总量,单位为bytes。 datapage_write_speed:数据页导入速率,单位为bytes/s。 wal_write:当前query导入的wal日志总量,单位为bytes。 wal_write_speed:wal导入速率,单位为bytes/s。 total_datapage_write:当前线程产生数据页总量,单位为bytes。 total_wal_write:wal总量,单位为bytes。 1 2 3 4 5 6 7 8 9 SELECT * FROM pgxc_stat_wal_write(); node_name | datid | pid | lwtid | usesysid | application_name | state | query_start | backend_start | query_id | datapage_write | datapage_write_speed | wal_write | wal_write_speed | total_datapage_write | total_wal_write -----------+-------+-----------------+-------+----------+------------------------+--------+-------------------------------+-------------------------------+-------------------+----------------+----------------------+-----------+-----------------+----------------------+----------------- datanode1 | 15979 | 140328473442048 | 12408 | 10 | CalculateSpaceInfo | active | 2022-11-15 10:39:45.00219+08 | 2022-11-15 10:39:45.000918+08 | 0 | 0 | 0 | 70697 | 0 | 0 | 0 datanode1 | 0 | 140328075503360 | 12510 | 10 | WalSender to Secondary | idle | | 2022-11-15 10:39:46.708557+08 | 0 | 0 | | 210 | 0 | 0 | 0 datanode1 | 15979 | 140327896741632 | 13612 | 10 | coordinator1 | active | 2022-11-15 10:46:32.832548+08 | 2022-11-15 10:40:20.117516+08 | 72620543991349940 | 586579968 | 17425000 | 11743056 | 348000 | 5337505792 | 107245825 datanode1 | 15979 | 140327583217408 | 13614 | 10 | coordinator1 | active | 2022-11-15 10:46:32.832548+08 | | 72620543991349940 | 0 | 0 | 0 | 0 | 0 | 0 datanode1 | 15979 | 140327485175552 | 27914 | 10 | coordinator1 | active | 2022-11-15 10:47:06.493584+08 | 2022-11-15 10:47:06.489062+08 | 72620543991350020 | 0 | 0 | 0 | 0 | 0 | 8675 (5 rows) 行存不带索引批量导入时,数据页copy导入会产生logical newpage相关的xlog日志,在xlog量大于默认值时同样会触发流控。
  • pgxc_stat_single_table(schema, talename) 描述:在CN上执行,入参为schema和表名。查询单张表在全库中的统计信息及该表在每个DN上的脏页率。 该函数仅8.1.3及以上集群版本支持。 该函数的统计信息依赖于ANALYZE,为获取该表最准确的信息请先对表进行ANALYZE。 返回值类型:record 返回值字段与函数pg_stat_get_tuple()相同。 1 2 3 4 5 6 7 8 SELECT * FROM pgxc_stat_single_table('public','t1'); nodename | tableid | partid | last_vacuum | last_autovacuum | last_analyze | last_autoanalyze | vacuum_count | autovacuum_count | analyze_count | autoanalyze_count | n_tup_ins | n_ tup_upd | n_tup_del | n_tup_hot_upd | n_tup_change | n_live_tup | n_dead_tup | dirty_rate | last_data_changed -----------+---------+--------+------------------------+------------------------+-------------------------------+------------------------+--------------+------------------+---------------+-------------------+-----------+--- --------+-----------+---------------+--------------+------------+------------+------------+------------------- datanode1 | 1270075 | | 2000-01-01 08:00:00+08 | 2000-01-01 08:00:00+08 | 2023-01-09 09:38:43.220876+08 | 2000-01-01 08:00:00+08 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | (1 row)
  • gs_all_nodegroup_control_group_info(text) 描述:提供了所有逻辑集群的控制组信息。该函数在调用的时候需要指定要查询逻辑集群的名称。例如要查询'installation'逻辑集群的控制组信息: 1 SELECT * FROM gs_all_nodegroup_control_group_info('installation'); 返回值类型:record 函数返回字段如下: 名称 类型 描述 name text 控制组的名称 type text 控制组的类型 gid bigint 控制组ID classgid bigint Workload所属Class的控制组ID class text Class控制组 workload text Workload控制组 shares bigint 控制组分配的CPU资源配额 limits bigint 控制组分配的CPU资源限额 wdlevel bigint Workload控制组层级 cpucores text 控制组使用的CPU核的信息
  • pg_stat_get_last_data_changed_time(oid) 描述:insert/update/delete, exchange/drop partition在该表上最后一次操作的时间,PG_STAT_ALL_TABLES视图last_data_changed列的数据是通过该函数求值,在表数量很大的场景中,通过视图获取表数据最后修改时间的性能较差,建议直接使用该函数获取表数据的最后修改时间。 返回值类型:timestamptz
  • pg_user_iostat(text) 描述:该函数8.1.2版本中已废弃,为兼容历史版本功能保留该函数,当前版本查询无效。 返回值类型:record 名称 类型 描述 userid oid 用户id。 min_curr_iops int4 当前该用户io在各DN中的最小值。 max_curr_iops int4 当前该用户io在各DN中的最大值。 min_peak_iops int4 该用户io峰值中,各DN的最小值。 max_peak_iops int4 该用户io峰值中,各DN的最大值。 io_limits int4 用户指定的资源池所设置的io_limits。 io_priority text 该用户所设io_priority。
  • pgxc_get_wlm_history_instance_info(text, TIMESTAMP, TIMESTAMP, int default null) 描述:在CN节点上查询集群各节点历史资源使用情况,读取GS_WLM_INSTANCE_HISTORY系统表的数据。入参分别为:节点名称(可以输入ALL、C、D、实例名称),起始区间时间,结束区间时间,每个实例返回的最大数量。返回值为GS_WLM_INSTANCE_HISTORY。 返回值类型:setof record
  • gs_control_group_info(pool text) 描述:查看资源池关联的控制组信息 返回值类型:record 返回信息如下: 属性 属性值 描述 name class_a:workload_a1 class和workload名称 class class_a Class控制组名称 workload workload_a1 Workload控制组名称 type DEFWD 控制组类型(Top、CLASS、BAKWD、DEFWD、TSWD) gid 87 控制组id shares 30 占父节点CPU资源的百分比 limits 0 占父节点CPU核数的百分比 rate 0 Timeshare中的分配比例 cpucores 0-3 CPU核心数
  • pgxc_get_wlm_current_instance_info(text, int default null) 描述:在CN节点上查询集群各节点当前的资源使用情况,读取内存中还未存到GS_WLM_INSTANCE_HISTORY系统表的数据。入参分别为:节点名称(可以输入ALL、C、D、实例名称),每个节点返回的最大数量。返回值为GS_WLM_INSTANCE_HISTORY。 返回值类型:setof record
  • pg_stat_get_tuple() 描述:在CN和DN上均可以执行,该函数仅8.1.3及以上集群版本支持。 函数无参时,查询CN上所有系统表的统计信息及表在每个CN上的脏页率,查询DN上所有系统表和用户表的统计信息和表在每个DN上的脏页率; 函数带入参时,入参是schema和表名,带入参的函数执行时查询单张表的统计信息和脏页率。 该函数的统计信息依赖于ANALYZE,为获取最准确的信息请先对表进行ANALYZE。 返回值类型:record 函数返回字段如下: 名称 类型 描述 nodename text 节点名。 tableid oid 表的oid。 partid oid 分区表的分区oid。 last_vacuum timestamp with time zone 最后一次手动vacuum时间。 last_autovacuum timestamp with time zone 最后一次autovacuum时间。 last_analyze timestamp with time zone 最后一次手动analyze时间。 last_autoanalyze timestamp with time zone 最后一次autoanalyze时间。 vacuum_count bigint vacuum次数。 autovacuum_count bigint autovacuum次数。 analyze_count bigint analyze次数。 autoanalyze_count bigint autoanalyze_count次数。 n_tup_ins bigint 插入的行数。 n_tup_upd bigint 更新的行数。 n_tup_del bigint 删除的行数。 n_tup_hot_upd bigint HOT更新的行数。 n_tup_change bigint analyze之后改变的行数。 n_live_tup bigint live行估计数。 n_dead_tup bigint dead行估计数。 dirty_rate bigint 单节点的脏页率(单CN或单DN级)。 last_data_changed timestamp with time zone 记录表最后一次数据变化的时间。
  • pg_stat_get_local_analyze_status(oid) 描述:指定表在当前节点上的是否需要analyze的状态,仅在CN端有意义。该函数仅8.1.2及以上版本支持。 如果该表的修改行数超过analyze的阈值(根据autovacuum_analyze_threshold + autovacuum_analyze_scale_factor * reltuples计算,其中reltuples是pg_class中记录的表的估算行数),则返回"Analyze needed"。 如果该表的修改行数不超过analyze的阈值,则返回"Analyze not needed"。 返回值类型:text
共100000条