优化大型表空间

时间:2014-06-04 16:04:58

标签: sql database optimization db2 tablespace

我们有一个非常大的表LARGEHISTORY表,它有数百万条记录。目前,该表使用50GB的表空间,DB2中允许的最大表空间为65GB(DB2 v9.5.301.436)。表格增长非常快,我们需要做很快的事情来克服这个问题。

数据库:DB2 v9.5.301.436

我们已经解决过的解决方案:

  1. 增加表空间大小,可以使用以下两个选项来实现:

    1. 将LARGEHISTORY的表空间从65GB改为2 TB

      优势:

      • 只需要执行少量命令来增加表空间。

      缺点:

      • 我们需要执行reorg,这需要很长的停机时间。

      • 除非我们进行重组

      • ,否则表空间的增加不会显示效果
    2. 创建一个新的独立(2 TB)表空间并移动LARGEHISTORY表 使用过程或使用insert select语句从旧表空间到新表空间

      优势:

      • 只需要执行少量命令即可创建新的表空间。

      • 可以安全地将表移动到新的表空间。

      缺点:

      • LARGEHISTORY应该离线以确保在迁移完成之前没有交易。

      • 复制50 GB的数据可能需要大量的停机时间。程序失败的可能性,因为它可能无法处理如此庞大的数据。

      • 插入select语句可能不适用于如此庞大的数据。

      注意:最新版本的DB2具有将表从旧表移动到新表而无需停机的功能。

  2. 存档或修剪旧数据

    优势:

    • 可以使用预定作业轻松完成。

    缺点:

    • 旧数据将脱机,如果需要提取报告,我们需要手动干预。

    • 所有现有报告都会受到影响,需要更改。

    • 我们需要经常执行reorg以优化表和表空间以提高性能。

  3. 在新表空间中创建新表并将旧表重命名为LARGEHISTORY_OLD

    优势:

    • 我们可以非常快速地在新表中轻松插入新数据。

    缺点:

    • 在检索时,我们需要在旧表和新表上使用join / union all或创建新视图。

    • 我们无法使用视图更新数据(除非使用昂贵的物化视图)

    • 所有现有报告都会受到影响,需要更改。

  4. 如果您有更好的选择,请告诉我。截至目前,我们正在考虑选项1.1。 使用选项1.1我不确定是否会对代码产生任何影响。

2 个答案:

答案 0 :(得分:1)

使用表分区。它需要停机时间,但它可以防止将来出现问题:http://www.ibm.com/developerworks/data/library/techarticle/dm-0605ahuja2/

您为每个句点(月,学期)创建一个表分区,并且只需附加和分离分区。

您必须检查许可证(db2 edition)

答案 1 :(得分:0)

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