可使用含统计信息的图形式计划来识别数据库性能问题。有关含统计信息的图形式计划的详细字段说明,请参见节点统计字段说明和优化程序统计字段说明。
可为根运算符节点显示影响查询执行的数据库选项和其它全局设置。
谓语的选择性(条件表达式)是指满足条件的行的百分比。估计的谓语的选择性为优化程序估计其开销提供了依据信息。准确的选择性估计值对于优化程序的正确运行至关重要。例如,如果优化程序错误地将某一谓语的选择性估计得很高(例如 5% 的选择性),但实际该谓语的选择性要低很多(例如 50%),那么性能就可能会受到损害。尽管选择性估计值可能不精确,但如果有较大偏差,则表明存在问题。
如果您确定查询主要部分的选择性信息不准确,则可以使用 CREATE STATISTICS 为列生成一组新的统计信息。在极少数情况下,您可能希望提供显式选择性估计,尽管这种方法会在以后更新统计信息时引发问题。
如果确定查询是跳过查询,则不会显示选择性统计信息。有关跳过查询的详细信息,请参见优化程序的工作原理和显式选择性估计。
选择性低的指示符在以下位置出现:
RowsReturned,实际值和估计值 RowsReturned 是结果集中的行数。RowsReturned 统计信息显示在树顶部根节点的表中。如果估计行数和实际行数之间存在很大的差异,则附加在此节点或子树上的谓语选择性可能不正确。
谓语选择性,实际值和估计值 查找 [谓语] 小标题以查看谓语选择性。有关读取谓语信息的信息,请参见在图形式计划中查看选择性。
如果谓语位于没有直方图的基列之上,则执行 CREATE STATISTICS 语句创建直方图可能会更正问题。请参见CREATE STATISTICS 语句。
如果选择性偏差仍然没有得到更正,则可以考虑随查询文本中的谓语一起指定选择性的用户估计值。
估计值来源 [统计信息] 窗格中的 [谓语] 小标题下还列出了选择性估计值的来源。
当谓语的选择性估计值来源是 [推测] 时,优化程序将没有可用的信息来确定谓语的过滤特性,这可能表示存在问题(比如缺少直方图)。如果估计值来源是 [索引] 并且选择性估计值不正确,则问题可能是索引有偏差;使用 REORGANIZE TABLE 语句整理索引碎片可能会有用。请参见REORGANIZE TABLE 语句。
如果高速缓存读取数([CacheRead] 字段)和高速缓存命中数([CacheHits] 字段)相同,则说明针对此 SQL 语句处理的所有对象都驻留在高速缓存中。若高速缓存读取数大于高速缓存命中数,则表明数据库正从磁盘读取表或索引页,因为这些表或索引页没有驻留在服务器的高速缓存中。在某些情况下(如散列连接),这正是您所需要的结果。而在另外一些情况下(如嵌套循环连接),较低的高速缓存命中率可能说明没有足够的高速缓存(缓冲池)来保证查询高效地执行。在这种情况下,提高服务器的高速缓存大小可能会有用。
有关高速缓存管理的详细信息,请参见增加高速缓存大小。
通常很难从查询执行计划中看出索引能否帮助提高性能。SQL Anywhere 中使用的一些基于扫描的算法可在不使用索引的情况下为许多查询提供极佳的性能。
[运行时] 和 [FirstRowRunTime] 的实际值与估计值在根节点统计信息中提供。如果节点存在 [运行时] 值,则只有这个值会显示在 [子树统计] 部分。
对 [运行时] 的解释取决于它出现在的统计信息部分。在 [节点统计] 中,[运行时] 是在只对此节点 执行期间对应运算符所花费的累积时间。在 [子树统计] 中,[运行时] 表示针对此节点下紧邻的整个运算符子树所花费的总执行时间。因此,对大多数运算符而言,[运行时] 和 [FirstRowRunTime] 是相互独立的测量值,应单独分析。
[FirstRowRunTime] 值是生成此节点中间结果的第一行所需要的时间。
如果表扫描或索引扫描的 [运行时] 值高于预期值,可通过执行 REORGANIZE TABLE 语句来提高性能。可使用 sa_table_fragmentation() 和 sa_index_density() 系统过程来确定表或索引是否产生了碎片。
有关详细信息,请参见REORGANIZE TABLE 语句和减少表碎片。
有关计划中使用的代码字的详细信息,请参见执行计划缩写。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |