技术开发 频道

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

构建一个数据库受管存储环境并在其中进行测试

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

    要在 db2 命令窗口中运行这些脚本,可使用:

db2 –tvf scriptname.sql
            

    可以通过输入名称来运行批处理脚本(后缀为 .bat)。

操作说明

    首先需要使用数据库管理员 id 和密码登录到系统。确认 “Sample” 数据库已经存在,并且已经创建了 EXPLAIN 表。如果其中一项不存在,或者两者都不存在,那么必须先创建,因为本教程后面一直要用到它们。

    现在来修改 DBM 和 DB 配置,以进行这组练习。

  1. 使用以下命令更新数据库管理器配置:

    update dbm cfg using MAXAGENTS 200;
    update dbm cfg using NUM_POOLAGENTS 100;
    update dbm cfg using HEALTH_MON OFF;
    update dbm cfg using MON_HEAP_SZ 250;
    update dbm cfg using DFT_MON_TABLE ON;

    或者使用 udbmcfg.sql 脚本来设置数据库管理器参数。


  2. 使用以下命令更新 SAMPLE 数据库配置:

    update db cfg for sample  using SELF_TUNING_MEM OFF IMMEDIATE;
    update db cfg for sample using LOCKLIST 500 IMMEDIATE;
    update db cfg for sample using NUM_IOCLEANERS 2 IMMEDIATE;
    update db cfg for sample using NUM_IOSERVERS 5 IMMEDIATE;
    update db cfg for sample using MAXFILOP 256 IMMEDIATE;
    update db cfg for sample using LOGSEC OND 40 IMMEDIATE;
    update db cfg for sample using AUTO_TBL_MAINT OFF IMMEDIATE;
    update db cfg for sample using AUTO_RUNSTATS OFF IMMEDIATE;
    update db cfg for sample using AUTO_MAINT OFF IMMEDIATE;

    或者使用 udbcfg.sql 脚本来设置数据库参数。


  3. 使用以下命令修改缓冲池空间,以便能够将整个表装入内存:

    alter bufferpool IBMDEFAULTBP IMMEDIATE SIZE 10000;

    或者使用 alterbp.cfg 脚本来设置缓冲池。


  4. 现在创建两个 DMS 表空间 —— 一个用于数据,一个用于索引。

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

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

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

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

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


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

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

    "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 中)导入到 T1 中,替换已有的数据。
    2. 在带分布和索引的表 T1 上执行 RUNSTATS。
    3. 收集信息表 syscat.tables。
    4. 列出表空间的详细信息。

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

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


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

    INSPECT ROWCOMPESTIMATE TABLE
    NAME T1
    SCHEMA db2inst1
    RESULTS KEEP T1.raw;

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

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

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

现在对压缩数据重复上述过程。

  1. 再创建两个 DMS 表空间 —— 一个用于数据,另一个用于索引。

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

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

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

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

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

  2. 现在创建表 T2 并指定压缩。

  3. 使用脚本 crt2.sql 创建表 T2 和相关的索引,使它们与 T1 及其索引一样。

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

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

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

    比较问题 6 和 10 的结果。

0
相关文章