#表的存储空间

# 存储空间规划

在搭建一套数据库时,管理员需要进行存储空间的设计,并将其分配给业务用户,数据库开发人员使用这套默认的存储空间创建表对象,可以让开发人员无需过多考虑底层存储约束,简化应用逻辑。

在使用CREATE TABLE创建表对象时,不使用TABLESPACE指定表空间,系统将默认为用户的所属表空间,表数据。

进入规划的存储空间内,其中临时表数据将进入系统临时表空间内。

除此之外,建议管理员还规划如下存储空间供开发人员指定:

  • 为每一个用户表空间建立一个相应的索引表空间。

  • 在需要时,为分区表的分区建立一个独立表空间。

  • 为大对象数据建立一个或多个独立表空间。

需注意的是,对于LSC表,管理员需要预先为其规划和创建databucket表空间,用于存储SCOL稳态数据。

Note

TAC表和LSC表可变数据都是按列组织,每列采用段页式结构存储。

即便插入一条数据,每列都会预分配特定数量(最大384个)的页面。

尤其在表的分区和列数很多的场景下,插入容易出现表空间不足的错误。处理方法可参考错误码YAS-02007

# 空间优化

数据库管理员可以通过SQL语句管理表的存储空间,详细语法描述请参考开发手册CREATE TABLEALTER TABLE

HEAP表

基于行存特征,对表的频繁更新、删除等操作可能导致产生碎片,表占用空间变得膨胀,此时采用shrink table功能可以重整HEAP表的存储结构,将表的数据空间进行收缩。

示例(单机HEAP表)

ALTER TABLE orders_info ENABLE ROW MOVEMENT;
-- 默认shrink后释放空出来的extent,供其他表使用
ALTER TABLE orders_info SHRINK SPACE;
-- COMPACT表示不释放
ALTER TABLE orders_info SHRINK SPACE COMPACT;

-- 对某个分区空间进行shrink
ALTER TABLE orders_info MODIFY PARTITION p_orders_info_1 SHRINK SPACE COMPACT;

Note

  • 在执行shrink table之前,对表数据进行备份是更加保险的一种做法。

  • shrink table可以在线操作,不影响DML执行。

LSC表稳态数据

LSC表的稳态数据以slice文件存储,对这部分数据的空间优化包括:1)将离散的小的slice文件进行合并;2)将无序的slice文件进行排序。

YashanDB默认启动后台数据转换任务,自动对slice文件执行上述优化,优化期间会产生额外的资源消耗,用户可以根据实际情况对某张表关闭该操作:

示例(单机LSC表)

-- 关闭后,系统不再自动对orders_info表的稳态数据进行空间优化
ALTER TABLE orders_info DISABLE COMPACT;

并在需要时手动对表启动一次空间优化,提高查询性能:

示例(单机LSC表)

ALTER TABLE orders_info ENABLE COMPACT;
ALTER TABLE orders_info ALTER SLICE ALL COMPACT;

Note

  • 在资源允许的情况下,建议不要关闭COMPACT开关,由系统自动判断空间优化的时机并执行优化。

  • 如必须采取手动执行COMPACT的方式,建议安排在业务空闲时间,避免影响其他操作。

pdf-btn 下载文档
copy-btn 复制链接