Chinaunix首页 | 论坛 | 博客
  • 博客访问: 91200347
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: DB2/Informix

2008-05-31 16:52:25

ONCONFIG

IDS 是可伸缩的,因此对它进行调优,以容纳大型实例。

用于调优 VP 的主要参数是 VPCLASS

下面的参数已经被弃用,并被 VPCLASS 替代:

  • NUMCPUVPS
  • SINGLE_CPU_VP
  • AFF_SPROC
  • AFF_NPROCS
  • NOAGE
  • NUMAIOVPS


VPCLASS 参数中的第一项提供所描述的虚拟处理器类型的名称。VPCLASS 名称不是区分大小写的。

可以为用户定义例程或 DataBlade 模块定义新的虚拟处理器类型,或者为预定义的虚拟处理器类型设置值。

注意: 下面的类型名称是预定义的:



                    				
adm      lio      shm
adt      msc      soc
cpu      ntk      str
jvp      opt      tli
kio      aio      pio
encrypt
				

classname 变量是必需的。与大多数配置参数不同,VPCLASS 有一些选项字段,它们可以以任意顺序出现,之间用逗号隔开。字段中不能使用空格。VPCLASS 有以下空格:



                    				
num=num_VPs
max=max_VPs
aff=affinity
noage
noyield
				

要了解更多信息,请参阅文档。

如前所述,IDS 是可伸缩的,可以对它进行配置,以容纳和使用多 CPU 的计算机。

CPU VP 的数量可以这样配置:



                    	VPCLASS cpu,num=3
				

VPCLASS 配置参数的 JVP 选项设置 Java 虚拟处理器的数量。当使用 IBM Informix JDBC Driver 时,这个参数是必需的。在 UNIX 上,必须定义多个 Java 虚拟处理器以并行执行 Java 用户定义例程。


对于 VP 类型 tlishmstrsoc,必须将 NETTYPE 配置参数的 VP_class 字段设置为 NET

例如,如果 VPCLASS 参数被设置如下:


                    				
VPCLASS shm,num=1
VPCLASS tli,num=1
				

那么 NETTYPE 参数应该设置为:


                    				
NETTYPE ipcshm,1,100,NET
NETTYPE tlitcp,1,100,NET
				







下面是一些共享内存参数:



参数 描述
EXTSHMADD 指定增加的扩展段(extension segment)的大小
SHMADD 指定当数据库服务器请求更多内存时内存的增量
SHMBASE 指定共享内存基址,与计算机有关。这个值取决于是什么平台,处理器是 32 位还是 64 位的。要了解关于使用哪个 SHMBASE 值的信息,请查看计算机说明
SHMTOTAL 指定允许数据库服务器使用的最大内存数
SHMVIRTSIZEL 指定数据库服务器使用的第一块内存的大小








DBSERVERNAMEDBSERVERALIASES 参数对应于 sqlhosts 文件或注册表第一列中的条目。一个 NETTYPE 条目可以指定一个接口/协议组合。NETTYE 与 DBSERVER 或 DBSERVERALIAS 条目不是匹配的,而是对应于 sqlhosts 文件中第二列中有相应协议的那一行。根据关于分配多少个 poll 线程的定义,数据库服务器将为每个惟一的 NETTYPE 条目运行一个或多个 poll 线程。

NETTYPE 配置参数还提供用于一个相应的接口/协议组合的附加配置信息。这使 DBA 可以分配一个初始缓冲区以处理用户,并为一个接口/协议组合分配不止一个 poll 线程。 NETTYPE 还指定 poll 线程将在其上工作的虚拟处理器类型(CPU 或 NET)。

poll 线程可以在 CPU 虚拟处理器(VP)或网络 VP 上运行。对于单 CPU 机器,poll 线程通常在 CPU VP 上可以更高效地运行。但是,在具有大量远程客户机的多处理器计算机上,在 NET VP 上运行 poll 线程可以获得更好的吞吐率。

默认情况下,如果没有为一个接口/协议组合设置 NETTYPE,则数据库服务器将在内部运行 poll 线程。默认情况下,与 DBSERVERALIAS 匹配的、用于特定接口/协议组合的 poll 线程将在 CPU VP 上运行,因为数据库服务器假定这是任何用户的主接口。对于其他接口/协议组合,如果没有指定 VP 类型,则默认地在 NET VP 上运行那些 poll 线程。

如果 poll 线程在 NET VP 上运行,那么引擎将为每个 poll 线程启动一个 NET VP。这是因为每个 poll 线程都需要自己的虚拟处理器。

对于在内部运行(即在 CPU VP 上运行)的 poll 线程也是如此。 如果指定 VP 类型为 CPU,那么每个 CPU VP 上只能运行一个 poll 线程。如果数据库服务器没有足够的 CPU VP,则数据库服务器将委派 NET VP 处理溢出。

对于较小的系统,每个网络接口/协议组合只需一个 poll 线程,即只需一个虚拟处理器。对于有 200 个以上并发网络用户的系统,增加更多的 poll 线程(随之增加网络虚拟处理器)可以取得更好的性能。由于用户负载较高,可能需要进行试验,以确定 poll 线程(不管是内部运行还是在 NET VP 上运行)和要启动的网络 VP 的数量(如果在网络虚拟处理器上运行的话)的配置。

如果对于给定的单个端口和相应侦听线程的接口/协议组合,数据库服务器不能令人满意地处理连接请求,那么可以通过以下方法提高连接吞吐率:

  • 分配更多的侦听线程
  • 增加一个网络接口卡

一个侦听线程专用于它所在的端口。首先,使用 DBSERVERALIASES 参数为每个附加端口指定一个 dbservername。

引擎只能分配一个共享内存侦听线程。但是对于网络连接,每个 DBSERVERALIAS 将处理 NETTYPE 设置,并分配一组相同的 poll 线程和连接缓冲区。

对于 sqlhosts 文件或注册表中的每个 DBSERVERALIAS,必须指定一个接口/协议组合。

有时候,用于主计算机的一个网络接口卡不能达到要求的连接吞吐率。或者,可能需要将数据库服务器连接到不止一个网络。在这种情况下,可以增加一个网络接口卡。

为支持多个网络接口卡,必须为每个卡赋予一个惟一的主机名或网络地址。

增加一个网卡后,就可以增加一个附加的侦听线程,这个侦听线程在新增的网卡上运行。数据库服务器将使用 sqlhosts 文件中的 hostname 条目以确定使用哪个网卡。

调整网络缓冲区的大小以容纳一个常见的请求,这样可以避免将一个请求拆分成多个报文,从而提高 CPU 利用率。但是,这样做时要小心,因为数据库服务器会为所有活动的连接动态地分配指定大小的网络缓冲区。如果缓冲区配置得太大,就会消耗大量的内存。

数据库服务器从全局内存池中为请求报文分配网络缓冲区。当数据库服务器服务完一个客户机请求之后,它将那些缓冲区返回给公共网络缓冲池。这个缓冲池在使用 SOCTCP、IPCSTR 或 TLITCP 网络连接的会话之间共享。

数据库管理员可以用以下方法控制自由缓冲区阈值和每个缓冲区的大小:

  • NETTYPE 配置参数
  • IFX_NETBUF_PVTPOOL_SIZE 环境变量
  • sqlhosts 文件或注册表中的 IFX_NETBUF_SIZE 环境变量和 b(客户机缓冲区大小)选项


数据库服务器维护自由网络缓冲区的一个阈值。这是为了防止从网络缓冲池中频繁地分配和回收共享内存。如果在 NETTYPE 参数中指定一个用户数量,则数据库服务器利用这个值,并维护阈值,以匹配共享内存的分配。

数据库服务器使用下面的公式计算网络缓冲池中自由缓冲区的阈值:


                    				
free network buffers threshold = 100 + (0.7 * number_connections)

对于 TCPIP 连接(即 SOCTCP、TLITCP 或 IPCSTR),number_connections 的值与 NETTYPE 条目的第三个字段相关联。共享内存连接(IPCSHM)不使用这个公式以计算 connections_used。

如果没有指定,NETTYPE 参数第三个字段的默认值是 50 个用户。

数据库服务器提供了一种机制以支持使用 SOCTCP、IPCSTR 或 TLITCP 网络连接的每个会话的私有网络缓冲区。

当很多连接和会话经常活动时,这些私有网络缓冲区可以带来以下好处:

  • 减少公共网络缓冲池的连接
  • 节省 CPU 资源,因为不需要为每个网络传输从公共网络缓冲池中分配网络缓冲区和为之回收网络缓冲区。这些缓冲区将静态可用。

用于每个会话的私有网络缓冲池的大小由 IFX_NETBUF_PVTPOOL_SIZE 环境变量指定。默认大小是一个缓冲区。

可以使用下面表中的 onstat 选项以监视网络缓冲区的使用:



选项 输出字段 字段描述
onstat -g ntu q-pvt 私有缓冲池中用于该会话的自由缓冲区的当前数量和最高数量
onstat -g ntm q-exceeds 超过自由缓冲区阈值的次数


onstat -g ntu 选项按以下格式显示 q-pvt 输出字段:


                    				
current number / highest number 

如果自由缓冲区的数量(q-pvt 字段中的值)始终为 0,那么可以采取以下几种行动之一:

  • 使用环境变量 IFX_NETBUF_PVTPOOL_SIZE 增加缓冲区的数量
  • 使用环境变量 IFX_NETBUF_SIZE 增加每个缓冲区的大小

q-exceeds 字段表明自由共享网络缓冲池的阈值被超过的次数。当超过这个阈值时,数据库服务器将未使用的网络缓冲区(超过这个阈值的部分)返回给全局内存池。最佳情况下,这个值应该总是为 0 或者一个很低的数字。这是服务器不在分配或回收网络缓冲区的一个指示符。

IFX_NETBUF_SIZE 环境变量指定公共网络缓冲池中每个网络缓冲区和私有网络缓冲池的大小。默认大小为 4KB。

使用 IFX_NETBUF_SIZE 配置一个较大的缓冲区可以减少接收每个分组所需的开销。

如果知道客户机会发送大于 4B 的分组,可以将 IFX_NETBUF_SIZE 配置为平均分组大小。客户机在以下几种情况下会发送大型分组:

  • 表装载
  • 行大小大于 4KB
  • 发送简单的大型对象

sqlhosts 的 b 选项对应于 IFX_NETBUF_SIZE 参数。sqlhosts 选项的值通常应该与 IFX_NETBUF_SIZE 的值匹配。

可以使用下面的 onstat 命令查看网络缓冲区大小:

onstat -g afr global | grep net

输出中的 size 字段显示网络缓冲区的大小,单位为字节。







IDS 11 在某些方面会自动调优。

数据库服务器会自动调整检查点频率,以避免事务阻塞。为此,服务器监视物理和逻辑日志的消耗情况以及关于过去检查点性能的信息。

然后,必要时服务器更频繁地触发检查点,以避免事务阻塞。为了保存关于最近检查点性能的信息,Informix Dynamic Servers 在 SYSMATER 数据库中增加了下面两个表:



描述
syscheckpoint 存放关于最近 20 个检查点的历史
sysckptinfo 跟踪检查点活动


由于数据库服务器在检查点处理期间不阻塞事务,LRU 刷新应该放缓。如果服务器不能在物理日志被消耗(这样会导致事务阻塞)之前完成检查点处理,并且不能增加物理日志的大小,那么可以配置服务器,使之更积极地进行 LRU 刷新。

增加 LRU 刷新会影响事务性能,但是可以减少事务阻塞。如果没有配置服务器使之更频繁地进行 LRU 刷新,那么只有当服务器找不到低优先级的缓冲区进行页面置换时,服务器才自动调整 LRU 刷新,使之变得更积极。

ONCONFIG 参数 AUTO_CKPTS 启用自动检查点,默认情况下,在配置文件中它是自动启用的。

可以通过将 onmode -wf AUTO_CKPTS 设为 0,或者将 AUTO_CKPTS 配置参数设为 0 以关闭自动检查点。

如果关闭了 AUTO_CKPTS,则 Informix Dynamic Server 只根据以下 4 个事件触发检查点:

  • 诸如归档、onmode -c、增加数据库空间、启动和关闭服务器之类的管理事件
  • 物理日志满了 75%。确保物理日志较大,以避免在达到 CKPTINTVL 之前发生检查点处理
  • 每个逻辑日志空间一个检查点:Informix Dynamic Server 不能覆盖包含当前检查点的逻辑日志,所以它必须在转移到那个逻辑日志之前触发检查点
  • ONCONFIG 参数 CKPTINTVL


用于使用间歇性检查点刷新每个缓冲池的 LRU 设置对于检查点性能并不重要。只有当维护足够多干净的页面用于页面置换时,才需要进行 LRU 设置,以减缓 LRU 刷新。

每当发生页面置换时,数据库服务器自动调优 LRU 刷新。

发生检查点之后,如果在之前的检查点间歇期间发生了页置换前台写操作,则数据库服务器将 LRU 设置增加 10%,并且在随后的每个检查点继续增加 LRU 刷新,直到页置换前台写操作停止,或者一个给定的缓冲池的 LRU_MAX 降低了 10%。

例如,如果发生页置换前台写操作,并且一个缓冲池的 LRU 设置是 80 和 90,则数据库服务器将该设置调整为 76 和 85.5。

除了前台写操作之外,每当一个页错误替代了一个热页面(高优先级缓冲区),并且非高优先级缓冲区在修改的 LRU 队列上时,LRU 刷新也将被调整为更加积极。自动 LRU 调整只是使 LRU 刷新变得更积极,而不能减少 LRU 刷新。自动 LRU 调整不是永久的,不会记录在 ONCONFIG 文件中。

LRU 刷新会被重新设置为数据库服务器启动时使用的 ONCONFIG 文件中包含的值。

自动 LRU 调优对所有缓冲池都有影响,并且会调整 BUFFERPOOL 配置参数中的 LRU_MIN_DIRTY 和 LRU_MAX_DIRTY 值。

AUTO_LRU_TUNING 配置参数指定当服务器启动时是否启用自动 LRU 调优。

默认情况下,在配置文件中 AUTO_LRU_TUNING 已被启用。可以使用 onmode -wmonmode -wf 动态地启用或禁用 LRU 调优。

从 IBM Informix Dynamic Server V11 开始,可以使用 AUTO_AIOVPS 配置参数使数据库服务器可以在服务器检测到 AIO VP 没有跟上 I/O 工作负载时自动调整 AIO VP 和刷新线程的数量。

默认情况下,AUTO_AIOVPS 在配置文件中已启用。可以使用 onmode -wmonmode -wf 动态地启用或禁用 AIO VP 和刷新线程的自动增加。







这两个 ONCONFIG 参数用于存放在快速恢复期间物理日志和逻辑日志恢复的速度。

RAS_PLOG_SPEED 最初是在物理日志初始化时设置的。

RAS_LLOG_SPEED 被初始化为 RAS_PLOG_SPEED 的 1/8。

每当发生快速恢复时,这两个值将被更新,以反映实际的恢复速度。它们的单位是页/秒。

IBM 将这两个参数包括在 ONCONFIG 文件中,使得那些将 Informix Dynamic Server 嵌入到应用程序中的客户可以提供预先计算的值,从而不需要进行调优就能达到最佳性能。除非在 IBM 技术支持的指导下,否则 DBA 不应修改这些值。

阅读(714) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~