不使用文件系统高速缓存的表空间
在 UNIX , Linux®和 Windows 上启用或禁用非缓冲 I/O 的建议方法处于表空间级别。
通过这种方法,可以启用或禁用特定表空间的非缓冲 I/O,同时避免依赖数据库的物理布局。 它还允许数据库管理器确定每个文件最适合使用哪种 I/O,缓冲的还是非缓冲的。
NO FILE SYSTEM CACHING 子句用于启用非缓冲 I/O,从而禁用特定表空间的文件高速缓存。 一旦启用了非缓冲 I/O,数据库管理器就会根据平台自动确定将使用直接 I/O(DIO)还是并行 I/O(CIO)。 由于使用 CIO 可以提高性能,所以只要支持 CIO,数据库管理器就会使用它;没有用于指定要使用哪一个的用户界面。
要获得无缓冲 I/O 的最大优势,可能需要增加缓冲池的大小。 但是,如果启用了自调整内存管理器并且缓冲池大小设置为 AUTOMATIC,那么数据库管理器将自调整缓冲池大小以获得最佳性能。 请注意,V9 之前未提供此功能。
要禁用或启用文件系统高速缓存,请在 CREATE TABLESPACE 或 ALTER TABLESPACE 语句中指定 NO FILE SYSTEM CACHING 或 FILE SYSTEM CACHING 子句。 如果未指定任一子句,那么将使用缺省设置。 在 ALTER TABLESPACE 的情况下,必须在应用新缓存策略前终止与数据库的现有连接。 在以下情况下,文件系统缓存设置可能会比预期更早应用:
- 当数据库打开的文件数接近但小于或等于配置参数 MAXFILOP 的值时。 在这种情况下,可以使用更改的文件系统缓存设置重新打开表空间容器文件。
- 文件系统缓存设置更改后,使用 LONGLOBDATA 启动新表重组时。 在这种情况下,文件系统缓存设置只影响表重组过程中执行的文件 I/O 操作。
注: 如果将属性从缺省值更改为 FILE SYSTEM CACHING 或 NO FILE SYSTEM CACHING ,那么没有将其更改回缺省值的机制。
这种启用和禁用文件系统高速缓存的方法对表空间级的 I/O 方式进行控制(是缓冲的还是非缓冲的)。
要确定是否已启用文件系统高速缓存功能,请在 MON_GET_TABLESPACE 表中查询表空间的 fs_caching 监视元素值。
- 在 UNIX , Linux和 Windows 上启用/禁用非缓冲 I/O 的备用方法
- 某些 UNIX 平台支持使用 MOUNT 选项在文件系统级别禁用文件系统高速缓存。 有关更多信息,请参阅操作系统文档。 但是,了解在表空间级和在文件系统级禁用文件系统高速缓存的差别很重要。 在表空间级,数据库管理器控制哪些文件将使用文件系统高速缓存打开。 在文件系统级,位于特定文件系统上的每个文件都不使用文件系统高速缓存打开。 某些平台 (例如, AIX® ) 在您可以使用此功能 (例如,读和写访问权的序列化) 之前具有某些需求。 虽然数据库管理器符合这些要求,但是如果目标文件系统包含并非来自数据库管理器的文件,在启用此功能之前,请参阅操作系统文档以获取任何要求。注: 现在不推荐使用的注册表变量 DB2_DIRECT_IO在 V 8.1 FixPak 4 中引入,在 AIX JFS2上,除长字段数据,大对象数据和临时表空间外,不会对所有 SMS 容器启用任何文件系统高速缓存。 在 V9.1 或更高版本中设置此注册表变量相当于使用 NO FILE SYSTEM CACHING 子句更改所有表空间、SMS 和 DMS。 但是,不推荐使用 DB2_DIRECT_IO,在以后的发行版中会移除此变量。 相反,您必须在表空间级别启用 "无文件系统缓存"。
- 在 Windows 上启用/禁用非缓冲 I/O 的备用方法
- 在以前的版本中,性能注册表变量 DB2NTNOCACHE 可用于禁用所有文件的文件系统缓存。 Db2® 文件的文件系统缓存,以便为数据库提供更多内存,从而增加缓冲池或分类堆。 DB2NTNOCACHE 和使用 NO FILE SYSTEM CACHING 子句之间的差别在于是否能够有选择地对表空间禁用高速缓存。 从 V9.5 起,由于 NO FILE SYSTEM CACHING 用作缺省值,所以除非显式指定了 FILE SYSTEM CACHING,否则在实例仅包括新近创建的表空间时,不需要设置此注册表变量来禁用整个实例上的文件系统高速缓存。
- 性能注意事项
- 非缓冲 I/O 主要用于提高性能。 不过,有时性能下降可能是由于(但不限于)缓冲池大小较小和文件系统缓存较小。 为提高性能,建议如下:
- 如果未启用自调整内存管理器,那么启用它并使用
ALTER BUFFERPOOL name SIZE AUTOMATIC将缓冲池大小设置为 AUTOMATIC。 这种方法允许数据库管理员对缓冲池大小进行自我调整。 - 如果不打算启用自调整内存管理器,那么以 10% 或 20% 作为增量增大缓冲池大小,直到性能提高为止。
- 如果不启用自调整内存管理器,请更改表空间以使用
FILE SYSTEM CACHING
。 这种方法基本上禁用了非缓冲 I/O,并恢复到缓冲 I/O 来访问容器。
- 如果未启用自调整内存管理器,那么启用它并使用
选择将文件系统文件和设备用于表空间容器时,应考虑文件系统高速缓存,它按如下所示执行:
- 对于 DMS 文件容器(和所有 SMS 容器),操作系统可能会将页高速缓存在文件系统高速缓存中(除非使用 NO FILESYSTEM CACHING 定义表空间)。
- 对于 DMS 设备容器表空间,操作系统不会将页高速缓存在 该文件系统高速缓存中。