更新时间:2024-10-10 GMT+08:00

PGXC_GET_TABLE_SKEWNESS

PGXC_GET_TABLE_SKEWNESS视图展示当前库中表的数据分布倾斜情况。需要有系统管理员权限或预置角色gs_role_read_all_stats权限才可以访问此视图。

表1 PGXC_GET_TABLE_SKEWNESS字段

名称

类型

描述

schemaname

name

表所在的模式名。

tablename

name

表名。

totalsize

numeric

表的总大小,单位为Byte。

avgsize

numeric(1000,0)

表大小平均值(totalsize/DN个数,该值为平均分布的理想情况下,表在各DN占用空间大小)。

maxratio

numeric(10,3)

单DN表大小最大值占比(表在各DN占用空间的最大值/avgsize)。

minratio

numeric(10,3)

单DN表大小最小值占比(表在各DN占用空间的最小值/avgsize)。

skewsize

bigint

表分布倾斜值(单DN表大小最大值 - 单DN表大小最小值)。

skewratio

numeric(10,3)

表分布倾斜率(skewsize/avgsize)。

skewstddev

numeric(1000,0)

表分布标准方差(在表大小一定的情况下,该值越大表明表的整体分布情况越倾斜)。

应用示例

查询当前数据库中(库中表个数少于1W的场景)所有表的数据倾斜情况:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
SELECT * FROM pgxc_get_table_skewness ORDER BY totalsize DESC;
 schemaname |        tablename        | totalsize | avgsize | maxratio | minratio | skewsize | skewratio | skewstddev
------------+-------------------------+-----------+---------+----------+----------+----------+-----------+------------
 dbadmin    | reason                  |    147456 |   49152 |     .333 |     .333 |        0 |     0.000 |          0
 tpcds      | reason_t2               |     73728 |   24576 |     .556 |    0.000 |    40960 |      .556 |      21674
 dbadmin    | reason_bk               |     65536 |   21845 |     .500 |    0.000 |    32768 |      .500 |      18919
 tsearch    | pgweb                   |     49152 |   16384 |     .333 |     .333 |        0 |     0.000 |          0
 dbadmin    | student                 |     40960 |   13653 |     .400 |     .200 |     8192 |      .200 |       4730
 tsearch    | ts_zhparser             |     40960 |   13653 |     .400 |     .200 |     8192 |      .200 |       4730
 dbms_om    | gs_wlm_session_info     |     24576 |    8192 |     .333 |     .333 |        0 |     0.000 |          0
 dbms_om    | gs_wlm_ec_operator_info |     24576 |    8192 |     .333 |     .333 |        0 |     0.000 |          0
 dbms_om    | gs_wlm_operator_info    |     24576 |    8192 |     .333 |     .333 |        0 |     0.000 |          0
(9 rows)
若数据库中表个数非常多(至少大于1W的场景),因PGXC_GET_TABLE_SKEWNESS涉及全库查并计算非常全面的倾斜字段,所以可能会花费比较长的时间(小时级),建议参考PGXC_GET_TABLE_SKEWNESS视图定义,直接使用table_distribution()函数自定义输出,减少输出列进行计算优化,例如:
1
2
3
4
5
6
SELECT schemaname,tablename,max(dnsize) AS maxsize, min(dnsize) AS minsize 
FROM pg_catalog.pg_class c 
INNER JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace 
INNER JOIN pg_catalog.table_distribution() s ON s.schemaname = n.nspname AND s.tablename = c.relname 
INNER JOIN pg_catalog.pgxc_class x ON c.oid = x.pcrelid AND x.pclocatortype = 'H' 
GROUP BY schemaname,tablename;