更新时间:2022-07-29 GMT+08:00
Schema空间管控
背景信息
GaussDB(DWS)存储资源管理上提供了Schema级别的空间管控能力,一方面可以实现单实例上的空间管控,避免数据库只读和磁盘满的情况出现;另一方面将空间管控和用户、队列解耦,实现了空间管控和权限的分离,降低用户使用空间管控的难度。
通过创建Schema时指定存储空间的大小实现对存储资源的管理,仅限制永久表存储空间(PREM SPACE)。Schema存储空间管理支持对表数据的存储空间管理,当一个Schema存在空间限制时,在业务执行过程中,如果该Schema下的表数据之和超过空间限制,则会导致业务出错。
前提条件
- 存储空间控制功能enable_perm_space已设置为“on”。
- 负载管理控制功能use_workload_manager已设置为“on”。
操作步骤
- 创建Schema“schema1”,设置其永久表空间限额为100G。
1
CREATE SCHEMA schema1 WITH PERM SPACE '100G';
- 修改Schema“schema1”永久表空间限额不受限制。
1
ALTER SCHEMA schema1 WITH PERM SPACE 'unlimited';
- 查看Schema“schema1”永久表空间限额是否已经设置。
1 2 3 4 5
SELECT * FROM PG_NAMESPACE WHERE NSPNAME = 'schema1'; nspname | nspowner | nsptimeline | nspacl | permspace | usedspace ---------+----------+-------------+--------+-----------+----------- schema1 | 10 | 0 | | -1 | 0 (1 row)
- Schema空间信息是单实例的存储空间信息,CN/DN实例各自单独计算,相互不影响,可以更加有效的防止作业倾斜场景。
- 执行作业使用空间超过Schema空间限额时,会对所执行的作业执行cancel操作,并会在pg_log目录下的日志文件中记录如下信息:"out of schema's perm space limit"。
- unlogged table比较特殊,在max_query_retry_times大于0,即sql出错重试功能打开时,被认为是普通表,使用的空间记录在Schema永久表空间(PERM SPACE)下;在max_query_retry_times等于0,即sql出错重试功能关闭时,被认为是临时表,使用的空间不记录在Schema永久表空间(PEMP SPACE)下。如果使用unlogged table期间,切换了max_query_retry_times,按照上述判断,会导致切换前后unlogged table被判断为临时表和普通表的结果不一致,对应表在增删数据的情况下,对应schema上的永久数据空间变化也会出现异常情况,与实际物理空间有偏差。如果在unlogged table使用过程中,发生主备切换,unlogged table数据会丢失,导致对应schema上空间与实际物理空间存在丢失数据量的偏差。
- PG_TOTAL_SCHEMA_INFO视图中统计的Schema使用空间与磁盘实际使用空间可能存在一定的误差(±5%左右),用户可通过执行select pgxc_wlm_readjust_schema_space() 函数来进行修正。修正函数不可重入,重入会导致修正结果不准确,在执行该修正函数过程中,如果在表插入数据,可能会出现统计不够准确的情况。
- 列存表的CUDESC、CUDESC_INDEX、DELTA、CUDESC_PART、CUDESC_PART_INDEX都是辅助表,这些辅助表的空间会被记录到CSTORE Schema空间中;列存表的CBTREE索引存储空间大小能正常记录到主表队里的Schema上,但PSORT索引比较特殊,其存储空间大小仍然会被记录到CSTORE Schema空间中。而TOAST表和TOAST索引,其空间会被记录到PG_TOAST Schema空间中。
- 表空间Tablespace中的表,其存储空间会被记录到该表所在的Schema上。
- Schema空间管控将会忽略template0和template1两个模板库,对这两个模板库中Schema不会进行管控。
- 扩容缩容场景下,数据重分布之后,Schema空间统计值会有偏差,需要调用校准函数来重新校准。
- 修改表的分布列场景下,Schema空间统计值会有偏差,需要调用校准函数来重新校准。
- VACUUM FULL/REINDEX表的过程中,如果主DN故障发生主备切换,Schema空间统计值会有偏差,需要调用校准函数来重新校准。
- 创建临时表时,会同步创建临时Schema,这些临时Schema的名称类似于pg_temp_*和pg_toast_temp_*,临时Schema的空间不会被管控所限制,并且临时Schema信息不在PG_TOTAL_SCHEMA_INFO视图中展示。
- 从GaussDB(DWS) 8.1.0.3之前版本升级到8.1.0.3及之后版本,PG_TOTAL_SCHEMA_INFO中统计的PERM SPACE信息未计算升级前已使用的空间大小,升级完成后,可通过执行select pgxc_wlm_readjust_schema_space() 函数来进行空间统计。
- GaussDB(DWS)提供了查询集群Schema空间信息的视图PGXC_TOTAL_SCHEMA_INFO与PGXC_TOTAL_SCHEMA_INFO_ANALYZE,其中,PGXC_TOTAL_SCHEMA_INFO视图提供了集群所有实例上对应Schema的空间信息,PGXC_TOTAL_SCHEMA_INFO_ANALYZE视图对集群所有实例的Schema空间信息做了汇总分析,提供了集群总值、平均值、倾斜率、最大值、最小值以及最大最小实例名等信息。逻辑集群下,上述两个视图将会提供所有逻辑集群下的Schema空间信息和分析结果,如果只关注个别逻辑集群,可以使用GaussDB(DWS)提供的函数PGXC_WLM_GET_SCHEMA_SPACE('lccluster1')和PGXC_WLM_ANALYZE_SCHEMA_SPACE('lccluster1')来获取逻辑集群lccluster1下的Schema空间信息。
查看Schema的空间信息
select * from pg_namespace; nspname | nspowner | nsptimeline | nspacl | permspace | usedspace --------------------+----------+-------------+-------------------------+-----------+----------- public | 10 | 0 | {lys1=UC/lys1,=U/lys1} | -1 | 0 dbms_redact | 10 | 0 | {lys1=UC/lys1,=U/lys1} | -1 | 0 schema1 | 10 | 0 | | -1 | 0 dbms_random | 10 | 0 | {lys1=UC/lys1,=U/lys1} | -1 | 0 pg_toast | 10 | 0 | | -1 | 2326528 testt | 28726 | 0 | | -1 | 8192 dbms_om | 10 | 0 | {lys1=UC/lys1,=U/lys1} | -1 | 0 dbms_job | 10 | 0 | {lys1=UC/lys1,=UC/lys1} | -1 | 0 sys | 10 | 0 | | -1 | 0 information_schema | 10 | 0 | {lys1=UC/lys1,=U/lys1} | -1 | 294912 utl_file | 10 | 0 | {lys1=UC/lys1,=U/lys1} | -1 | 0 utl_raw | 10 | 0 | {lys1=UC/lys1,=U/lys1} | -1 | 0 dbms_output | 10 | 0 | {lys1=UC/lys1,=U/lys1} | -1 | 0 dbms_sql | 10 | 0 | {lys1=UC/lys1,=U/lys1} | -1 | 0 dbms_lob | 10 | 0 | {lys1=UC/lys1,=U/lys1} | -1 | 0 cstore | 10 | 0 | | -1 | 696320 user1 | 16390 | 0 | | 22405120 | 8192 pg_catalog | 10 | 0 | {lys1=UC/lys1,=U/lys1} | -1 | 24903680 (18 rows) select * from pg_total_schema_info; schemaid | schemaname | databaseid | databasename | usedspace | permspace ----------+--------------------+------------+--------------+-----------+----------- 11 | pg_catalog | 16389 | test | 0 | -1 99 | pg_toast | 16389 | test | 0 | -1 100 | cstore | 16389 | test | 0 | -1 2200 | public | 15095 | gaussdb | 0 | -1 2200 | public | 16389 | test | 0 | -1 4230 | dbms_redact | 15095 | gaussdb | 0 | -1 3987 | dbms_om | 15095 | gaussdb | 0 | -1 3988 | dbms_job | 15095 | gaussdb | 0 | -1 3987 | dbms_om | 16389 | test | 0 | -1 3988 | dbms_job | 16389 | test | 0 | -1 4230 | dbms_redact | 16389 | test | 0 | -1 11693 | sys | 15095 | gaussdb | 0 | -1 28714 | test1 | 15095 | gaussdb | 0 | -1 28715 | test3 | 15095 | gaussdb | 0 | -1 28728 | redisuser | 15095 | gaussdb | 0 | -1 28730 | testt | 15095 | gaussdb | 8192 | -1 28766 | redisuser1 | 15095 | gaussdb | 0 | -1 28798 | schema1 | 15095 | gaussdb | 0 | -1 11693 | sys | 16389 | test | 0 | -1 14147 | information_schema | 15095 | gaussdb | 294912 | -1 14490 | utl_file | 15095 | gaussdb | 0 | -1 14515 | utl_raw | 15095 | gaussdb | 0 | -1 14508 | dbms_output | 15095 | gaussdb | 0 | -1 14512 | dbms_random | 15095 | gaussdb | 0 | -1 14520 | dbms_sql | 15095 | gaussdb | 0 | -1 14547 | dbms_lob | 15095 | gaussdb | 0 | -1 14147 | information_schema | 16389 | test | 0 | -1 14490 | utl_file | 16389 | test | 0 | -1 14508 | dbms_output | 16389 | test | 0 | -1 14515 | utl_raw | 16389 | test | 0 | -1 14512 | dbms_random | 16389 | test | 0 | -1 14520 | dbms_sql | 16389 | test | 0 | -1 14547 | dbms_lob | 16389 | test | 0 | -1 11 | pg_catalog | 15095 | gaussdb | 22405120 | 22405120 99 | pg_toast | 15095 | gaussdb | 2326528 | -1 100 | cstore | 15095 | gaussdb | 696320 | -1 16392 | user1 | 15095 | gaussdb | 8192 | -1 (37 rows) select * from pgxc_total_schema_info; schemaname | schemaid | databasename | databaseid | nodename | nodegroup | usedspace | permspace --------------------+----------+--------------+------------+--------------+--------------+-----------+----------- pg_catalog | 11 | test1 | 16384 | datanode1 | installation | 9469952 | -1 public | 2200 | gaussdb | 15253 | datanode1 | installation | 25280512 | -1 pg_toast | 99 | test1 | 16384 | datanode1 | installation | 1859584 | -1 cstore | 100 | test1 | 16384 | datanode1 | installation | 0 | -1 data_redis | 18106 | gaussdb | 15253 | datanode1 | installation | 655360 | -1 data_redis | 18116 | test1 | 16384 | datanode1 | installation | 0 | -1 public | 2200 | test1 | 16384 | datanode1 | installation | 16384 | -1 dbms_om | 3987 | gaussdb | 15253 | datanode1 | installation | 0 | -1 dbms_job | 3988 | gaussdb | 15253 | datanode1 | installation | 0 | -1 dbms_om | 3987 | test1 | 16384 | datanode1 | installation | 0 | -1 dbms_job | 3988 | test1 | 16384 | datanode1 | installation | 0 | -1 sys | 11693 | gaussdb | 15253 | datanode1 | installation | 0 | -1 sys | 11693 | test1 | 16384 | datanode1 | installation | 0 | -1 utl_file | 14644 | gaussdb | 15253 | datanode1 | installation | 0 | -1 utl_raw | 14669 | gaussdb | 15253 | datanode1 | installation | 0 | -1 dbms_sql | 14674 | gaussdb | 15253 | datanode1 | installation | 0 | -1 dbms_output | 14662 | gaussdb | 15253 | datanode1 | installation | 0 | -1 dbms_random | 14666 | gaussdb | 15253 | datanode1 | installation | 0 | -1 dbms_lob | 14701 | gaussdb | 15253 | datanode1 | installation | 0 | -1 information_schema | 14300 | gaussdb | 15253 | datanode1 | installation | 294912 | -1 information_schema | 14300 | test1 | 16384 | datanode1 | installation | 294912 | -1 utl_file | 14644 | test1 | 16384 | datanode1 | installation | 0 | -1 dbms_output | 14662 | test1 | 16384 | datanode1 | installation | 0 | -1 dbms_random | 14666 | test1 | 16384 | datanode1 | installation | 0 | -1 utl_raw | 14669 | test1 | 16384 | datanode1 | installation | 0 | -1 dbms_sql | 14674 | test1 | 16384 | datanode1 | installation | 0 | -1 dbms_lob | 14701 | test1 | 16384 | datanode1 | installation | 0 | -1 pg_catalog | 11 | gaussdb | 15253 | datanode1 | installation | 13017088 | -1 redisuser | 16387 | gaussdb | 15253 | datanode1 | installation | 630784 | -1 pg_toast | 99 | gaussdb | 15253 | datanode1 | installation | 3080192 | -1 cstore | 100 | gaussdb | 15253 | datanode1 | installation | 2408448 | -1 pg_catalog | 11 | test1 | 16384 | datanode2 | installation | 9469952 | -1 public | 2200 | gaussdb | 15253 | datanode2 | installation | 25214976 | -1 pg_toast | 99 | test1 | 16384 | datanode2 | installation | 1859584 | -1 cstore | 100 | test1 | 16384 | datanode2 | installation | 0 | -1 data_redis | 18106 | gaussdb | 15253 | datanode2 | installation | 655360 | -1 data_redis | 18116 | test1 | 16384 | datanode2 | installation | 0 | -1 public | 2200 | test1 | 16384 | datanode2 | installation | 16384 | -1 dbms_om | 3987 | gaussdb | 15253 | datanode2 | installation | 0 | -1 dbms_job | 3988 | gaussdb | 15253 | datanode2 | installation | 0 | -1 dbms_om | 3987 | test1 | 16384 | datanode2 | installation | 0 | -1 dbms_job | 3988 | test1 | 16384 | datanode2 | installation | 0 | -1 sys | 11693 | gaussdb | 15253 | datanode2 | installation | 0 | -1 sys | 11693 | test1 | 16384 | datanode2 | installation | 0 | -1 utl_file | 14644 | gaussdb | 15253 | datanode2 | installation | 0 | -1 utl_raw | 14669 | gaussdb | 15253 | datanode2 | installation | 0 | -1 dbms_sql | 14674 | gaussdb | 15253 | datanode2 | installation | 0 | -1 dbms_output | 14662 | gaussdb | 15253 | datanode2 | installation | 0 | -1 dbms_random | 14666 | gaussdb | 15253 | datanode2 | installation | 0 | -1 dbms_lob | 14701 | gaussdb | 15253 | datanode2 | installation | 0 | -1 information_schema | 14300 | gaussdb | 15253 | datanode2 | installation | 294912 | -1 information_schema | 14300 | test1 | 16384 | datanode2 | installation | 294912 | -1 utl_file | 14644 | test1 | 16384 | datanode2 | installation | 0 | -1 dbms_output | 14662 | test1 | 16384 | datanode2 | installation | 0 | -1 dbms_random | 14666 | test1 | 16384 | datanode2 | installation | 0 | -1 select * from pgxc_total_schema_info_analyze; schemaname | databasename | nodegroup | total_value | avg_value | skew_percent | extend_info --------------------+--------------+--------------+-------------+-----------+--------------+----------------------------------------------- pg_catalog | test1 | installation | 56819712 | 9469952 | 0 | min:9469952 datanode1,max:9469952 datanode1 public | gaussdb | installation | 150495232 | 25082538 | 0 | min:24903680 datanode6,max:25280512 datanode1 pg_toast | test1 | installation | 11157504 | 1859584 | 0 | min:1859584 datanode1,max:1859584 datanode1 cstore | test1 | installation | 0 | 0 | 0 | min:0 datanode1,max:0 datanode1 data_redis | gaussdb | installation | 1966080 | 327680 | 50 | min:0 datanode4,max:655360 datanode1 data_redis | test1 | installation | 0 | 0 | 0 | min:0 datanode1,max:0 datanode1 public | test1 | installation | 98304 | 16384 | 0 | min:16384 datanode1,max:16384 datanode1 dbms_om | gaussdb | installation | 0 | 0 | 0 | min:0 datanode1,max:0 datanode1 dbms_job | gaussdb | installation | 0 | 0 | 0 | min:0 datanode1,max:0 datanode1 dbms_om | test1 | installation | 0 | 0 | 0 | min:0 datanode1,max:0 datanode1 dbms_job | test1 | installation | 0 | 0 | 0 | min:0 datanode1,max:0 datanode1 sys | gaussdb | installation | 0 | 0 | 0 | min:0 datanode1,max:0 datanode1 sys | test1 | installation | 0 | 0 | 0 | min:0 datanode1,max:0 datanode1 utl_file | gaussdb | installation | 0 | 0 | 0 | min:0 datanode1,max:0 datanode1 utl_raw | gaussdb | installation | 0 | 0 | 0 | min:0 datanode1,max:0 datanode1 dbms_sql | gaussdb | installation | 0 | 0 | 0 | min:0 datanode1,max:0 datanode1 dbms_output | gaussdb | installation | 0 | 0 | 0 | min:0 datanode1,max:0 datanode1 dbms_random | gaussdb | installation | 0 | 0 | 0 | min:0 datanode1,max:0 datanode1 dbms_lob | gaussdb | installation | 0 | 0 | 0 | min:0 datanode1,max:0 datanode1 information_schema | gaussdb | installation | 1769472 | 294912 | 0 | min:294912 datanode1,max:294912 datanode1 information_schema | test1 | installation | 1769472 | 294912 | 0 | min:294912 datanode1,max:294912 datanode1 utl_file | test1 | installation | 0 | 0 | 0 | min:0 datanode1,max:0 datanode1 dbms_output | test1 | installation | 0 | 0 | 0 | min:0 datanode1,max:0 datanode1 dbms_random | test1 | installation | 0 | 0 | 0 | min:0 datanode1,max:0 datanode1 utl_raw | test1 | installation | 0 | 0 | 0 | min:0 datanode1,max:0 datanode1 dbms_sql | test1 | installation | 0 | 0 | 0 | min:0 datanode1,max:0 datanode1 dbms_lob | test1 | installation | 0 | 0 | 0 | min:0 datanode1,max:0 datanode1 pg_catalog | gaussdb | installation | 75210752 | 12535125 | 3 | min:12091392 datanode4,max:13017088 datanode1 redisuser | gaussdb | installation | 1884160 | 314026 | 50 | min:16384 datanode4,max:630784 datanode1 pg_toast | gaussdb | installation | 17154048 | 2859008 | 7 | min:2637824 datanode4,max:3080192 datanode1 cstore | gaussdb | installation | 15294464 | 2549077 | 5 | min:2408448 datanode1,max:2703360 datanode6 (31 rows)
父主题: 资源负载管理