有一些方法可用来改进 RUNSTATS 性能。
要最大程度地减轻此实用程序对性能的影响,请完成下列步骤:
通过使用 COLUMNS 子句来限制对其收集统计信息的列。 许多列从不会被查询工作负载中的谓词引用,因此不需要这些列的统计信息。
限制当数据通常均匀分布时要收集分布统计信息的列。 与收集基本列统计信息相比,收集分布统计信息需要耗用更多的 CPU 和内存。 但是,要确定某个列的值是否均匀分布,必须要有现成的统计信息,否则必须查询数据。 此方法还假定数据在表被修改后将保持均匀分布。
通过使用页面或行级别表采样 (通过指定 TABLESAMPLE SYSTEM 或 TABLESAMPLE BERNOULLI 子句) 以及通过使用页面或行级别索引采样 (通过指定 INDEXSAMPLE SYSTEM 或 INDEXSAMPLE BERNOULLI 子句) 来限制处理的页数和行数。 从 10% 页级别采样开始,通过指定 TABLESAMPLE SYSTEM(10) 和 INDEXSAMPLE SYSTEM(10)。 检查统计信息的准确性以及系统性能是否已由于存取方案的更改而下降。 如果已降级,请改为通过指定 TABLESAMPLE BERNOULLI(10)来尝试 10% 行级别的样本。 同样,使用 INDEXSAMPLE 参数实验以获取正确的索引采样率。 如果统计信息的准确性欠佳,那么请增加采样量。 进行 RUNSTATS 页级或行级采样时,请对所连接的表使用相同的采样率。 这对于确保连接列统计信息具有相同的准确性级别而言至关重要。
通过在 CREATE INDEX 语句中指定 COLLECT STATISTICS 选项,在索引创建期间收集索引统计信息。 与创建索引后执行独立的 RUNSTATS 操作相比,此方法的速度要快。 此方法还确保创建新索引之后立即生成它的统计信息,以使优化器能够准确估算使用该索引的成本。
在执行 LOAD 命令时,通过指定 REPLACE 选项来收集统计信息。 与装入操作完成后执行独立的 RUNSTATS 操作相比,此方法的速度要快。 此方法还确保表在装入数据后立即就有最新的统计信息,以使优化器能够准确估算使用该表的成本。
在分区数据库环境中,RUNSTATS 实用程序将从单一数据库分区中收集统计信息。 如果对该表所在的数据库分区发出 RUNSTATS 命令,那么将从该位置收集统计信息。 否则,将对该表的数据库分区组中的第一个数据库分区收集统计信息。 为了获得一致的统计信息,请确保从同一个数据库分区中收集所连接的表的统计信息。