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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: DB2/Informix

2008-04-03 20:51:25

作者:Sandor Szabo  出处:IBM DW中国 
IBM® Informix® Dynamic Server (IDS) 10.0 使用异步 I/O、直接 I/O 和向量 I/O 来提高性能,并使用处理器亲和来取得更大的可伸缩性和并行性,从而透明地优化和利用 Linux 环境。IDS 10 的性能和可靠性,加上可用于 Linux 的硬件价格,便得到一种强大而又经济的、同时适用于中小型和大型企业的解决方案。下面就让作者细细道来。


IBM 是 Linux 的早期支持者,如今仍然是此平台上的技术和市场引领者。增强 Linux 环境和利用 Linux 内核已经成为 IBM Informix Dynamic Server (IDS) Version 10.0 的重要部分。

IDS Version 10.0 包含很多能在 Linux 环境中取得好处的增强,包括:

  • 对新 Linux 平台的支持。
  • Linux 环境的透明优化和利用。
  • Linux 2.6 内核特性的利用。
  • 异步 I/O 和直接 I/O 的使用,提高 I/O 性能。
  • 处理器亲和(Processor affinity),以提高可伸缩性和并行性。
  • 通过可配置页宽来优化性能。
  • 提供 Linux 系统上的更多安装方法。
  • 简单网络管理协议(Simple Network Management Protocol, SNMP)支持。
  • 通过流管道的进程间通信。
  • 2.6 内核上的可伸缩性。

本文包含关于 IBM Informix Dynamic Server Version 10.0 在 Linux 平台上特有的一些新特性的信息。很多其他 IDS Version 10.0 特性在很多平台上同时可用,包括 Linux 平台。要了解更多关于非 Linux 特有的特性的信息,请参阅 IBM Informix Dynamic Server, Version 10.0 的新特性


IBM 提供了在多种不同的硬件平台和操作系统上部署 IBM Informix Dynamic Server Version 10.0 的灵活性和选择性。64 位计算平台的出现为数据库服务器和数据库应用程序性能的增强提供了新的可能性。32 位平台有其固有的地址空间限制,最多只能达到 4 GB。如果消除数据库服务器地址空间的 4 GB 的限制,那么就可以创建更大的缓冲池、排序堆、包缓存以及其他需要消耗大量内存的资源。64 位环境以及解决大于 4 GB 内存的能力,可以大大增强数据库的可伸缩性和性能。对于 IDS Version 10.0,IBM 拥有在所有主流 Linux 平台上优化的本地 64 位版本。

新的 IBM Informix Dynamic Server Version 10.0 所支持的 Linux 平台有:

  • x86(用于基于 Intel Pentium、Xeon 和 AMD Athlon 系统的 32 位版本)
  • POWER®(IBM eServer™、iSeries™ 和 pSeries® 系统)
  • zSeries®(IBM eServer zSeries® 系统)
  • Intel EM64T (X86-64),随着第一个 IBM Informix Dynamic Server Version 10.0 修补包(Q2 2005)的出现而受到支持
  • IA64(用于基于 Intel Itanium 的系统的 64 位版本)
  • AMD64(用于基于 AMD Opteron 和 Athlon64 的系统的 64 位版本),随着第一个 IBM Informix Dynamic Server Version 10.0 修补包的出现而受到支持


Linux 2.6 内核宣称,对在企业环境和数据中心运行的 Linux 作了很多改进。Informix 研究和开发小组从事 2.6 内核的工作已经有些时日了,他们对 IDS 做了增强,以便利用这些内核中的新特性。


在撰写本文之际,以下企业级的发行版都带有内核 2.6:

  • Red Hat Enterprise Linux AS release 4.0
  • SUSE LINUX Enterprise Server 9


Kernel Asynchronous I/O (KAIO) 允许应用程序将处理过程与 I/O 操作重叠,以提高 CPU 和设备的利用率。对于 KAIO,进程不需要等待 I/O 请求完成;当 I/O 操作完成时,进程就可以继续。

Kernel Asynchronous I/O 已经受到自 2.6.x 起的官方 Linux 内核的支持。IBM Informix Dynamic Server Version 10.0 支持字符设备(也叫裸设备)和块设备上的 Kernel Asynchronous I/O。Kernel Asynchronous I/O 在缺省情况下是开启的,在启动数据库服务器的进程所在的环境下,可以通过将环境变量 KAIOOFF 设为 1 来将其禁用。


主流 2.6 内核中包括了对本地 Kernel AIO 的支持。

重要: 不管是什么级别的发行版或者内核,libaio.so 库都是必需的。在本文撰写之际,IBM Informix Dynamic Server Version 10.0 需要不低于 0.3.96-3 的 libaio。

如果安装在计算机上的 libaio 的版本不能满足这些最低要求,那么应下载来自 Red Hat 或 SUSE 的最新 RPM Package Manager (RPM)。


Kernel Asynchronous I/O (KAIO) 在缺省情况下是开启的。在启动 Dynamic Server 进程的环境下,可以通过指定环境变量 AIOOFF=1 将其禁用。

如果启用了 KAIO,IBM Informix Dynamic Server Version 10.0 会尝试动态地装载 libaio。如果不能装载这个共享库,那么 KAIO 将被禁用,并且在数据库服务器的消息日志文件中会记下一条消息。

在使用 KAIO 时,建议在不同的虚拟处理器上运行 poll 线程。为此,可以在 NETTYPE 配置参数中将 NET 指定为 virtual processor (VP)。例如,您可以指定:

NETTYPE ipcshm,...,...,NET

或者

NETTYPE soctcp,...,...,NET

在 Linux 上,整个系统中并行 KAIO 请求有个最大数量的限制。/proc/sys/fs/aio-max-nr 文件包含了这个值。Linux 系统管理员可以增加这个值,例如使用以下命令:

# echo new_value > /proc/sys/fs/aio-max-nr

在 /proc/sys/fs/aio-nr 文件中可以看到所有操作系统进程已分配的请求数。

缺省情况下,IBM Informix Dynamic Version 10.0 分配最大请求数一半的请求,并将它们均等地指派给一定数量的 CPU 虚拟处理器。您可以使用环境变量 KAIOON 来控制分配给每个 CPU 虚拟处理器的请求数量。为此,可以在启动数据库服务器之前将 KAIOON 设置成要求的值。

KAIOON 的最小值是 100。如果 Linux 快要用完 KAIO 资源,例如在动态添加了很多 CPU 虚拟处理器的时候,在 online.log 文件中会打出警告。发生这种情况时,Linux 系统管理员应该像前面描述的那样添加 KAIO 资源。


如果操作系统支持 KAIO,则 CPU 虚拟处理器(VP)直接向文件作出 I/O 请求,而无需通过操作系统缓冲区。在这种情况下,应该只配置一个 AIO VP,再加上两个附加的 AIO VP 用于每个缓冲的文件块。

如果某个系统将所有可用的物理内存都用于应用程序(最显著的是用于 IDS),那么 Linux 可用于文件系统缓存的内存就非常少,从而导致文件系统 I/O 变得非常慢。在这一点上,KAIO 可以带来最大的好处,并且这种好处通常是可以明显感觉到的。


直接 I/O(Direct I/O, DIO)是另一种用于读写的可减少对 CPU 占用的缓存方法,它消除了从文件缓存传输到用户缓冲区的副本。对用 O_DIRECT 标志打开的文件的读/写将导致数据直接在用户缓冲区和磁盘之间传输。当启用 KAIO 并检测到 Linux 内核版本为 2.6.x 时,直接 I/O 将被开启。

当使用文件系统缓存策略(用于 cooked 文件的缺省策略)时,I/O 操作是以缓冲的方式执行的。虽然当缓存命中率较高时,这种缓存策略极为有效,但缓存策略有一定的开销,因为它需要额外地将缓冲区从磁盘复制到文件缓存(读的情况下),或者将缓冲区从文件缓存复制到磁盘(写的情况下)。由于缓冲区已经被缓存在 IDS 缓冲池层,因此,当文件系统缓存命中率较低,并且要执行很多 I/O 操作时,这种双重缓存是不必要的。


处理器亲和指的是将一个或一组进程绑定到一个特定的 CPU 或一组 CPU 上。这样做的好处是可以覆盖系统内建调度器,迫使一个进程只在指定的 CPU 上运行。在 Symmetric Multiprocessor (SMP) 和 Non-Uniform Memory Access (NUMA) 环境中,这样可以提高性能,因为更可能出现的情况是,处理器缓存将包含用于绑定到该处理器进程的缓存数据。

NUMA 架构的设计超越了 SMP 架构的可伸缩性限制。对于 SMP,所有内存访问都通过一条相同的共享内存总线。在 CPU 数量不多的情况下,这样没有问题,但如果有几十个、甚至几百个 CPU,这些 CPU 争用对共享内存总线的访问,那么共享总线在这一点上就会出现问题。而 NUMA 限制任何内存总线上的 CPU 数量,并通过高速互连将不同节点连接起来,从而缓解了这一瓶颈。

当一个进程被调度到不同处理器上时,缓存命中的几率就很小,于是会出现性能退化(由于发生了迁移,必须重新填充缓存)。

在使用该特性时必须谨慎,因为不正确的使用反而会招致负面的性能影响。覆盖内核选择地确认对进程最佳的调度器是需要技巧的。使用处理器亲和来获得显著的性能提升需要进行一些实验,因为每一次的工作负载都不一样,内核和 I/O 调度器对于不同的工作负载会有不同的表现。

将 VPCLASS 配置参数的 aff 选项设置为在 $INFORMIXDIR/etc/$ONCONFIG 文件中 CPU 虚拟处理器所绑定的 CPU 数量。

:将一个 CPU 虚拟处理器绑定到一个处理器并不妨碍其他进程在那个处理器上的运行。没有被绑定到某个 CPU 的应用程序进程或其他进程,可以无拘束地在任何可用的处理器上运行。


CPU 亲和是 2.6 内核的特性,已经被向下移植(back-port)到 Red Hat Enterprise Linux 3。


您可以直接调用 RPM Package Manager (RPM) 并使用基于脚本的安装将 Dynamic Server 安装在 Linux 上,而不必使用 Java™。这个过程与 IBM Informix Dynamic Server Version 10.0 之前的服务器安装过程类似。也可以使用 InstallShield Multi-Platform (ISMP) 安装程序,这是一个基于 Java 的安装程序,它利用了 RPM 技术,将 IBM Informix Dynamic Server 安装在 Linux 上。

通过直接调用 RPM 而将 IBM Informix Dynamic Server 安装在 Linux 系统上:

  1. 以用户 informix 的身份,创建 IBM Informix 产品目录($INFORMIXDIR)。
  2. 将 $INFORMIXDIR 环境变量设置为这个目录。

    例如:

    ( bash or /bin/sh )export INFORMIXDIR= /usr7/informix

    或者(对于 csh)

    setenv INFORMIXDIR /usr7/informix
  3. 插入 CD,并安装包含 IBM Informix CD 的驱动器。这个安装点(mount point)被称为 $MEDIADIR。
  4. 阅读位于 $MEDIADIR/doc/license 中的许可,然后将 $ACCEPTLICENSE 环境变量设置为 yes

    例如:

    ( bash or /bin/sh )export ACCEPTLICENSE=yes

    或者(对于 csh)

    setenv ACCEPTLICENSE yes
  5. 将 install_rpm 和所有 *.rpm 文件从 CD 复制到 $INFORMIXDIR。
  6. root 身份,在 $INFORMIXDIR 目录运行 install_rpm,如下所示:

    cd $INFORMIXDIR

    install_rpm

要了解更多信息,请参阅 IBM Informix Dynamic Server Installation Guide for UNIX and Linux


IBM Informix Dynamic Server Version 10.0 支持 Linux 上的 Simple Network Management Protocol (SNMP) 代理。SNMP 代理是基于 PEER Network 的 SubAgent Development Kit 的。

该发行版包括以下安装在 \$INFORMIXDIR 目录下的文件:

  • bin/onsnmp ——这是 OnSNMP 从代理,被打包为独立的进程。
  • bin/onsrvapd ——这是守护进程,它为发现的每个服务器产生一个从代理。
  • snmp/peer/snmpdp ——这是 PEER Network 主代理。
  • snmp/peer/CONFIG ——这是 PEER Network 配置文件。
  • snmp/*V1.mib —— MIB 文件定义随 OnSNMP 提供的装置(instrumentation)。文件名中包含“V1”的文件遵从 SNMP version 1,并享有最广泛的认同。文件名中包含“V2”的文件遵从 SNMP version 2;扩展名为“my”的文件是过渡性文件,将被用于做最后的处理。
  • snmp/*V2.mib
  • snmp/*.my

此平台没有提供在 OnSNMP 手册中提到的 runsnmp.ksh 脚本。该脚本不在 \$INFORMIXDIR 目录中。

OnSNMP 由一个主机来支持,这个主机运行一个且只有一个服务器。如果在同一个主机上有多个服务器在运行,那么用在随后服务器上的从代理就不能启动。




$INFORMIXDIR/snmp/peer/snmpdp   $INFORMIXDIR/snmp/peer/CONFIG NOV

$INFORMIXDIR/bin/onsrvapd -l /tmp/onsrv -g 64

要了解更多信息,请参阅 IBM Informix SNMP Subagent Guide


从用于 Version 10.0 的第一个 fixpack 开始,IBM Informix Dynamic Server 支持 Linux 上使用流管道的进程间通信(Interprocess communication, IPC)。进程间通信是使用 UNIX® 域套接字实现的。

为了激活此协议,$INFORMIXDIR/etc/$ONCONFIG 文件中的 NETTYPE 配置参数和 $INFORIMXDIR/etc/sqlhosts 文件条目中的 nettype 字段必须包含 "onipcstr"。

本地 32 位应用程序和工具可以使用 IPC 流管道协议连接到 64 位服务器。

要了解更多信息,请参阅 IBM Informix Administrator's Reference


我们常常听到,“Linux 不具有伸缩性”,这句话其实是不对的。它只是考虑了在 Linux kernel 2.2 中观察到的性能。事实证明,Linux kernel 2.4 提供了非常好的伸缩行为。而对于 kernel 2.6,CPU 和进程的伸缩性可以提高得更多。

我们在 SLES8 (z900t) 和 SLES9 (z990) 上用一个 Informix 64 位数据库做了一次伸缩性测试。目的不是运行一个典型的、具有大量内存和存储服务器需求的数据库基准,而是测试 CPU 和进程的可伸缩性。对于一个工作负载,使用测试仿真一个完整的环境,在此环境中,终端操作员对数据库执行事务。基准集中在订单输入环境的主要活动(事务)上。

SLES8 测试中的伸缩显示了伸缩比例为 3.7(4 CPU)、6.9(8 CPU)、9.5(12 CPU)和 11.5(16 CPU)。z990 上的 SLES9 也显示了类似的伸缩性。当测试中使用了不止一个 CPU 时,吞吐率比在 SLES8 和 z900t 情况下要高出 50%。


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