我们有一个非常大的表 LARGEHISTORY 表,它有数百万条记录。目前该表使用 50GB 的表空间,在 DB2 (DB2 v9.5.301.436) 中允许的最大表空间为 65GB。表增长得非常快,我们需要做一些非常快的事情来克服这个问题。
数据库:DB2 v9.5.301.436
我们已经想到的解决方案:
增加表空间大小,可以使用以下两个选项来实现:
将 LARGEHISTORY 的表空间从 65GB 更改为 2 TB
优势:
- 只需执行少量命令即可增加表空间。
坏处:
我们需要执行重组,这将需要大量停机时间。
除非我们重新组织,否则表空间的增加不会显示效果
创建一个新的单独 (2 TB) 表空间并使用过程或使用插入选择语句将 LARGEHISTORY 表从旧表空间移动到新表空间
优势:
只需执行少量命令即可创建新表空间。
该表可以安全地移动到新的表空间。
坏处:
应该使 LARGEHISTORY 脱机以确保在迁移完成之前没有事务。
复制 50 GB 的数据可能需要大量停机时间。程序可能会失败,因为它可能无法处理如此庞大的数据。
插入选择语句可能不适用于如此庞大的数据。
注意:最新版本的 DB2 具有在不停机的情况下将表从旧表移到新表的特性。
归档或修剪旧数据
优势:
- 可以使用预定的作业轻松完成。
坏处:
旧数据会下线,如果需要获取报告需要人工干预。
所有现有报告都将受到影响并需要更改。
我们将需要经常执行 reorg 以优化表和表空间以提高性能。
在新表空间中新建表,并将旧表重命名为LARGEHISTORY_OLD
优势:
- 我们可以很容易地在新表中快速插入新数据。
坏处:
在检索时,我们需要在新旧表上使用 join/union 或创建一个新视图。
我们无法使用视图更新数据(除非使用物化视图,这很昂贵)
所有现有报告都将受到影响并需要更改。
如果您有更好的选择,请告诉我。到目前为止,我们正在考虑选项 1.1。对于选项 1.1,我不确定是否会对代码产生任何影响。