技术开发 频道

使用DB2 9多种系统的行压缩功能压缩数据库

构建一个 System Managed Storage 环境并在其中进行测试

    在本节中,您将构建一个环境,在此环境中可以使用 System Managed Storage(SMS)表空间 比较对表中的数据进行压缩和不进行压缩这两种不同的情况。用于填充表的数据放在一个定界 ASCII 文件中,该文件名为 data.del,位于子目录 DB2compression 下。所有脚本放在子目录 Section4 中。

操作说明

    使用数据库管理员 id 和密码登录到系统。

    现在创建两个 SMS 表空间 —— 一个用于数据,另一个用于索引。

  1. 为大小为 10MB 的容器创建一个页大小为 4KB 并由数据库管理的普通表空间 TSA,为其提供一个文件名(Windows 上为 C:\db2\node0000\TSA,Linux 上为 /home/db2inst1/db2inst1/NODE0000/TSA):

                    CREATE REGULAR TABLESPACE TSA
    PAGESIZE 4K
    MANAGED BY DATABASE
    USING ( FILE 'C:\DB2\NODE0000\TSA' 10M );
    or USING ( FILE '/home/db2inst1/db2inst1/NODE0000/TSA' 10M );

    创建另一个具有相同维的表空间 TSIA,用于存放索引:

    CREATE REGULAR TABLESPACE TSIA
    PAGESIZE 4K
    MANAGED BY DATABASE
    USING ( FILE 'C:\DB2\NODE0000\TSIA' 10M );
    or USING ( FILE '/home/db2inst1/db2inst1/NODE0000/TSIA' 10M );

    或者使用 crtsa.sql 脚本来创建表空间。

    现在创建表 TA 并指定不压缩(这个表是从 TCPH 基准中使用的一个表摘录出来的)。

  2. 使用脚本 crta.sql 创建包含下述列的表 TA 和相关的索引:

    "L_ORDERKEY"        INTEGER     NOT NULL ,
    "L_PARTKEY" INTEGER NOT NULL ,
    "L_SUPPKEY" INTEGER NOT NULL ,
    "L_LINENUMBER" INTEGER NOT NULL ,
    "L_QUANTITY" DOUBLE NOT NULL ,
    "L_EXTENDEDPRICE" DOUBLE NOT NULL ,
    "L_DISCOUNT" DOUBLE NOT NULL ,
    "L_TAX" DOUBLE NOT NULL ,
    "L_RETURNFLAG" CHAR(1) NOT NULL ,
    "L_LINESTATUS" CHAR(1) NOT NULL ,
    "L_SHIPDATE" DATE NOT NULL ,
    "L_COMMITDATE" DATE NOT NULL ,
    "L_RECEIPTDATE" DATE NOT NULL ,
    "L_SHIPINSTRUCT" CHAR(25) NOT NULL ,
    "L_SHIPMODE" CHAR(10) NOT NULL ,
    "L_COMMENT" VARCHAR(44) NOT NULL

        添加 “L_ORDERKEY” 和 “L_LINENUMBER” 上的一个惟一键以及 “L_PARTKEY” 和 “L_SUPPKEY” 上的另一个键。

        现在可以开始就表空间的使用情况进行第一个系列的分析。多次重复执行一组相同的动作,首先从少量的行开始,然后逐渐加大数量,直到完成整个表:

    1. 将所需的行从 data.del(在子目录 DB2Compression 中)导入到 TA 中,替换已有的数据。
    2. 在带分布和索引的表 TA 上执行 RUNSTATS。
    3. 收集信息表 syscat.tables。
    4. 列出表空间的详细信息。

  3. 针对以下数量的行运行 loadTA.sql:
    • 100 行
    • 1000 行
    • 10000 行
    • 整个表

    对于这些测试,只有 NPAGES 是有用的,因为压缩标志为 N,其他参数都为 0。

  4. 在分析过程中,使用 INSPECT 命令估计如果压缩 TSA 中的 TA,可以节省多少空间:

    INSPECT ROWCOMPESTIMATE TABLE
    NAME TA
    SCHEMA db2inst1
    RESULTS KEEP ta.raw;

    可以使用以下批处理文件和脚本文件:

    • insp1.bat 删除检查文件。
    • inspTA.sql 运行 INSPECT 命令。
    • insp2.bat 格式化和显示检查数据。

    注意:需要为 INSPECT 命令提供一个文件名(例如 ta.raw),用于存储结果。输出文件是一个二进制文件,与 db2diag.log 存储在相同的目录中。在不同操作系统上该路径可能有所不同:Linux 上为 db2dump,Windows 上为 …sqllib\instancename。需要使用 db2inspf 命令格式化该文件。

    现在对压缩数据重复上述过程。再创建两个 SMS 表空间 —— 一个用于数据,另一个用于索引。

  5. 为大小为 10MB 的容器创建一个页大小为 4KB 并由数据库管理的普通表空间 TSB,为其提供一个文件名(Windows 上为 C:\db2\node0000\TSB,Linux 上为 /home/db2inst1/db2inst1/NODE0000/TSB):

    CREATE REGULAR TABLESPACE TSB
    PAGESIZE 4K
    MANAGED BY DATABASE
    USING ( FILE 'C:\DB2\NODE0000\TSB' 10M );
    or USING ( FILE '/home/db2inst1/db2inst1/NODE0000/TSB' 10M );

  6. 创建另一个具有相同维的表空间 TSI2,用于存放索引:

    CREATE REGULAR TABLESPACE TSIB
    PAGESIZE 4K
    MANAGED BY DATABASE
    USING ( FILE 'C:\DB2\NODE0000\TSIB' 10M );
    or USING ( FILE '/home/db2inst1/db2inst1/NODE0000/TSIB' 10M );

    或者使用 crtsb.sql 脚本来创建表空间。

    现在创建表 TB 并指定压缩。


  7. 使用脚本 crtb.sql 创建表 TB 和相关的索引,使它们与 TA 及其索引一样。

        对表空间的使用情况重复上述分析过程。多次重复执行一组相同的动作,首先从少量的行开始,然后逐渐加大数量,直到完成整个表:

    1. 将所需的行从 data.del(在子目录 DB2Compression 中)导入到 TB 中,替换已有的数据。
    2. 重组数据并重新构建压缩字典。
    3. 在带分布和索引的表 TB 上执行 RUNSTATS。
    4. 收集信息表 syscat.tables。
    5. 列出表空间的详细信息。

  8. 针对以下数量的行运行 loadTB.sql:
    • 100 行
    • 1000 行
    • 10000 行
    • 整个表

    比较问题 4 和 6 的结果。

0
相关文章