轻度扫描

在某些情况下,数据库服务器可以执行轻度扫描,这是一种可绕过缓冲池开销的大型数据表的顺序扫描。轻度扫描是用于执行大型数据表顺序扫描的最快方法。

对于顺序扫描,轻度扫描可提供优于缓冲池扫描的一些性能优势。这些扫描:
在以下这些条件下会发生轻度扫描:

轻度扫描不会在“游标稳定”隔离下发生。

当数据库服务器使用 RTO_SERVER_RESTART 配置参数时,轻度扫描自动为下一个要激活的检查点设置一个标志。

数据库服务器在系统目录表上不执行轻度扫描。

当 BATCHEDREAD_TABLE 配置参数已启用且表大于 1 MB 时,GBase 8s 可对压缩表、行数超过一页的表以及具有 VARCHAR、LVARCHAR 和 NVARCHAR 数据的表执行轻度扫描。然而,如果 BATCHEDREAD_TABLE 配置参数设置为 0(关闭),那么服务器无法对压缩表、行数超过一页的表以及具有 VARCHAR、LVARCHAR 和 NVARCHAR 数据的表执行轻度扫描。

提示: 如果在多个并发应用程序访问相同数据时发生锁定冲突,或者数据库服务器未预读取数据页面,那么可对压缩表、行数超过一页的表以及具有任何数据(包括 VARCHAR、LVARCHAR 和 NVARCHAR 数据)的表禁用轻度扫描。

要禁用这些轻度扫描,请将 BATCHEDREAD_TABLE 和 BATCHEDREAD_INDEX 配置参数的值设置为 0

您可以使用 SET ENVIRONMENT 语句的 IFX_BATCHEDREAD_TABLE 环境选项或 onmode -wm 命令更改会话的 BATCHEDREAD_TABLE 配置参数的值。可以使用 onmode -wf 命令更改 ONCONFIG 文件中的 BATCHEDREAD_TABLE 的值。

要查看有关当前轻度扫描的信息,请运行 onstat -g scn 命令。

如果您有长时间运行的扫描,且启用了 BATCHEDREAD_TABLE 配置参数或 IFX_BATCHEDREAD_TABLE,那么您可运行 onstat -g scn 命令来检查扫描进度,以确定扫描将耗费多长时间才能完成,并查看该扫描是轻度扫描还是缓冲池扫描。

如果您有长时间运行的扫描,那么您可以查看 onstat -g scn 命令输出来检查扫描进度,以确定扫描将耗费多长时间才能完成,并查看该扫描是轻度扫描还是缓冲池扫描。

以下示例显示了轻度扫描的 onstat -g scn 的部分输出。Scan Type 字段中的词语 Light 确定了扫描为轻度扫描。

SesID  Thread Partnum  Rowid  Rows Scan'd  Scan Type  Lock Mode  Notes
17     48     300002   207    15           Light                 Forward row lookup

数据库服务器不对索引执行轻度扫描。