优化大表空间
Posted
技术标签:
【中文标题】优化大表空间【英文标题】:Optimizing large tablespace 【发布时间】:2014-06-04 16:04:57 【问题描述】:我们有一个非常大的表 LARGEHISTORY 表,其中包含数百万条记录。目前该表使用 50GB 的表空间,在 DB2 (DB2 v9.5.301.436) 中允许的最大表空间为 65GB。表增长得非常快,我们需要做一些非常快的事情来克服这个问题。
数据库:DB2 v9.5.301.436
我们已经想到的解决方案:
增加表空间大小,可以使用以下两个选项来实现:
将 LARGEHISTORY 的表空间从 65GB 更改为 2TB
优势:
只需要执行几个命令来增加表空间。缺点:
我们需要执行重组,这将需要大量停机时间。
除非我们重新组织,否则表空间的增加不会显示效果
创建一个新的单独 (2 TB) 表空间并移动 LARGEHISTORY 表 使用过程或使用插入选择语句从旧表空间到新表空间
优势:
只需要执行几个命令就可以创建一个新的表空间。
表可以安全地移动到新的表空间。
缺点:
应使 LARGEHISTORY 脱机,以确保在迁移完成之前没有事务。
复制 50 GB 的数据可能需要大量停机时间。程序可能会失败,因为它可能无法处理如此庞大的数据。
插入选择语句可能不适用于如此庞大的数据。
注意:最新版本的 DB2 具有无需停机即可将表从旧表移至新表的功能。
归档或修剪旧数据
优势:
可以使用计划作业轻松完成。缺点:
旧数据会下线,如果需要取报告需要人工干预。
所有现有报告都将受到影响,需要进行更改。
我们将需要经常执行重组以优化表和表空间以提高性能。
在新表空间中新建表,并将旧表重命名为LARGEHISTORY_OLD
优势:
我们可以非常快速地在新表中轻松插入新数据。缺点:
在检索时,我们需要在新旧表上使用 join/union all 或创建一个新视图。
我们无法使用视图更新数据(除非使用昂贵的物化视图)
所有现有报告都将受到影响,需要进行更改。
如果您有更好的选择,请告诉我。到目前为止,我们正在考虑选项 1.1。 对于选项 1.1,我不确定是否会对代码产生任何影响。
【问题讨论】:
百万记录不是很大。 【参考方案1】:使用表分区。它需要停机,但可以防止将来出现问题:http://www.ibm.com/developerworks/data/library/techarticle/dm-0605ahuja2/
您为每个时期(月、学期)创建一个表分区,并且您只需附加和分离分区。
您必须检查许可证(db2 版本)
【讨论】:
嗨,问题陈述是关于表空间而不是性能问题。表空间越来越耗尽,因此我没有考虑分区选项。 @Vinayak - 我相信大小限制(您提到的常规 4K 表空间的 65 GB)是每个表分区的。 @Vinayak,你可以在不同的表空间中放置不同的分区。因此,考虑到您描述的场景,范围分区是一种替代方案。 @Lennart,您能否提供有关如何在单独的表空间中创建分区的更多详细信息。 参见例如:ibmdatamag.com/2010/07/creating-and-using-partitioned-tables 该页面的一个示例:CREATE TABLE sales (sales_date DATE, sales_amt NUMERIC(5,2)) IN tbsp0, tbsp1, tbsp2, tbsp3 PARTITION BY RANGE (sales_date) (STARTING ‘1/1/2010’ ENDING ‘12/31/2010’ EVERY 3 MONTHS)
【参考方案2】:
create table t1
( ...
, sales_date date not null
check ( sales_date between '2012-01-01' and '2012-12-31' )
) in tblspc1 index in inxspc1 long in longspc1;
create table t2
( ...
, sales_date date not null
check ( sales_date between '2013-01-01' and '2013-12-31' )
) in tblspc2 index in inxspc2 long in longspc2;
create table t3
( ...
, sales_date date not null
check ( sales_date between '2014-01-01' and '2014-12-31' )
) in tblspc3 index in inxspc3 long in longspc3;
create view LARGEHISTORY as (
select ..., sales_date from t1
union all
select ..., sales_date from t2
union all
select ..., sales_date from t3
)
attach/detach partitions by recreate the view
【讨论】:
以上是关于优化大表空间的主要内容,如果未能解决你的问题,请参考以下文章