将数据预取至缓冲池

预取页是指,在应用程序需要一页或多页之前,提前从磁盘中检索那些页。

将索引和数据页预取至缓冲池可以缩短 I/O 等待时间,因此有助于提高性能。 此外,并行 I/O 也有助于提高预取效率。

有三个类别的预取:
  • 顺序预取在应用程序需要这些页之前,将连续的页读入缓冲池。
  • 提前读预取提前查看索引以确定 ISCAN-FETCH 和索引扫描操作访问的确切页并预取这些页。
  • 列表预取(有时称为列表顺序预取)高效地预取一组不连续的数据页。

智能数据预取这一方法会使用顺序检测预取或提前读预取,具体取决于数据集群的程度。 顺序存储数据页时,会使用顺序检测预取,而数据页集群程度不高时,使用提前读预取。 智能数据预取使数据库系统能够利用顺序页中存储的数据的潜在性能优点,它也允许高效预取高度集群的数据。 因为高度集群的数据不再有害于查询性能,所以这会降低对高成本操作(例如,表重组)的需求。

智能索引预取这一方法会使用顺序检测预取或提前读预取,具体取决于索引的密度。 顺序存储索引时,会使用顺序检测预取,索引的密度很低时,使用提前读预取。 智能索引预取使数据库系统能够利用顺序存储的索引的潜在性能优点,它也允许高效预取低密度索引。 智能索引预取降低了对高成本操作(例如,索引重组)的需求。

智能数据预取和智能索引预取仅适用于索引扫描操作,并且不支持 XML 索引、扩展索引和文本搜索文本索引。 扫描全局范围集群表索引期间,不能使用智能数据预取,因为它们是逻辑索引而不是物理索引。 而且,对于智能数据预取,如果 ISCAN-FETCH 扫描全局范围分区索引,那么不会使用数据提前读预取。 如果针对智能数据预取执行索引扫描期间对索引谓词求值,并且优化器确定符合该索引扫描资格的行不多,那么会禁用提前读预取。 也不能对范围集群表索引使用智能索引预取

注: 优化器确定应该对 ISCAN-FETCH 或索引扫描操作启用的数据或索引预取的类型。 以下是用于智能数据预取和智能索引预取的预取技巧类型:
  • 顺序检测预取
  • 提前读预取
  • 顺序检测预取和提前读预取

    对于此技巧,将启用顺序检测预取和提前读预取,这是缺省值。 在此技巧中,一开始会使用顺序检测预取直到达到非预取页数的阈值或(在某些情况下)超过优化器执行的 MAXPAGES 估算。 达到非预取页的阈值或超过估算的 MAXPAGES 时,将启用提前读预取。

但是,在某些情况下,优化器可能未选择任何预取技巧(如果针对标准关键字执行索引扫描),索引是唯一的,并且优化器针对索引扫描的估算页数 (MAXPAGES) 小于或等于 1。 在这种情况下,MAXPAGES 估算可能是可靠的,并且不需要预取。

预取数据页与数据库管理器代理程序读方法不同,后一种方法用于检索一页或少量连续页但只将一页数据传送给应用程序时的情况。

预取与分区内并行性

分区内并行性使用多个子代理程序来扫描索引或表,预取会对分区内并行性的性能产生重要的影响。 此类并行扫描将产生较高的数据使用率,从而要求较高的预取率。

并行扫描与串行扫描相比,预取不足的成本更高。 如果在串行扫描期间未进行预取,那么由于代理程序等待 I/O ,因此查询运行速度会更慢。 如果在并行扫描期间未发生预取,那么所有子代理程序都可能需要等待,而一个子代理程序等待 I/O。

在此上下文中,分区内并行性下的预取极为重要,因此会更为主动地执行;顺序检测机制允许相邻页之间有更大的间隔,以便可以将这些页视为顺序页。 这些间隔的宽度随着扫描中涉及的子代理程序数目的增加而增大。