Skip to content

DM 容量扩展 ​

容量扩展的重要性 ​

  • 保证业务连续性:足够的存储容量是业务连续性的基础
  • 提高性能:合理的容量规划和扩展可以提高数据库性能
  • 降低成本:按需扩展容量可以降低存储成本
  • 避免数据丢失:及时扩展容量可以避免因存储空间不足导致的数据丢失
  • 满足合规要求:某些行业对数据存储有特定的合规要求

DM数据库容量管理的特点 ​

  • 灵活的表空间管理:支持多种表空间类型和扩展方式
  • 自动扩展:支持数据文件自动扩展
  • 多种存储设备支持:支持本地磁盘、SAN、NAS等多种存储设备
  • 在线扩展:支持在线扩展表空间和数据文件,不影响业务运行
  • 容量监控:提供丰富的视图和工具监控存储容量

容量扩展策略 ​

1. 垂直扩展 ​

垂直扩展是指增加现有存储设备的容量,如更换更大容量的硬盘、增加磁盘阵列的磁盘数量等。

适用场景 ​

  • 现有存储设备支持扩展:如磁盘阵列支持在线添加磁盘
  • 业务对性能要求高:垂直扩展可以保持较高的I/O性能
  • 数据增长相对稳定:可以预测未来的存储需求

优缺点 ​

优点:

  • 操作相对简单
  • 保持现有架构不变
  • 可以充分利用现有存储设备

缺点:

  • 扩展上限受限于存储设备的最大容量
  • 可能需要停机维护
  • 成本较高

2. 水平扩展 ​

水平扩展是指添加新的存储设备,如添加新的磁盘、新的磁盘阵列等。

适用场景 ​

  • 现有存储设备无法垂直扩展:如本地磁盘无法更换更大容量的硬盘
  • 业务数据增长迅速:需要快速扩展存储容量
  • 需要提高I/O性能:通过添加多个存储设备可以提高I/O性能

优缺点 ​

优点:

  • 扩展上限较高
  • 可以在线扩展,不影响业务运行
  • 可以提高I/O性能

缺点:

  • 操作相对复杂
  • 需要重新规划存储架构
  • 可能导致数据分布不均匀

3. 混合扩展 ​

混合扩展是指同时采用垂直扩展和水平扩展的方式,如先垂直扩展现有存储设备,再添加新的存储设备。

适用场景 ​

  • 业务数据增长非常迅速:需要快速大量扩展存储容量
  • 对性能要求较高:需要同时提高存储容量和I/O性能
  • 现有存储设备还有扩展空间:可以先充分利用现有存储设备

优缺点 ​

优点:

  • 可以同时提高存储容量和I/O性能
  • 可以充分利用现有存储设备
  • 扩展灵活性高

缺点:

  • 操作复杂
  • 成本较高
  • 需要仔细规划存储架构

容量扩展方法 ​

1. 表空间扩展 ​

表空间是DM数据库中存储数据的基本单位,表空间扩展是最常用的容量扩展方法。

1.1 自动扩展表空间 ​

DM数据库支持表空间自动扩展,当表空间空间不足时,会自动扩展数据文件。

配置方法:

sql
-- 创建自动扩展的表空间
CREATE TABLESPACE test_ts DATAFILE 'test_ts.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE 1000M;

-- 修改现有表空间为自动扩展
ALTER TABLESPACE test_ts AUTOEXTEND ON NEXT 10M MAXSIZE 1000M;

1.2 手动扩展表空间 ​

手动扩展表空间是指通过添加数据文件或扩展现有数据文件的方式扩展表空间。

添加数据文件:

sql
-- 为表空间添加新的数据文件
ALTER TABLESPACE test_ts ADD DATAFILE 'test_ts2.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE 1000M;

扩展现有数据文件:

sql
-- 扩展现有数据文件的大小
ALTER TABLESPACE test_ts RESIZE DATAFILE 'test_ts.dbf' TO 200M;

2. 数据文件扩展 ​

数据文件是表空间的物理存储文件,数据文件扩展是表空间扩展的基础。

2.1 自动扩展数据文件 ​

自动扩展数据文件是指当数据文件空间不足时,自动扩展数据文件的大小。

配置方法:

sql
-- 创建自动扩展的数据文件
CREATE TABLESPACE test_ts DATAFILE 'test_ts.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE 1000M;

-- 修改现有数据文件为自动扩展
ALTER TABLESPACE test_ts DATAFILE 'test_ts.dbf' AUTOEXTEND ON NEXT 10M MAXSIZE 1000M;

2.2 手动扩展数据文件 ​

手动扩展数据文件是指通过SQL语句手动扩展数据文件的大小。

扩展数据文件:

sql
-- 扩展数据文件的大小
ALTER TABLESPACE test_ts RESIZE DATAFILE 'test_ts.dbf' TO 200M;

3. 存储设备升级 ​

存储设备升级是指更换或添加存储设备,如更换更大容量的硬盘、添加新的磁盘阵列等。

3.1 更换存储设备 ​

更换存储设备是指将现有存储设备更换为更大容量的存储设备。

操作步骤:

  1. 备份数据库
  2. 停止数据库实例
  3. 更换存储设备
  4. 恢复数据库
  5. 启动数据库实例

3.2 添加存储设备 ​

添加存储设备是指在现有存储设备基础上添加新的存储设备。

操作步骤:

  1. 添加新的存储设备
  2. 格式化存储设备
  3. 挂载存储设备
  4. 为表空间添加新的数据文件到新的存储设备

4. 分区表扩展 ​

对于大表,可以使用分区表的方式进行容量扩展,将数据分布到多个分区中。

4.1 范围分区 ​

范围分区是根据列值的范围将数据分布到不同的分区中。

创建范围分区表:

sql
-- 创建范围分区表
CREATE TABLE test_partition (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    create_time DATETIME
)
PARTITION BY RANGE(create_time) (
    PARTITION p202301 VALUES LESS THAN ('2023-02-01'),
    PARTITION p202302 VALUES LESS THAN ('2023-03-01'),
    PARTITION p202303 VALUES LESS THAN ('2023-04-01')
);

添加新分区:

sql
-- 添加新分区
ALTER TABLE test_partition ADD PARTITION p202304 VALUES LESS THAN ('2023-05-01');

4.2 列表分区 ​

列表分区是根据列值的列表将数据分布到不同的分区中。

创建列表分区表:

sql
-- 创建列表分区表
CREATE TABLE test_partition (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    region VARCHAR(20)
)
PARTITION BY LIST(region) (
    PARTITION p_north VALUES ('北京', '天津', '河北'),
    PARTITION p_south VALUES ('上海', '江苏', '浙江'),
    PARTITION p_east VALUES ('广东', '广西', '海南')
);

添加新分区:

sql
-- 添加新分区
ALTER TABLE test_partition ADD PARTITION p_west VALUES ('四川', '云南', '贵州');

4.3 哈希分区 ​

哈希分区是根据列值的哈希值将数据分布到不同的分区中。

创建哈希分区表:

sql
-- 创建哈希分区表
CREATE TABLE test_partition (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    data VARCHAR(100)
)
PARTITION BY HASH(id) PARTITIONS 4;

增加分区数量:

sql
-- 增加分区数量到8个
ALTER TABLE test_partition COALESCE PARTITIONS 4;

容量扩展注意事项 ​

1. 扩展前准备 ​

  • 备份数据:在进行容量扩展前,必须备份数据库,防止数据丢失
  • 监控容量使用情况:定期监控存储容量使用情况,及时发现容量不足的问题
  • 制定扩展计划:根据业务需求和存储设备情况,制定详细的扩展计划
  • 测试扩展方案:在测试环境中测试扩展方案,确保方案可行
  • 通知相关人员:通知业务人员和开发人员,避免影响业务运行

2. 扩展中注意事项 ​

  • 选择合适的扩展时间:选择业务低峰期进行扩展,减少对业务的影响
  • 监控扩展过程:监控扩展过程中的数据库性能和状态
  • 避免同时进行多个扩展操作:避免同时进行多个容量扩展操作,以免影响数据库性能
  • 记录扩展过程:记录扩展过程中的重要信息和操作

3. 扩展后验证 ​

  • 验证扩展结果:验证表空间和数据文件的大小是否符合预期
  • 验证数据库性能:验证扩展后数据库性能是否正常
  • 验证业务连续性:验证业务是否正常运行
  • 更新容量规划:根据扩展结果,更新容量规划
  • 记录扩展结果:记录扩展结果,包括扩展前后的容量对比、扩展时间等

容量监控 ​

1. 系统级监控 ​

在操作系统层面,可以使用以下工具监控存储容量:

Linux系统 ​

  • df:查看文件系统的使用情况
  • du:查看目录或文件的大小
  • iostat:查看I/O和CPU使用率
bash
# 查看文件系统使用情况
df -h

# 查看DM数据库数据目录的大小
du -sh /opt/dmdbms/data

# 查看I/O性能
iostat -x

Windows系统 ​

  • 资源监视器:查看磁盘使用情况
  • 性能监视器:查看磁盘性能计数器
  • 命令提示符:使用dir、wmic等命令查看磁盘使用情况

2. 数据库级监控 ​

DM数据库提供了丰富的视图和工具监控存储容量:

监控视图 ​

  • V$TABLESPACE:查看表空间信息
  • V$DATAFILE:查看数据文件信息
  • V$HUGE_TABLE:查看大表信息
  • V$SEGSTAT:查看段统计信息

常用查询 ​

sql
-- 查看表空间使用情况
SELECT
    ts.NAME AS tablespace_name,
    df.TOTAL_SIZE * PAGE / 1024 / 1024 AS total_size_mb,
    (df.TOTAL_SIZE - fs.FREE_SIZE) * PAGE / 1024 / 1024 AS used_size_mb,
    fs.FREE_SIZE * PAGE / 1024 / 1024 AS free_size_mb,
    ROUND((1 - fs.FREE_SIZE / df.TOTAL_SIZE) * 100, 2) AS used_percent
FROM
    V$TABLESPACE ts,
    V$DATAFILE df,
    V$TABLESPACE_FREE fs
WHERE
    ts.ID = df.GROUP_ID
    AND ts.ID = fs.TABLESPACE_ID;

-- 查看数据文件使用情况
SELECT
    NAME AS file_name,
    TOTAL_SIZE * PAGE / 1024 / 1024 AS total_size_mb,
    FREE_SIZE * PAGE / 1024 / 1024 AS free_size_mb,
    ROUND((1 - FREE_SIZE / TOTAL_SIZE) * 100, 2) AS used_percent
FROM
    V$DATAFILE;

-- 查看大表信息
SELECT
    SCH.NAME AS schema_name,
    TB.NAME AS table_name,
    SEG.PHY_SIZE * PAGE / 1024 / 1024 AS table_size_mb
FROM
    SYS.SYSOBJECTS TB,
    SYS.SYSSCHEMAS SCH,
    V$SEGSTAT SEG
WHERE
    TB.SCHID = SCH.ID
    AND TB.ID = SEG.OBJID
    AND TB.TYPE$ = 'SCHOBJ'
    AND SEG.PHY_SIZE * PAGE / 1024 / 1024 > 100
ORDER BY
    table_size_mb DESC;

3. DM管理工具监控 ​

  • DM管理工具:提供图形化界面监控表空间和数据文件的使用情况
  • DM性能监控工具:可以监控存储I/O性能和容量使用情况

容量扩展最佳实践 ​

1. 制定合理的容量规划 ​

  • 分析数据增长趋势:根据历史数据增长情况,分析未来的数据增长趋势
  • 考虑业务发展:考虑业务的发展规划,预测未来的存储需求
  • 预留足够的扩展空间:为未来的业务增长预留足够的扩展空间
  • 定期更新容量规划:定期更新容量规划,适应业务的变化

2. 采用合适的扩展方式 ​

  • 优先使用自动扩展:对于非关键业务,可以优先使用自动扩展功能
  • 关键业务采用手动扩展:对于关键业务,建议采用手动扩展,以便更好地控制扩展过程
  • 合理使用分区表:对于大表,建议使用分区表,便于容量管理和扩展
  • 考虑存储设备的性能:在选择扩展方式时,考虑存储设备的性能

3. 优化存储结构 ​

  • 合理设计表空间:根据业务需求和数据类型,合理设计表空间结构
  • 使用合适的数据文件大小:根据存储设备的性能和容量,选择合适的数据文件大小
  • 将不同类型的数据分开存储:将热数据和冷数据分开存储,提高性能
  • 定期清理无用数据:定期清理无用数据,释放存储空间

4. 定期监控和维护 ​

  • 定期监控存储容量:定期监控存储容量使用情况,及时发现容量不足的问题
  • 定期检查存储设备:定期检查存储设备的健康状态,预防硬件故障
  • 定期备份数据:定期备份数据,防止数据丢失
  • 定期优化数据库:定期优化数据库,提高性能和存储效率

常见容量问题及解决方案 ​

1. 表空间满 ​

症状:表空间空间不足,无法插入数据,报错"Tablespace is full"。

解决方案:

  • 扩展表空间,添加新的数据文件或扩展现有数据文件
  • 清理表空间中的无用数据
  • 启用表空间自动扩展功能

2. 数据文件满 ​

症状:数据文件空间不足,无法插入数据,报错"Data file is full"。

解决方案:

  • 扩展数据文件大小
  • 为表空间添加新的数据文件
  • 启用数据文件自动扩展功能

3. 存储设备满 ​

症状:存储设备空间不足,无法创建新的数据文件,报错"No space left on device"。

解决方案:

  • 清理存储设备中的无用文件
  • 更换更大容量的存储设备
  • 添加新的存储设备
  • 将部分数据迁移到其他存储设备

4. 大表查询性能差 ​

症状:大表查询性能差,响应时间长。

解决方案:

  • 将大表转换为分区表
  • 优化SQL语句,创建合适的索引
  • 增加存储设备的I/O性能
  • 考虑使用读写分离架构

版本差异说明 ​

版本主要变化
DM 7支持基本的表空间和数据文件扩展功能
DM 8增强了容量管理功能,支持更多的分区类型和扩展方式
DM 8.1优化了容量扩展的性能,支持更多的存储设备类型

常见问题(FAQ) ​

Q1: 如何判断DM数据库需要进行容量扩展? ​

A1: 判断DM数据库需要进行容量扩展的方法:

  • 监控表空间使用率,当使用率超过80%时,考虑进行扩展
  • 监控数据文件大小,当数据文件接近最大大小时,考虑进行扩展
  • 监控存储设备使用率,当使用率超过80%时,考虑进行扩展
  • 预测业务增长,提前进行容量扩展

Q2: 如何选择合适的容量扩展方式? ​

A2: 选择合适的容量扩展方式的方法:

  • 考虑业务需求和存储设备情况
  • 考虑扩展对业务的影响
  • 考虑扩展的成本和复杂性
  • 考虑未来的业务增长需求

Q3: 可以在线扩展DM数据库的容量吗? ​

A3: 是的,DM数据库支持在线扩展容量,包括在线扩展表空间和数据文件,不影响业务运行。

Q4: 如何监控DM数据库的存储容量? ​

A4: 监控DM数据库存储容量的方法:

  • 使用DM管理工具的图形化界面监控
  • 使用DM诊断视图查询存储容量信息
  • 使用操作系统工具监控存储设备使用率
  • 使用第三方监控工具,如Zabbix、Prometheus等

Q5: 如何优化DM数据库的存储使用? ​

A5: 优化DM数据库存储使用的方法:

  • 定期清理无用数据
  • 优化表结构,减少存储空间占用
  • 使用压缩表,减少存储空间占用
  • 合理设计表空间和数据文件
  • 将热数据和冷数据分开存储

Q6: 如何扩展DM数据库的临时表空间? ​

A6: 扩展DM数据库临时表空间的方法:

  • 添加新的临时数据文件
  • 扩展现有临时数据文件的大小
  • 启用临时数据文件自动扩展功能
sql
-- 添加新的临时数据文件
ALTER TABLESPACE TEMP ADD TEMPFILE 'temp2.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE 1000M;

-- 扩展现有临时数据文件
ALTER TABLESPACE TEMP RESIZE TEMPFILE 'temp.dbf' TO 200M;

Q7: 如何扩展DM数据库的日志表空间? ​

A7: 扩展DM数据库日志表空间的方法:

  • 添加新的日志文件
  • 扩展现有日志文件的大小
sql
-- 添加新的日志文件
ALTER DATABASE ADD LOGFILE 'log3.log' SIZE 100M;

-- 扩展现有日志文件
ALTER DATABASE RESIZE LOGFILE 'log1.log' TO 200M;

Q8: 如何将DM数据库迁移到更大容量的存储设备? ​

A8: 将DM数据库迁移到更大容量存储设备的方法:

  1. 备份数据库
  2. 停止数据库实例
  3. 将数据文件复制到新的存储设备
  4. 修改dm.ini文件中的数据文件路径
  5. 启动数据库实例
  6. 验证数据库是否正常运行

Q9: 如何使用分区表进行容量扩展? ​

A9: 使用分区表进行容量扩展的方法:

  • 对于范围分区表,可以添加新的分区
  • 对于列表分区表,可以添加新的分区
  • 对于哈希分区表,可以增加分区数量
  • 可以将大表转换为分区表

Q10: 如何制定DM数据库的容量扩展计划? ​

A10: 制定DM数据库容量扩展计划的方法:

  1. 分析历史数据增长情况
  2. 预测未来的数据增长需求
  3. 评估现有存储设备的容量和性能
  4. 选择合适的扩展方式
  5. 制定详细的扩展步骤和时间计划
  6. 测试扩展方案
  7. 执行扩展计划
  8. 验证扩展结果

在进行容量扩展时,DBA需要注意扩展前的准备工作、扩展中的注意事项和扩展后的验证工作,确保扩展过程顺利进行,不影响业务运行。同时,DBA还需要定期优化存储结构,提高存储效率,降低存储成本。

通过合理的容量规划和扩展,可以保证DM数据库的性能和可靠性,满足业务的发展需求。