BLU Acceleration 是 DB2 10.5 最新特性,与传统的行存储数据方式不同,数据是按照列来进行组织存储的,即采用列式存储。BLU 除了列存储表特性外,它的数据跳读,SIMD 和类哈弗曼的压缩算法等特性方便在内存中完成数据处理,简化并且加速了数据分析的工作量。同时不再需要索引、MQT 等,这样易于实施并可以自行调优,提高了 CPU 的使用率,以及降低了 IO。
IBM 最新推出的管理多种平台数据库的工具 IBM Data Server Manager(以下简称 DSM), 既可以针对对象做一系列操作,也可以修改数据库实例层面的参数。所以本文都在此工具上操作,并以实例开始。
IBM DB2 10.5 支持 BLU,但安装完后默认没有打开 BLU 设置的。我们可以通过 DSM 来完成设置。首先选中实例,会看到配置 BLU 选项。
如果是在 DB2 端直接配置,首先确认实例没有打开 BLU 配置,执行以下命令:
db2set -all
在结果中查看是否有“DB2_WORKLOAD=ANALYTICS”。如果还没有 BLU 设置,执行 DB2 命令:
db2set DB2_WORKLOAD=ANALYTICS
配置完成后再次确认。此时,该实例下的数据库都是支持列存储的。
完成以上配置后,该实例已支持列存储。而且创建的数据库默认是行存储的,具体如下:
创建完数据库后,查看其配置,可以看到是默认行存储的:
我们可以通过创建一个默认组织的表来确认。同一实例下的其他数据库比如 T1,保持原有默认设置,也就是默认是行存储的。
此时,如果想使用列存储表,在创建表时选择“组织”为“Column”即可。
如果想修改当前数据库为默认列存储,可以直接修改:
这是及时生效的,可以修改完后再次打开配置页面确认。
如果是在 DB2 端设置,过程如下:
查看数据库配置中的 DFT_TABLE_ORG 选项,如果值为“ROW”则为默认行存储,“COLUMN”表示默认列存储。
db2
get db cfg|grep DFT_TABLE_ORG
执行以下命令来改为列存储:
db2 update db cfg for overhead using dft_table_org column
创建表时不使用默认的组织,选择为“Row”,则该表为行存储表。
此时默认就是列存储表,当然,也可以选择组织为 column。
由上可以看出 DFT_TABLE_ORG 选项控制的是数据库默认存储设置。Row 表示默认行存储,column 就是默认列存储。而且该设置修改是及时生效的。此类数据库级别的修改更新可以在 DSM 产品中跟踪查看。可以清晰看出参数 DFT_TABLE_ORG 的变化情况,从而可以判断出每个瞬间段创建的默认表的类型。
事实上,很多时候我们会同时管理多个数据库,如果要做更新修改时,会先选一个测试库或一个样库来处理。处理好后先确认更新修改成功在去配置其他数据库。面对几十或上百个数据库时,创建表或打开配置信息列表产看显然不再十分适用。创建表需要更多时间而且浪费存储空间,配置信息列表只能看当前数据库的配置详细信息,但更多情况下需要在测试库或样库与生产库之间做对比,既包括数据库级别的配置也会详细到数据库对象级别的比较。那么,这种情况下,我们可以运用 DSM 的“比较配置”功能来完成。
“比较配置”也是在“管理”菜单下,进入到页面后,先选择要比较的对象,此次实验我们要比较文中用到的数据库 T3 和 T1。
选中一个数据库后,设置为比较的“源”如下图,我们这里用 db2inst3 下的 T1 作为源数据库:
然后再选中要与源比较的数据库,我们选择 db2inst3 下的 T3 与 T1 比较,选中 T3 后会自动出比较结果:
我们只关注不同点,也就是我们关注的数据库关于默认存储 DFT_TABLE_ORG 的设置,点开不同点后结果如下图:
如此,T3 数据库默认存储是列存储,T1 数据库保持原有行存储的设置。而且,他们同属 db2inst3 实例。
总结来看,要在一个实例下并存行存储和列存储,首先设置参数 db2set DB2_WORKLOAD 来支持 BLU。然后设置数据库默认存储 DFT_TABLE_ORG,ROW 为默认行存储,COLUMN 为默认列存储,此时同时支持行存储表和列存储表。此过程中可以借助 DSM 来跟踪比较数据库的配置以方便部署实施。