DB2® 优化器使用目录统计信息来确定查询的最佳存取方案。过期或者不完整的表或索引统计信息可能会导致优化器选择并非最佳的方案,从而导致查询执行速度下降。但是,决定要为给定的工作负载收集哪些统计信息是很复杂的事情,使这些统计信息保持最新也是一项很花费时间的任务。
通过使用自动收集统计信息功能(这是 DB2 的自动表维护功能的组成部分),可以让数据库管理器确定是否需要更新统计信息。可以使用实时统计信息(RTS)功能在编译语句时以同步方式执行自动收集统计信息操作,也可以启用 RUNSTATS 实用程序以便在后台运行此程序以执行同步收集。虽然可以在实时收集统计信息功能处于禁用状态时启用后台收集统计信息功能,但必须启用后台收集统计信息功能才能执行实时收集统计信息功能。缺省情况下,当您创建新的数据库时,就会启用后台自动收集统计信息功能 auto_runstats 和实时自动收集统计信息功能 auto_stmt_stats。
为配置自动统计信息收集,您可以使用 IBM® Data Studio V3.1 或更高版本中提供的任务助手。任务助手可以指导您执行以下过程:设置选项、查看自动生成的命令以执行任务以及运行这些命令。有关更多详细信息,请参阅使用任务助手管理数据库。
启用实时收集统计信息功能之后,还可以使用一些元数据来生成统计信息。生成表示派生或创建统计信息,而不是作为正常 RUNSTATS 活动的一部分来收集统计信息。例如,如果知道一个表中的行数、页大小和平均行宽,那么可以知道该表中包含的行数。在某些情况下,并未真正派生统计信息,而是由索引和数据管理器维护统计信息,并且可以直接将这些统计信息存储在目录中。例如,索引管理器将在每个索引中维护叶子页数和层数。
查询优化器根据查询需求和表更新活动数量(更新、插入或删除操作的数目)来确定统计信息的收集方式。
实时收集统计信息功能能够提供更及时更准确的统计信息。准确的统计信息可以产生更好的查询执行方案并提高性能。未启用实时收集统计信息功能时,将每隔两小时执行一次异步收集统计信息操作。要为某些应用程序提供准确的统计信息,此收集频率可能不够高。
最多可以同时处理两个异步请求,但必须针对不同的表处理这些请求。一个请求必须由实时收集统计信息功能发起,而另一个请求必须由异步收集统计信息检查操作发起。
尽管实时收集统计信息功能旨在使收集统计信息的开销降至最低,但是请先在测试环境中尝试使用此功能,以确保不会对性能产生负面影响。对某些联机事务处理 (OLTP) 方案使用此功能可能会对性能产生负面影响,对查询运行时间设置了上限的情况下尤其如此。
对常规表、具体化查询表 (MQT) 和全局临时表执行实时同步统计信息收集操作。不会针对全局临时表收集异步统计信息。无法通过自动维护策略工具从实时统计信息中排除全局临时表。
以手动方式修改表统计信息时,数据库管理器假定您现在负责维护其统计信息。为了让数据库管理器维护已经以手动方式更新其统计信息的表的统计信息,请使用 RUNSTATS 命令来收集统计信息,或者在使用 LOAD 命令时指定收集统计信息。在 V9.5 之前创建并且在升级前已手动更新其统计信息的表不受影响,其统计信息将由数据库管理器自动维护,直到您以手动方式更新这些统计信息为止。
在分区数据库环境中,将在单个数据库分区中收集统计信息然后进行推测。数据库管理器始终在数据库分区组的第一个数据库分区中收集统计信息(同步和异步)。
至少在数据库激活 5 分钟之后才会执行非实时统计信息收集活动。
将对静态和动态 SQL 执行实时统计信息处理。
已使用 IMPORT 命令截断的表将自动重组为具有旧统计信息。
对于已收集其统计信息的表,同步和异步自动收集统计信息操作将使引用了这些表并已进行高速缓存的动态语句失效。这样做是为了能够使用最新统计信息来重新优化已进行高速缓存的动态语句。
在取消激活数据库的情况下,“以异步方式自动收集统计信息”操作可能会中断。如果未使用 ACTIVATE DATABASE 命令或 API 显式激活此数据库,那么在最后一个用户与此数据库断开连接时,就会取消激活此数据库。如果操作中断,那么可能会将错误消息记录在 DB2 诊断日志文件中。为了避免中断“以异步方式自动收集统计信息”操作,请显式激活此数据库。
不会对仅仅使用说明工具进行说明(而未执行)的查询进行实时处理。下表概述了 CURRENT EXPLAIN MODE 专用寄存器具有不同值时的行为。
| CURRENT EXPLAIN MODE 值 | 是否考虑实时收集统计信息 |
|---|---|
| YES | 是 |
| EXPLAIN | 否 |
| NO | 是 |
| REOPT | 是 |
| RECOMMEND INDEXES | 否 |
| EVALUATE INDEXES | 否 |
DB2 V9.5 引入了统计信息高速缓存,以便使以同步方式收集的统计信息可用于所有查询。此高速缓存是目录高速缓存的一部分。在分区数据库环境中,统计信息高速缓存仅存在于目录数据库分区中,即使每个数据库分区都有目录高速缓存也是如此。启用实时收集统计信息功能之后,目录高速缓存需求更高。如果启用了实时收集统计信息功能,那么应考虑调整 catalogcache_sz 数据库配置参数的值。
如果同步统计信息收集操作无法收集统计概要文件中指定的所有统计信息,那么将提交异步收集请求。
下列各节说明了自动收集统计信息的不同运行特征。