分类: DB2/Informix
2008-05-31 16:59:29
其他性能提升
在 V11 中,随着 direct I/O 特性的引入,可以提高用于常规数据库空间块的 cooked 文件的 I/O 性能。使用文件系统的 I/O 通常慢于使用原始设备的 I/O。这是因为通过文件系统进行读写有附加的开销。这增加了另一层的工作。此外,可能存在一个缓冲系统。这种缓冲会降低性能,而 IDS 不能控制操作系统的这个子系统。Direct I/O 可以绕过文件系统层,包括任何缓冲,因此读和写的效率更高。可以使用 DIRECT_IO
配置参数启用 direct I/O。cooked 文件的性能可以接近用于数据库空间块的原始设备的性能。
DIRECT_IO
不能用于临时数据库空间,只能用于常规的数据库空间块。文件系统和操作系统必须支持给定页大小的 direct I/O。对于原始设备,不支持 direct I/O。对于原始设备上的块,更可取的 I/O 方法是 KAIO(kernel asynchronous I/O)。
DIRECT_IO 设置 | 描述 |
---|---|
0 | Direct I/O 被关闭 |
1 | Direct I/O 被打开 |
注意: 有些操作系统启用 direct I/O,并且实现使用 KAIO (kernel asynchronous i/o)。如果启用了 direct I/O,数据库服务器会尝试使用 KAIO 以完成这项工作。如果启用了 KAIO,可以减少 AIO 虚拟处理器的数量。这里假设 KAIO 已被启用(KAIOOFF
在环境中没有被设置)。
Windows 不支持 DIRECT_IO ONCONFIG
参数,因为在 Windows 平台上 direct I/O 是默认被启用的。
BAR_SORT_DBS
是一个新的环境变量,它使 V11 中的一个新特性可以提高非全系统归档和恢复的效率。并行数据库空间归档和恢复将使用新的排序方法。BAR_SORT_DBS
可以设置为任意值,并且需要在环境中设置方能生效。如果不设置 BAR_SORT_DBS
,可以保留归档和恢复操作的原始行为。
V11 中引入了并行并行全系统备份。在 V11 之前,全系统备份是单线程的。所有数据库空间使用一个归档检查点时间戳,归档是连续进行的。
在 V11 中,可以进行并行全系统备份。所有数据库空间的检查点在 root 数据库空间的备份之前。然后,root 数据库空间首先被归档,这个归档不是并行的。直到这时,其行为仍然与之前的版本相同。
但是,在 V11 中,备份是按新的顺序执行的。这个顺序对于非全系统归档也有效。
接着,对于每个数据库空间,启动一个前像处理器线程(arcbackup2)。这样可以使更多的线程并行运行。当每个数据库空间备份完成时,相应的 arcbackup2 线程将退出,从而减少备份过程中占用资源的 arcbackup2 线程。
在 Informix Dynamic Server V11 中,数据库空间的备份顺序有了变化。这个顺序以备份开始时被使用的页数为依据。要备份的数据库空间按照数据库空间中使用的页数以降序排序。这样可以确保更好的并行性。不管 BAR_MAX_BACKUP
如何设置,不管归档的页面有多少,都是如此。
BAR_MAX_BACKUP 设置 | 描述 |
---|---|
0 | 允许引擎决定 |
1 | 连续(单线程)归档和恢复 |
# | 开始多个备份进程 |
如果 BAR_MAX_BACKUP
被设为 0,则引擎分配较少数量的存储空间或者共享内存中可以容纳的存储空间。
可以创建特殊类型的虚拟处理器,以运行用户定义例程或者执行 DataBlade 模块的工作。 用户定义例程通常用于支持用户定义数据类型。如果不想用户定义例程在 CPU 类 VP 中运行,那么可以将它指派给用户定义类型的虚拟处理器(VP)。用户定义虚拟处理器的另一个名称是扩展虚拟处理器。
如果 UDR 可以并行处理,那么应该配置足够多的用户定义虚拟处理器,以处理 UDR 负责的多个任务。数据库服务器将支持操作系统所允许的那么多的用户定义 VP。
用户定义虚拟处理器可以避免数据库服务器受到行为不当的用户定义例程的影响。所有行为不当的用户定义例程至少有以下特征之一:
将任何行为不当的用户定义例程指派给用户定义虚拟处理器,可以使数据库服务器避免不安全的执行,从而提高数据库的可靠性。用户定义 VP 消除了 CPU VP 的以下编程限制:
如果行为不当的 UDR 在用户定义虚拟处理器中运行,那么可以减少对服务器上运行的其他线程的影响,因为它们不必等待处理时间,而如果那些行为不当的 UDR 在 CPU VP 上运行,其他线程就需要这样的等待。
VPCLASS
选项用于定义一个新的 vp 类型。这个类型的名称与 UDR 中定义的类型名称对应。
SQL CREATE FUNCTION
语句注册一个用户定义例程。该语句定义函数名称、返回类型和函数运行时所在的类型的名称。
例如,清单 5 中定义了用户定义例程 MoodyBluesOrNot。 它指定给定的参数类型是 char,并定义返回类型为 boolean。注意,清单中还指定了类型名称。这意味着对该例程的调用是在名为 MoodyBlues 的用户定义 VP 类型中运行:
CREATE FUNCTION MoodyBluesOrNot(char) RETURNS boolean WITH (CLASS = MoodyBlues ) EXTERNAL NAME '/usr/lib/objects/udrs.so' LANGUAGE C |
ONCONFIG 文件必须包括一个 VPCLASS
参数,该参数定义 MoodyBlues 类型。否则,对 MoodyBluesOrNot 函数的调用将失败。