预读操作

对于顺序表或索引扫描,可以将数据库服务器配置为在处理当前页的过程中预读多页。数据库服务器将自动预读正在为查询处理的当前页的后面几页,除非禁用自动预读操作。预读使应用程序能够更快地运行,因为它们将花费更少的时间等待磁盘 I/O。

自动预读取在连续扫描数据记录期间请求将页面放入缓冲池高速缓存,这可在服务器检测到查询(包括 OLTP 查询和索引扫描)遇到 I/O 时提高查询的性能。

缺省情况下,数据库服务器将根据查询遇到来自磁盘的 I/O 的时间,自动确定何时发出预读请求以及何时停止。
  • 如果查询遇到 I/O,服务器将发出预读请求,以提高查询性能。因为预读请求通过对相对于 CPU 处理速度较慢的 I/O 处理进行补偿,可以极大地提高数据库处理的速度,所以使性能得到提升。
  • 如果查询大部分已进行高速缓存,那么服务器将检测到没有执行任何 I/O,因此不会预读。
使用 AUTO_READAHEAD 配置参数可更改查询的自动预读方式或禁用查询的自动预读。您可以:
  • 通过运行 onmode -wmonmode -wf 命令,动态更改 AUTO_READAHEAD 配置参数的值。
  • 运行 SET ENVIRONMENT AUTO_READAHEAD 语句以更改方式,或启用或禁用会话的自动预读。

顺序数据或索引读取期间,只要数据库服务器检测到有必要执行预读,就会执行预读。

onconfig 文件中的 RA_PAGES 参数指定数据库服务器执行预读时,要从磁盘或索引读取的页数。

RA_THRESHOLD 参数指定内存中导致数据库服务器执行另一个预读的未处理页的数量。例如,如果 RA_PAGES 设置为 10,且 RA_THRESHOLD 为 4,那么数据库服务器将在缓冲区中留有 4 个要处理的页时预读 10 个页。

可以使用 onstat -p 命令来查看数据库服务器读取和写入,并监视需要某个线程等待共享内存锁存器的次数。RA-pgsused 输出字段显示数据库服务器预读使用的页数,并监视数据库服务器对预读的使用。

使用 onstat -g rah 命令可显示有关预读请求的统计信息。