
不使用文件系统高速缓存的表空间
建议在表空间级启用或禁用 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
的情况下,必须先终止与数据库的现有连接,新的高速缓存策略才会生效。
注: 如果将某个属性从缺省值更改为 FILE SYSTEM CACHING 或 NO FILE SYSTEM CACHING,那么没有一种机制可用来将它更改回缺省值。
这种启用和禁用文件系统高速缓存的方法对表空间级的 I/O 方式进行控制(是缓冲的还是非缓冲的)。
要确定是否已启用文件系统高速缓存功能,请在 MON_GET_TABLESPACE 表中查询表空间的 fs_caching 监视元素值。
- 在 UNIX、Linux 和 Windows 上启用/禁用非缓冲 I/O 的其他方法
- 某些 UNIX
平台支持使用 MOUNT 选项在文件系统级禁用文件系统高速缓存。有关更多信息,请参阅操作系统文档。但是,了解在表空间级和在文件系统级禁用文件系统高速缓存的差别很重要。在表空间级,数据库管理器控制哪些文件将使用文件系统高速缓存打开。在文件系统级,位于特定文件系统上的每个文件都不使用文件系统高速缓存打开。某些平台(如
AIX®)在您使用此功能之前有一些要求,比如,序列化读写访问。虽然数据库管理器符合这些要求,但是如果目标文件系统包含并非来自数据库管理器的文件,在启用此功能之前,请参阅操作系统文档以获取任何要求。注: 在 V8.1 FP4 中引入的但现在已不推荐使用的注册表变量 DB2_DIRECT_IO 对所有 SMS 容器(但 AIX JFS2 上的长字段数据、大对象 (LOB)数据和临时表空间除外)禁用文件系统高速缓存。在 V9.1 或更高版本中设置此注册表变量相当于使用 NO FILE SYSTEM CACHING 子句更改所有表空间、SMS 和 DMS。但是,不推荐使用 DB2_DIRECT_IO,在以后的发行版中会移除此变量。应改为在表空间级启用 NO FILE SYSTEM CACHING。
- 在 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 设备容器表空间,操作系统不会将页高速缓存在 该文件系统高速缓存中。