在DM数据库的日常运维中,表空间与数据文件管理是DBA工作的核心模块。作为逻辑存储与物理存储的桥梁,表空间不仅决定了数据的存储隔离策略,更直接影响数据库的性能、可用性与可维护性。大多数都是默认MAIN表空间存储所有业务数据,导致后续出现性能瓶颈、备份恢复困难、空间管理混乱等问题。
达梦表空间是一套融合了逻辑隔离、性能优化、空间管控的存储体系。
DM8的存储结构遵循数据库->表空间->数据文件->簇->页的层级模型,其中表空间是逻辑层与物理层的关键连接:
**核心原则:**一个表空间可包含多个数据文件,一个数据文件只能属于一个表空间;数据文件的大小、拓展策略由表空间定义,而表空间的逻辑属性。
创建DM数据库时,系统会自动生成5个核心表空间,每个表空间的作用必须明确。
表空间名称 | 类型 | 核心作用 | 运维注意事项 |
---|---|---|---|
SYSTEM | 系统表空间 | 存储数据字典信息(表结构、列定义、权限) | ① 不可手动创建对象(表、索引);② 不可删除或离线;③ 需监控空间使用率,避免满溢 |
ROLL | 回滚表空间 | 存储事务回滚记录,保证读一致性 | ① 系统自动维护,禁止手动干预;② 空间不足时自动扩展,需预留磁盘空间 |
RLOG | 日志表空间 | 存储重做日志(.log文件),用于故障恢复 | ① 默认 2 个日志文件循环使用;② 需定期归档,避免日志覆盖导致恢复失败 |
MAIN | 混合表空间 | 默认用户表空间,支持普通表与HUGE表 | ① 不建议存储核心业务数据(隔离性差);② 包含 HMAIN 目录,HUGE 数据文件存于此 |
TEMP | 临时表空间 | 存储临时结果集(如排序、临时表) | ① 系统自动释放临时段;② 空间满会导致排序失败,需监控并扩展 |
为什么不建议用MAIN表空间存储所有业务数据?
DM表空间分为普通表空间和混合表空间,两者核心区别在于是否支持HUGE表。
表空间的管理覆盖“创建->监控->扩展->维护->删除“全流程。每个环节都需要结合业务需求与性能目标设计操作方案。
创建表空间时,需重点关注数据文件路径、大小、扩展策略、簇大小、填充因子这 5 个参数,它们直接决定后续的性能与可维护性。
以创建订单表空间ORDER_TBS为例,需求如下:
创建SQL及参数说明:
CREATE TABLESPACE ORDER_TBS
-- 定义第一个数据文件,路径需提前创建且权限为dmuser
DATAFILE '/dm8/data/ORDER_TBS01.DBF'
SIZE 512M -- 初始大小
AUTOEXTEND ON -- 开启自动扩展
NEXT 100M -- 每次扩展100M
MAXSIZE 2048M; -- 最大扩展到2G(避免无限制占用磁盘)
参数:
表空间的核心监控指标是空间使用率和数据文件状态,需要定期检查,避免因空间满或数据文件损坏导致业务中断:
通过查询视图进行监控:
DM提供了V$TABLESPACE
(表空间信息)和V$DATAFILE
(数据文件信息)视图,可通过关联查询获取表空间的详细使用情况。
下列SQL可以用来查看表空间信息,例如数据文件路径,总空间大小,空闲空间大小,使用率等
SELECT
T.NAME AS TABLESPACE_NAME, -- 表空间名称
D.PATH AS DATAFILE_PATH, -- 数据文件路径
-- 总大小(转换为MB,1页=8KB,1MB=1024KB)
ROUND(D.TOTAL_SIZE * 8 / 1024, 2) AS TOTAL_MB,
-- 空闲大小
ROUND(D.FREE_SIZE * 8 / 1024, 2) AS FREE_MB,
-- 使用率
ROUND((1 - ROUND(D.FREE_SIZE * 8 / 1024, 2)/ ROUND(D.TOTAL_SIZE * 8 / 1024, 2))*100 ,2) AS USED_PERCENT,
-- 数据文件状态(0=正常,1=失效)
D.STATUS$ AS DATAFILE_STATUS
FROM
V$TABLESPACE T
JOIN
V$DATAFILE D ON T.ID = D.ID
ORDER BY
USED_PERCENT DESC; -- 按使用率降序,优先关注高使用率表空间
以下是通过该SQL查询出来的实例表空间信息,可以看出每个表空间的数据文件路径,总空间大小,空闲空间大小,使用率等。
监控阈值:
当表空间使用率超过阈值时,需要及时扩展。DM支持添加数据文件和扩展当前现有数据文件两种方式。
若当前数据文件所在磁盘空间不足,或需分散 IO 压力(将新数据文件放在其他磁盘),建议添加新数据文件。以扩展 ORDER_TBS 为例:
ALTER TABLESPACE ORDER_TBS
ADD DATAFILE '/dm8/data/ORDER_TBS02.DBF' -- 新数据文件路径(需在新磁盘)
SIZE 1024
AUTOEXTEND ON NEXT 200 MAXSIZE 4096;
注意事项
ADD HUGE DATAFILE
命令。可以看到第二个数据文件被成功添加
若当前磁盘空间充足,可直接扩展现有数据文件的最大大小或初始大小。例如,将 ORDER_TBS01.DBF 的临时增大初始大小
ALTER TABLESPACE ORDER_TBS RESIZE DATAFILE '/dm8/data/ORDER_TBS01.DBF' TO 1024;
运行后可以看到ORDER_TBS01.DBF文件被成功扩展。
在某些场景下,需要修改空间的状态。表空间有以下两种状态切换:表空间的在线/离线(OFFLINE/ONLINE)。
表空间的只读/可读写(READ ONLY/READ WRITE);
当数据文件损坏或需维护时,可将表空间设为离线,避免业务访问出错;维护完成后再设为在线。
操作命令:
-- 将ORDER_TBS设为离线(需确保无活跃事务访问该表空间)
ALTER TABLESPACE ORDER_TBS OFFLINE;
-- 维护完成后设为在线
ALTER TABLESPACE ORDER_TBS ONLINE;
关键限制:
对于冷数据(如历史订单表),可将表空间设为只读,防止误修改,同时提升查询性能(只读表空间的缓存策略更高效)。
操作命令:
-- 将历史表空间HISTORY_TBS设为只读
ALTER TABLESPACE HISTORY_TBS READ ONLY;
-- 需修改数据时,恢复为可读写
ALTER TABLESPACE HISTORY_TBS READ WRITE;
适用场景:
删除表空间需谨慎,一旦删除,表空间中的所有对象(表、索引)和数据文件将被删除。
-- 删除ORDER_TBS表空间,同时删除数据文件(默认)
DROP TABLESPACE ORDER_TBS;
-- 删除表空间,但保留数据文件(用于后续恢复)
DROP TABLESPACE ORDER_TBS KEEP DATAFILES;
删除前的必要检查:
**核心思路:**将不同业务模块、不同生命周期的数据隔离到独立表空间,便于备份、恢复与性能优化。
规划方案举例:
业务模块 / 数据类型 | 表空间名称 | 数据文件配置 | 特殊设置 |
---|---|---|---|
订单模块(热数据) | ORDER_TBS | 2 个数据文件,分布在不同磁盘(IO 分散) | BUFFER_POOL=KEEP,FILLFACTOR=80 |
用户模块(热数据) | USER_TBS | 2 个数据文件,与 ORDER_TBS 不在同一磁盘 | BUFFER_POOL=KEEP,FILLFACTOR=80 |
历史数据(冷数据) | HISTORY_TBS | 1 个大数据文件,存储在低成本磁盘 | READ ONLY(归档后),FILLFACTOR=100 |
HUGE 表(列存储) | HUGE_TBS | 混合表空间,HUGE 数据文件路径独立 | EXTENT SIZE=64(大簇减少分配次数) |
索引专用 | INDEX_TBS | 2 个数据文件,存储在高速磁盘(如 SSD) | BUFFER_POOL=KEEP,提升索引访问速度 |
DM8 的 IO 性能瓶颈常源于数据文件集中在单一磁盘,导致 IO 竞争。优化方案如下:
簇是 DM的空间分配单位(由连续的页组成),簇大小的设置需结合表的大小与访问模式:
修改簇大小的命令(仅新建表空间或表时生效,已创建的表无法修改):
-- 新建表时指定簇大小
CREATE TABLE ORDER_INFO (
ORDER_ID INT PRIMARY KEY,
ORDER_TIME DATETIME
) TABLESPACE ORDER_TBS
STORAGE (EXTENT SIZE 32);
文章
阅读量
获赞