8. 确保所处理的表中数据分布和其他统计信息正确并反映当前状况
可以在各个指定表和关联索引上执行Runstats工具,这样就能确保所处理的表的数据分布和其他统计信息正确并且反映当前的最新状况。这个工具会在系统编目表中加载某个表和/或关联索引特性的有关信息。另外它还会提供数据分布信息,优化工具在选择访问路径时会查找这些信息。下面是Runstats工具提供的部分信息:
表大小(行数)
索引列的基数
某些列按值统计的行频率信息
表文件的物理特性
分区表按分区统计的信息
如果没有加载表统计信息,或者表统计信息已经过时,优化工具可能会选择并不特别适用于这些表的访问路径。这可能会影响性能。例如,如果一个表包含500万行,但Runstats是在表包含20万行时运行的,那么DB2仍然会认为这是一个小表(只有20万行数据),而对它包含500万行一无所知。
在系统编目表中,有一个名为STATSTIME的列,它会提供对这个表最后一次运行Runstats的准确日期和时间。如果这个列包含的值为0001-01-01-00.00.00.000000,则说明对这个表没有执行过Runstats,或者Runstats信息已经重置。对于DB2 LUW,如果从未运行Runstats,STATS_TIME将为null(关于Runstats的更多信息请参见第6章)。
下面是Runstats 要更新而且优化工具要查看的一些系统编目表:
SYSIBM.SYSCOLDIST
SYSIBM.SYSCOLDISTSTATS
SYSIBM.SYSCOLSTATS
SYSIBM.SYSCOLUMNS
SYSIBM.SYSINDEXES
SYSIBM.SYSINDEXPART
SYSIBM.SYSINDEXSTATS
SYSIBM.SYSTABLES
SYSIBM.SYSTABLEPART
SYSIBM.SYSTABLESPACE
SYSIBM.SYSTABSTATS
会对各个表生成以下统计信息:
所有表和索引都会有基本统计信息。
要为Where和Order By语句中常用的列生成统计信息。对于V8,运行Runstats时可以使用Column (All)作为参数。
要为数据偏斜(不均匀)的列生成频率值统计信息。
要为所有关联的(两个或多个)列生成关联统计信息。
要为所有存在区间偏斜和区间谓词的列生成直方图统计信息。