提示 2:为了取得更好的 XML 性能,使用 DMS 和更大的页
数据库管理的表空间(DMS)可以比系统管理的表空间(SMS)提供更高的性能。对于关系数据是如此,对于 XML 的读和写访问更是如此。在 DB2 9 中,缺省情况下,新创建的表空间是 DMS。还建议将 DMS 表空间与自治存储一起使用,使 DMS 容器可以随需增长,而不需要人为干预。如果 XML 文档太大,一个表空间中的一个页面容纳不下,那么 DB2 就将该文档划分成多个区域,然后将它们分开存储到多个页面上。这一点对于应用程序而言是透明的,这也使得 DB2 可以处理 2 GB 的 XML 文档。
通常,每个文档划分成的区域越少,性能就越好,对于插入和全文搜索更是如此。如果一个文档大小超出了一个页面,每个文档分成的子块的数量取决于页宽(4KB、8KB、16KB 或 32KB)。表空间的页宽越大,每个文档划分成的子块数量就越小。例如,假设一个给定的文档要划分到 40 个 4KB 的页面上。那么,同样是这个文档,可以存储在 20 个 8KB 的页面上,或者存储在 10 个 16KB 的页面或 5 个 32KB 的页面上。如果 XML 文档远小于所选择的页宽,那么就不会浪费空间,因为多个小的文档可以存储在一个页面上。
经验法则是,为 XML 数据选择一个不小于平均预期文档大小的两倍而且不超过 32 KB 最大值的页宽。如果为关系数据和 XML 数据,或者为数据和索引使用单一的页宽,那么 32KB 的页宽对于 XML 数据而言可能有利,但是不利于关系数据和索引的访问。在这种情况下,16KB 或 8KB 的页宽对于两者而言都是较好的选择。
提示 3:必要时,如何将 XML 数据放入一个单独的表空间中
如果您做了性能分析,发现对于 XML 数据需要大的页宽,而对于关系数据或索引则需要小的页宽,那么可以使用不同的表空间来实现这一点。当定义一个表时,可以将 “long” 数据定向到一个具有不同页宽的单独的表空间中。long 数据包括 LOB 和 XML 数据。
下面的例子定义了两个缓冲池和两个表空间,一个表空间的页宽为 4KB,另一个表空间的页宽为 32KB。(注意,一个表空间总是要有一个缓冲池,且缓冲池要有一个匹配的页宽。)表 product 被分配到具有 4KB 页面的表空间 "relData"。它的所有列被存储在那个表空间中,只有 XML 列 "description" 存储在表空间 "xmldata" 中的 32KB 的页面上。
create bufferpool bp4k pagesize 4k;
create bufferpool bp32k pagesize 32k;
|
DB2 9 中的缺省表空间有所变化。除非显式指定,否则新创建的表空间都是具有较大行 ID 的 DMS。这意味着,一个具有 4KB 页面的表空间可以增长到 2TB,而不是 DB2 8 中的 64GB,具有 32KB 页面的表空间可以增长到 16TB,而不是 512GB。而且,每个页面 255 行的限制也去掉了,32KB 的页面上允许至多 2335 行。因此,每页的行数限制本身不再是为关系数据使用小型页面的理由。
总而言之,在为 XML 数据选择不同的表空间时,仍应按常理来考虑。更少的缓冲池和表空间,以及更少的页宽种类,可以导致更简单的物理数据库设计,从而更容易管理、维护和调优。因此,要避免引入多种页宽,除非您知道这样做确实可以带来性能好处。
提示 4:如何配置 DB2,以便快速地成块插入 XML 数据
DB2 9 支持两种将 XML 数据从文件系统转移到 DB2 表中的选项:插入和导入。从性能和调优的角度来看,这两种选项具有类似的特征,因为导入实用程序实际上是执行一系列的插入。不管是应用程序执行批量插入(可能通过并发插入线程),还是使用导入,下面的性能指南都适用:
要获得更多关于插入性能的指南,请参阅文章 “Tips for improving INSERT performance in DB2 Universal Database”(见 参考资料)。
总而言之,传统的插入和日志记录性能调优对于 XML 插入和导入仍然适用。如果将 ALLOW WRITE ACCESS 子句添加到每个导入命令中,则可以运行并行导入会话。
| 第1页: 理智选择 XML 文档的粒度 | 第2页: 使用 DMS 和更大的页 |
| 第3页: 使用新的快照监视器元素检查 XML 性能 | 第4页: 将文档过滤谓词放入 XMLEXISTS 中 |
| 第5页: 使用带参数占位符的 SQL/XML 语句 |