磁盘配额
默认情况下,架构和表仅受可用磁盘空间和许可证容量的限制。可以为架构或单个表设置磁盘配额,例如为了支持多租户。设置、修改或移除磁盘配额需要超级用户权限。
增加存储大小的大多数用户操作都会强制实施磁盘配额。在某些操作(例如恢复)期间,表可能会暂时超出其配额。如果将配额降低到当前使用量以下,虽然不会丢失任何数据,但无法添加更多数据。请将配额视为建议,而不是硬性限制。
架构配额(如果已设置)必须大于其中的最大表配额。
磁盘配额是由整数和度量单位(K、M、G 或 T)组成的字符串,例如“15G”或“1T”。不要在数字和单位之间使用空格。不支持其他度量单位。
要在创建时设置配额,请为 CREATE SCHEMA 或 CREATE TABLE 使用 DISK_QUOTA 选项:
=> CREATE SCHEMA internal DISK_QUOTA '10T';
CREATE SCHEMA
=> CREATE TABLE internal.sales (...) DISK_QUOTA '5T';
CREATE TABLE
=> CREATE TABLE internal.leads (...) DISK_QUOTA '12T';
ROLLBACK 0: Table can not have a greater disk quota than its Schema
要修改、添加或移除现有架构或表的配额,请使用 ALTER SCHEMA 或 ALTER TABLE:
=> ALTER SCHEMA internal DISK_QUOTA '20T';
ALTER SCHEMA
=> ALTER TABLE internal.sales DISK_QUOTA SET NULL;
ALTER TABLE
可以设置低于当前使用量的配额。ALTER 操作成功后,架构或表暂时超出配额,此时将无法执行增加数据使用量的操作。
哪些数据在计数范围内
在 Eon 模式下,磁盘使用量是用于架构或表的所有分片使用的所有空间的总和。此值仅针对主订阅计算。
在企业模式下,磁盘使用量是所有节点上用于架构或表的所有存储容器使用的空间总和。该总和不包括伙伴实例投影,但包括所有其他投影。
磁盘使用量根据压缩大小进行计算。
何时适用配额
配额(如果存在)影响大多数 DML 和 ILM 操作,包括:
-
添加或刷新列(请参阅 ALTER COLUMN)
-
表的子集还原(如果它会超出架构配额)
以下示例显示了超出表配额导致故障:
=> CREATE TABLE stats(score int) DISK_QUOTA '1k';
CREATE TABLE
=> COPY stats FROM STDIN;
1
2
3
4
5
\.
ERROR 0: Disk Quota Exceeded for the Table object public.stats
HINT: Delete data and PURGE or increase disk quota at the table level
DELETE 不会释放空间,因为已删除的数据仍保留在存储容器中。由删除操作添加的删除向量不计入配额,因此删除是与配额无关的操作。清除数据时回收已删除数据的磁盘空间;请参阅移除表数据。
一些不常见的操作(例如 ADD COLUMN、RESTORE 和 SWAP PARTITION)可能会在事务期间创建新的存储容器。这些操作在完成时会清理多余的位置,但在操作进行过程中,表或架构可能会超出其配额。如果在这些操作期间收到磁盘配额错误,则可以暂时增加配额,执行该操作,然后重置配额。
配额不影响恢复、重新平衡或 Tuple Mover 操作。
监视
DISK_QUOTA_USAGES 系统表显示具有配额的表和架构的当前磁盘使用量。此表不报告没有配额的对象。
您可以使用此表监视使用量,并做出调整配额的决策:
=> SELECT * FROM DISK_QUOTA_USAGES;
object_oid | object_name | is_schema | total_disk_usage_in_bytes | disk_quota_in_bytes
-------------------+-------------+-----------+---------------------+---------------------
45035996273705100 | s | t | 307 | 10240
45035996273705104 | public.t | f | 614 | 1024
45035996273705108 | s.t | f | 307 | 2048
(3 rows)