简介
DB2 UDB for Linux®、UNIX® 和 Windows® 从 7.1 版开始就提供了 DB2 Spatial Extender,用于支持空间数据的存储、管理和修改。可以用专用于空间信息及其属性的结构来扩展已有的数据类型。
对于每个数据库系统,无论它支持的功能有多好,如果不能为构建在系统上的应用程序提供所要求的性能,就毫无价值。因此,性能调优是一项非常关键的任务。这不仅是数据库管理员的任务,也是应用程序开发人员的任务。DB2 UDB 已经提供了各种各样的工具来帮助调优和监视系统,例如“Configuration Advisor”和“Design Advisor”。它们都可以通过 Control Center 访问。
DB2 Spatial Extender 附带了一个 Index Advisor,可以用它来优化包含空间数据的列上定义的索引。然而,索引调优只是性能调优的一部分,还可以通过调整其他一些参数来提高空间操作的性能,例如 inline length、聚集或表空间类型。在下面几节中,我们将解释其中每个参数,并展示它们相对于未经修改的系统的效果。我们在一台配有 1.2 GHz CPU 和 1 GB 物理内存的 IBM ThinkPad T30 上进行了评测。操作系统是 SUSE Linux 9.3,所有评测都基于带 FixPak 9 的 DB2 UDB Version 8.2。请注意,我们没有执行实际的基准测试,而是集中在单个更改上,这样做只是为了展示特定调优选项的效果。您不能简单地将结果中显示的数据与其他系统进行比较。
基本性能调优
在任何性能调优过程中,第一步是为系统取得一个良好的基线。运行 DB2 Configuration Advisor 对该任务有所帮助(请参阅 参考资料 一节,获得对 DB2 Configuration Advisor 的介绍和关于调优数据库性能的信息)。可以从 Control Center 中通过右键单击一个数据库来启动 Configuration Advisor,如图 1 所示。
图 1. 启动 Configuration Advisor
您只需回答关于整个系统的一些简单问题,在任何情况下您应该都知道这些问题。下面是这些问题的一个简化列表,并提供了我们作出的选择,后者以 斜体 显示。从我们的选择中可以看出,我们从一开始就关注性能。您具有的场景可能要求不同的选择,例如对于锁和恢复方面的问题就是如此。
在回答这组问题之后,Configuration Advisor 将提供对建议修改项的总结。现在您可以立即应用建议的修改,或将一个任务保存在任务中心。您应该检查每一项修改,确定它们对系统是否有意义。如果想根据自己的需要进行调整,那么可以在任务中心创建一个包含配置修改的任务,然后按照自己的需要修改任务脚本。在系统上运行 Configuration Advisor 之后可以得到如图 2 所示的结果。最值得注意的是对缺省缓冲池大小的修改。增加缓冲池大小通常是提高系统整体性能的最重要的决定,因为它指定可以将多少数据缓存在内存中,从而减少对(较慢的)磁盘 I/O 的需要。
图 2. Configuration Advisor 的建议
其他更改主要针对将可用内存划分出一些必要的缓存,例如包缓存和编目缓存,或者调整短事务的设置(日志记录和排序)。除了减少辅助日志文件的决定之外,所有更改都将被接受,不需任何人为干涉。我们将辅助日志文件的数量设为 10,以避免在空间导入操作期间可能发生的问题。取决于您的系统以及在那组问题中给出的答案,您得到的建议可能不同。
性能比较
首先在一个新安装的系统上,在应用建议的配置更改之前,我们运行一组空间操作。这些操作的执行时间通过操作系统命令time 或 DB2 的db2batch 工具来测量。最后,我们清除数据库,应用 DB2 Configuration Advisor 建议的配置,并重复相同的操作。为得到比较可靠的结果,我们多次执行导入操作和查询,对测量到的时间取平均值。这些空间操作如下所示:
清单 1 展示了确切的步骤和它们产生的性能结果。可以在下载 一节中找到 SQL 脚本 test_config_advisor.sql。
清单 1. 未调优的数据库上的空间操作
$ time db2se import_shape testdb -fileName /home/stolze/europe/roads -srsName WGS84_SRS_1003 -tableName roads -createTableFlag 1 -spatialColumn shape -typeName ST_LineString -idColumn id -commitScope 1500 -messagesFile /home/stolze/import.msg GSE0000I The operation was completed suclearcase/" target="_blank" >ccessfully. real 2m19.086s user 0m0.050s sys 0m0.021s $ db2batch -d testdb -f test_config_advisor.sql -i complete -s on --------------------------------------------- Statement number: 1 SELECT id FROM roads WHERE db2gse.ST_Intersects(shape, db2gse.ST_LineString( 'linestring(10 50, 20 40)', 1003)) = 1 Prepare Time is: 0.000 seconds Execute Time is: 1.248 seconds Fetch Time is: 0.000 seconds Elapsed Time is: 1.248 seconds --------------------------------------------- Statement number: 2 CREATE INDEX roads_grid_index ON roads(shape) EXTEND USING db2gse.spatial_index(0.27, 0.54, 1.6) Elapsed Time is: 25.503 seconds --------------------------------------------- |
注意,测试系统使用的配置是次优的,因为导入的数据是从与数据库和数据库日志在同一个硬盘驱动器上的文件中读取的。因而,读操作与日志写和缓冲池中的数据页的写操作之间存在竞争。可能需要将各种特定于磁盘的任务分配到不同的文件系统上。当使用 DB2 Spatial Extender 导入工具导入 shapefile 文件时,建议不要尝试直接从 CD 装载数据,而是先将它复制到一个硬盘上。CD-ROM 驱动器不是很适合读 shapefile 文件的访问模式,因此整个操作的速度会急剧降慢。
在应用了 Configuration Advisor 的建议之后,重复前面列出的步骤就产生了清单 2 中的结果。可以看到,仅仅是导入操作的性能就提高了 11%,查询的速度快了 28%,甚至创建索引所花的时间也只有之前的 90%。所以不应当忽视最基本的性能调优。
清单 2. 调优后的数据库上的空间操作
$ time db2se import_shape testdb -fileName /home/stolze/europe/roads -srsName WGS84_SRS_1003 -tableName roads -createTableFlag 1 -spatialColumn shape -typeName ST_LineString -idColumn id -commitScope 1500 -messagesFile /home/stolze/import.msg GSE0000I The operation was completed successfully. real 2m2.848s user 0m0.051s sys 0m0.027s $ db2batch -d testdb -f test_config_advisor.sql -i complete -s on --------------------------------------------- Statement number: 1 SELECT id FROM roads WHERE db2gse.ST_Intersects(shape, db2gse.ST_LineString( 'linestring(10 50, 20 40)', 1003)) = 1 Prepare Time is: 0.000 seconds Execute Time is: 0.895 seconds Fetch Time is: 0.000 seconds Elapsed Time is: 0.895 seconds --------------------------------------------- Statement number: 2 CREATE INDEX roads_grid_index ON roads(shape) EXTEND USING db2gse.spatial_index(0.27, 0.54, 1.6) Elapsed Time is: 22.980 seconds --------------------------------------------- |