在第一个测试中,我们顺序插入 100,000 个具有或不具有索引的文档,像许多 OLTP 应用程序那样在每个文档之后提交。图 1 中的结果显示了 XML 和 CLOB 列插入之间的相对占用时间(越低越好)。将 XML 插入的占用时间用作比较基线 (100%),维护 6 个 XML 索引仅需很小的开销(在我们的场景中是 5%)。
图 1:比较 XML 和 CLOB 列的单用户插入性能

向 CLOB 列插入相同的 XML 数据约占用一半的时间(53%)。这是因为避免了 XML 解析和对 XML 数据的进一步处理。简单地说,XML Extender “索引表”对应 CLOB 列,真正的 XML 索引对应 XML 列。在插入时维护索引表需要 XML 解析和额外的关系插入,因为选择的 XML 元素和属性值是分别提取和存储的。因此,插入占用时间至少等于 pureXML 插入的占用时间,在我们的场景中甚至高出了 23%。。
图 1 中的试验对 DB2 表空间使用了 no file system caching 选项。如果您允许 DMS 表空间容器使用文件系统缓冲(图 2),那么 XML 插入性能仅有少量改进,而 CLOB 插入性能却会下降。因为 CLOB 插入使用直接写入的方式,所以无需文件系统缓存,而仅有纯开销。然而,如果不涉及 XML 解析,那么文件系统缓存能够帮助提高对 CLOB 列的读操作。
图 2:文件系统缓存对 XML 和 CLOB 列插入的影响(无索引或索引表)

单用户数据库应用程序非常少见,因此考察并发工作负载的性能行为十分重要。我们将插入测试修改为使用 10 个各自具有到数据库的独立连接的并发线程,每个线程连续插入 10,000 个文档。 图 3 显示增加的工作负载密度大大影响了 CLOB 性能。虽然 CLOB 插入的速度在单用户测试中是 XML 插入的两倍(图 1),但是它们在多用户测试中却慢了两倍(207%)。这是因为 CLOB 插入从并行性中的获益不如 XML 列插入多。随着并发程度的提高,XML 列缓冲的插入比 CLOB 的并发直接写入更具伸缩性。
图 3:XML 和 CLOB 列的多用户插入性能比较

图 4 表明并发性加速对 XML 列的作用要远远高于对 CLOB 列的作用。将单用户 XML 插入用作 100% 基线,我们的系统和配置允许 10 个并发插入流在 18% 的时间内插入相同的 100,000 个文档,速度快了 5 倍。CLOB 插入无法从并发性中获得相同的益处,是基线的37%,仅是非并发 CLOB 插入的 1.4 倍。
图 4:XML 和 CLOB 列插入的并发加速

我们还使用了 1000、5000、10,000 和 50,000 个文档进行了全部这些插入测试。正如所料,CLOB 和 XML 列占用的插入时间和插入的文档数成线性比例。因此为了简便起见,我们省略了相应的图表。



