查看: http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0707schurr/
利用大型表空间和db2 version9.7 data row compression,每页可以存储更多的行,节省了磁盘空间。
DB2 中的行压缩特性可用于在表一级节省存储空间。其优点是节省容器空间,缩小备份镜像(从而减少备份时间),以及减少缓冲池中的页活动。可以为单个表激活行压缩。 进行行压缩时,会创建一个包含可重用模式的字典。对于这些模式,会存储一个指针。通过使用 DB2 INSPECT 命令可以估计每个表的压缩率。
1. 创建大型表空间
CREATE LARGE TABLESPACE LARGEGEHGAL32 PAGESIZE 32 K MANAGED BY DATABASE USING ( FILE 'C:\DB2\NODE0000\SQL00001\largegehgal32' 20000 ) BUFFERPOOL IBMDEFAULT32K
2. 创建表并在大型表空间中
CREATE TABLE TEST_EXCEPTION_MESSAGE like EXCEPTION_MESSAGE in LARGEGEHGAL32
3. 打开Command Line Processor(命令行处理器),把EXCEPTION_MESSAGE表中的数据insert into TEST_EXCEPTION_MESSAGE
DECLARE c1 CURSOR FOR SELECT * FROM EXCEPTION_MESSAGE
LOAD FROM c1 OF CURSOR INSERT INTO TEST_EXCEPTION_MESSAGE
4. 开启表的压缩功能
ALTER TABLE TEST_EXCEPTION_MESSAGE COMPRESS YES
6. 在压缩后,我们通常想知道表压缩后能节省多少空间,可以利用RUNSTATS命令来实现:
RUNSTATS ON TABLE GEH_ADMIN.TEST_EXCEPTION_MESSAGE
SELECT NAME, COMPRESSION, AVGROWSIZE, PCTPAGESSAVED, PCTROWSCOMPRESSED, AVGROWCOMPRESSIONRATIO, AVGCOMPRESSEDROWSIZE FROM SYSIBM.SYSTABLES WHERE NAME = 'TEST_EXCEPTION_MESSAGE'
7. 压缩表后,查看使用的页数
SELECT SUBSTR(a.tabname,1,10) AS table, PAGESIZE, b.CARD, b.npages , CASE WHEN (b.NPAGES > 0) THEN (b.CARD / b.NPAGES) ELSE -1 END AS ROWS_PER_PAGE, SUM(AVGCOLLEN) AVG_ROW_SIZE FROM SYSCAT.COLUMNS a, SYSCAT.TABLES b, SYSCAT.TABLESPACES c
WHERE a.tabschema = b.tabschema AND a.tabname = b.tabname AND b.tbspaceid = c.tbspaceid AND a.tabname = 'TEST_EXCEPTION_MESSAGE' GROUP BY a.tabschema, a.tabname, pagesize, card, npages