DB2 - 存储组
DB2 - 使用存储组简化空间管理
Section titled “DB2 - 使用存储组简化空间管理”本章介绍了自动存储(Automatic Storage)和存储组(Storage Groups),这是管理 Db2 数据库磁盘空间的现代方法。
自动存储简介
Section titled “自动存储简介”过去,数据库管理员必须手动管理每个表空间(tablespace)的独立文件(容器)。自动存储极大地简化了这一过程。当数据库启用自动存储时,您只需为其提供一个或多个存储路径,Db2 便会负责在这些路径内创建、扩展和管理表空间容器。
存储组是这些存储路径的命名集合。这允许您将不同类型的数据分组到不同层级的物理存储上。例如,您可以为关键表和索引在 SSD 上创建一个 FAST_STORAGE 组,并为不经常访问的数据在传统 HDD 上创建一个 BULK_STORAGE 组。
当您创建数据库时,会自动创建一个名为 IBMSTOGROUP 的默认存储组,指向数据库路径。
您可以通过查询系统目录来查看现有的存储组及其关联路径。
SELECT SGNAME, SGPATH FROM SYSCAT.STOGROUPPATHS;创建和管理存储组
Section titled “创建和管理存储组”让我们来看看一个常见场景:将一套新的、更快的磁盘添加到您的服务器,并为它们创建一个新的存储组。
使用 CREATE STOGROUP 命令定义一个新的存储组。您必须提供一个或多个绝对路径。
-- 假设您在 /ssd/data 处有一个已挂载的文件系统CREATE STOGROUP fast_storage ON '/ssd/data';随着存储需求的增长,您可以轻松地向现有存储组添加新路径。这是一个非中断性的在线操作。
-- 向 fast_storage 组添加新路径ALTER STOGROUP fast_storage ADD '/ssd/data2', '/ssd/data3';
-- 您也可以删除路径,但前提是它们未被任何表空间使用-- 首先,您需要将数据从该路径上重新平衡(见下文)ALTER STOGROUP fast_storage DROP '/ssd/data';将存储组与表空间一起使用
Section titled “将存储组与表空间一起使用”定义存储组后,您可以指示新的或现有的表空间使用它。
在存储组上创建新表空间
Section titled “在存储组上创建新表空间”创建新表空间时,使用 USING STOGROUP 子句指定目标存储组。
-- 在快速存储上为重要应用程序数据创建新表空间CREATE TABLESPACE app_data USING STOGROUP fast_storage;将现有表空间移动到不同的存储组
Section titled “将现有表空间移动到不同的存储组”您可以将整个表空间从一个存储组在线移动到另一个存储组。Db2 将在后台处理数据的移动。
-- 将 USERSPACE1 表空间从默认组移动到我们的新快速组ALTER TABLESPACE USERSPACE1 USING STOGROUP fast_storage;重新平衡操作
Section titled “重新平衡操作”将新路径添加到存储组或移动表空间后,Db2 不会立即移动现有数据。它只会将新路径用于新的数据分配。为了将现有数据重新分发到所有可用路径以获得更好的 I/O 性能,您必须启动 REBALANCE 操作。
重新平衡是一个在线操作,但它可能会占用大量 I/O 资源。最好在非高峰时段运行它。
-- 移动 USERSPACE1 后,对其进行重新平衡以将其数据分散到 fast_storage 中的所有路径ALTER TABLESPACE USERSPACE1 REBALANCE;您可以使用 MON_GET_REBALANCE_STATUS 表函数监控重新平衡的进度。
仅当存储组未被任何表空间使用时,您才能删除它。您必须首先更改任何关联的表空间以使用不同的存储组。
-- 首先,将表空间移动到另一个组-- ALTER TABLESPACE app_data USING STOGROUP IBMSTOGROUP;
-- 现在,可以删除存储组了DROP STOGROUP fast_storage;最佳实践:使用多个存储组是实现分层存储策略的强大方式,可有效提升性能并管理成本。请根据数据的访问模式和重要性规划您的存储布局。