DB2 9.7 和 SAP
IBM DB2 for Linux, Unix, and Windows V9.7(简称 DB2 9.7)是 IBM 在 Linux,Unix 和 Windows 平台上的企业级数据库产品 DB2 for LUW(SAP 对应代码为 DB6)的最新版本。此版本已经在 2009 年 6 月正式被 IBM 官方发布,在 DB2 V9.5 的基础上进行了很多方面的改进,并且根据企业实际 IT 应用领域的需求提供了多种新特性,这些改进和新特性有助于 IBM DB2 的客户和合作伙伴更好的使用 DB2 服务自己的不断变化和成长的业务需求,以及更好的节省信息资源和维护成本,从而来降低企业 IT 运营的所有权总成本(TCO)。
作为全球最大的企业应用软件提供商,SAP AG(下文简称 SAP)是 IBM DB2 最重要和紧密的合作伙伴之一。在 SAP 位于德国 walldorf 的总部和 IBM DB2 的研发中心多伦多实验室都有 IBM 和 SAP 共同组建合作的研发和集成、支持团队,双方在系统研发,产品集成,技术创新和客户支持方面始终保持无缝的合作,并在 2005 年携手推出“专为 SAP 优化的 DB2”版本 DB2 UDB V8.2.2,帮助客户更加轻松地配置运行在 DB2 上的 SAP 解决方案,并提高 DB2/SAP 系统的性能,稳定性和可用性。在这个标志双方完美合作的里程碑式的版本之后,DB2 将更多专为 SAP 优化的特性集成到自身的通用数据库版本内,并在后续 DB2 版本的开发过程中,将对 SAP 解决方案的优化和支持容纳其中,使得每个新版本或者补丁在发布之时,就提供了对 SAP 应用的所有新特性。同时,在 IBM 的最新版本的 DB2 产品或者补丁正式发布之后,就立即对其进行 SAP 认证测试,以使 SAP 客户能在第一时间就能享受到 DB2 的最新特性和功能,同时确保 SAP 客户使用这些新特性的安全性和可靠性。
2009 年 8 月,在 IBM 正式发布 DB2 9.7 数周之后,IBM 和 SAP 就共同完成了对它的扩展认证测试并将其针对所有 SAP 产品发布给 SAP 客户,此版本现在可以通过 SAP Service Marketplace 下载。相对于之前的 DB2 V9.5 版本而言,DB2 9.7 主要在以下几个方面对 SAP 产品客户提供了更好的支持:更全面的压缩;可管理性的增强;性能和安全性的提高;更便捷的监控等,下面将逐个进行简单的介绍。
索引压缩
DB2 从 V9 开始就提供了行压缩(Row Compression)的功能,对表数据进行深度压缩,以降低存储空间要求、改进 I/O 效率以及允许迅速访问磁盘中的数据。在 9.7 版本中,又添加了索引压缩的功能,加上下一节将提到的临时表压缩等,这些深度压缩特性能够非常显著地降低数据库的存储需求。根据部分 SAP 客户应用 DB2 9.7 的测试数据统计,索引压缩率普遍超过 50%,部分索引可以达到 85% 以上,对整个 SAP 数据库的压缩率,也由单纯数据压缩的 40% 左右,提升到 65% 左右。
对 SAP ERP 或者 BW 客户而言,系统中经常有海量的数据,某些表的大小能够达到或者超过数百 GB,相关的索引占用的存储空间也十分惊人。与行压缩类似,索引压缩功能不仅减少了对存储空间的需求,同时也减轻了对数据传输的 I/O 压力,提高了 SAP 系统的缓冲池命中率(hit ratio)。如果想对某个索引启用压缩特性,则需要将此索引的压缩标记设置为’ YES ’,语法如下:
ALTER INDEX <IndexName> COMPRESS YES
然后对这个索引进行在线或者离线重组后,即完成对此索引的压缩。
针对索引压缩,数据库管理器可以使用不同的压缩技术,比如 RID 列表压缩(RID List Compression)和前缀压缩(Prefix Compression)。对 SAP 系统来说,此特性被 SAP R/3 4.6D 及其之后的版本完全支持。在下面两种情况下,索引的压缩特性是自动启用的:
基于 DB2 9.7 安装了一个新的 SAP 系统,而且此索引的对应表的压缩是启用的。
当从一个较前 DB2 版本升级到 9.7 之后,如果此索引是在数据库升级之后生成的,并且其对应的表的压缩是启用的。
SAP 提供了多种工具,包括 DB2 脚本或 SAP 程序来帮助用户单个或者批量手动启用索引压缩,将之前未使用压缩的表和索引进行深度压缩。但需要注意的是,目录索引和 MDC 块索引等无法使用压缩功能。
临时表压缩
在 DB2 9.7 中,系统临时表和用户临时表也可以被压缩,这个新特性使得用户在不损失性能的情况下进一步降低存储成本,甚至在一些大规模排序操作中,可以提高查询性能,这是由于:
减少了大规模排序中的 I/O 数据传输。
更多的排序操作可以在缓冲池中进行。
这个特性同样被 SAP R/3 4.6D 及其以上版本所支持,并且是默认启用的。
图 1. 临时表压缩原理图
内联 LOBs
通常,DB2 使用大对象(LOB)数据类型存储类型为 BLOB, CLOB 和 DBCLOB 的大对象数据类型,在常规表数据中存储描述符,指向对应大对象所保存的位置。在 DB2 9.7 中,引入了内联 LOBs(inline LOBs)的概念。当 LOB 小于指定大小时,LOB 将存储在基本表行(而不是单独的 LOB 存储对象)中。超出指定大小的 LOB 仍以透明方式存储在 LOB 存储对象中。
如果大部分时间使用小 LOB,那么对于执行查询、插入、更新或删除 LOB 的任何操作而言,基本表行存储提供更好的性能,原因是需要的 I/O 操作较少。如果还使用数据行压缩,那么会压缩 LOB,这会降低存储空间要求并提高 LOB 的 I/O 效率。因为这些优点,SAP 从 7.00 版本开始也对 DB2 9.7 更改了 ABAP(Advanced Business Application Programming)数据字典相关数据类型的对应关系,之前使用 LONG VARCHARs 的表记录转为使用 LOBs 类型。
表 1. SAP 使用的 DB2 LOB 数据类型
ABAP DDIC Type | Non-Unicode | Bytes in data page | Unicode |
LCHR | CLOB(32K) LOGGED | ≤ 120 | CLOB(99K) LOGGED |
LRAW | BLOB(32K) LOGGED | ≤ 120 | BLOB(32K) LOGGED |
STRG | CLOB(1G) LOGGED | ≤ 252 | DBCLOB(512M) LOGGED |
RSTR | BLOB(1G) LOGGED | ≤ 252 | BLOB(1G) LOGGED |
基于 DB2 9.7 安装的新系统,SAP 将会默认使用内联 LOBs。对从之前版本升级到 9.7 的系统,已存在表的 LOBs 类型数据,只有在更新或者新插入记录的时候,才会存储到基本表行内。如果需要将已存在表的所有 LOBs 都以内联形式存储,则必须执行表重组。
增强的自动存储管理
DB2 的自动存储(Automatic Storage)极大的减少了数据库管理的工作量,并且完全集成于 SAP 安装和 DBA 控制台(DBA Cockpit)中,在 DB2 9.7 中,自动存储功能得到了进一步加强,更加灵活易用。
此前,DB2 无法更改已经生成的数据库或者表空间的自动存储属性,在 9.7 中,可以使用 ALTER DATABASE SQL 语句来讲未启用自动存储的数据库转化为自动存储数据库,而且可以使用 ALTER TABLESPACE SQL 语句将已存的 DMS 表空间转化为自动存储表空间,以及使用 ALTER DATABASE SQL 和新的 DROP STORAGE 选项来在线删除存储路径。
例如,下面 SQL 语句可以将一个非自动存储数据库转换为自动存储数据库,SQL 语句中新添加的路径将用来作为数据库的存储路径,一旦语句执行完成,此数据库的自动存储即被启用。
ALTER DATABASE <DatabaseName>
ADD STORAGE ON <Path1> [,<Path2>,...,<Pathn>]
存储空间回收
DB2 9.7 提供了与以往不同的对象寻址机制去寻找数据对象所在的页面,这种新的机制使得数据库系统能够轻而易举地减少表空间的大小,非常便捷地将不再使用的存储空间回收,包括降低表空间的高水位(High Water Mark,HWM),将高水位之下的未使用空间还给文件系统。SQL 语句 ALTER TABLESPACE 与 REDUCE 选项配合使用即可达到此目的。但是由于 DMS 表空间和自动存储表空间的内在差异,此语句在使用上面也有所不同。
对于自动存储器空间,REDUCE 选项具有子选项,可用来指定是否将存储空间缩小最大可能的量或缩小当前表空间大小的某一百分比。其命令形式为:
ALTER TABLESPACE <TablespaceName> REDUCE [ <size>| MAX | STOP ]
DMS 表空间有所不同,需先将 ALTER TABLESPACE 语句与 LOWER HIGH WATER MARK 选项一起使用,然后将 ALTER TABLESPACE 语句与 REDUCE 选项及关联容器操作子句配合使用。具体语法为:
ALTER TABLESPACE <TablespaceName> LOWER HIGH WATER MARK [ STOP ]
ALTER TABLESPACE <TablespaceName> REDUCE …
对于在 DB2 9.7 中新创建的 DMS 或者自动存储表空间,回收存储空间是默认启动的,而且它是一个在线操作,不会影响 SAP 系统的运行。并且此功能可通过 SAP 中的 DBA 控制台来监控和管理,不过需要将相关 SAP 的支持包(Support Package)升级到相应级别。
可以通过以下 SQL 语句来查看系统中有哪些表空间已经启动可回收存储器:
SELECT tbsp_name FROM TABLE (MON_GET_TABLESPACE('',-2)) AS T
WHERE reclaimable_space_enabled = 1
在升级到 DB2 9.7 之前就已经生成的表空间并不被此特性支持,在 SAP 系统中,如果需要将此类表空间转化为支持可回收存储,可以使用 SAP 中的工具 DB6CONV 来将此表空间所有表转移到一个新