在 AIX 中运行 Oracle

性能方面的技巧和诀窍

系统管理员始终需要了解系统的性能。近些年来,由于 AIX 及其硬件平台(System p™)中所做的更改,IBM® AIX® 的性能优化工作也发生了相当大的改变。如果现在您还在阅读两年前的、特定的 AIX 性能优化文档,并且应用相同的策略,那么您可能不仅无法实现性能的提高,而且在某些情况下还会使情况变得更糟。作为一名管理员,虽然有时您可能会发现动态地更改某些参数可以显著地、快速地提高性能,但在 Oracle 这样的数据库环境中,性能优化是一个漫长的过程,不可能一蹴而就。本文将深入探讨应该如何对 AIX 的各个方面进行优化,以运行 Oracle。我们将讨论虚拟内存管理器 (VMM,Virtual Memory Manager)、CPU、内存和 I/O(磁盘以及网络)等方面。我们将研究一些可用于分析瓶颈问题的工具,同时还将对系统进行某些更改。最后,我们还将回顾一些可用于帮助您进行性能优化的 Oracle 工具。

Ken Milberg, 撰稿人, RoleModel Software, Inc.

Ken Milberg 是 PMP,同时也是 techtarget.com 的撰稿人/站点专家,并为 searchopensource.com 提供 Linux 技术信息和支持。Ken 还是《IBM 系统杂志(开放系统版)》的撰稿人和技术编辑。Ken 拥有马里兰大学学院分校的计算机与信息科学学士学位和技术管理科学硕士学位。他是长岛 POWER-AIX 用户组的创立者和负责人。多年以来,他在大小型企业工作过,并且担任过从 CIO 到高级 AIX 工程师的各种职位。现在,他在 Future Tech 工作,这是一家总部设在长岛的 IBM 业务合作伙伴。Ken 是通过 PMI 认证的项目管理专业人员 (PMP),还是通过 IBM 认证的高级技术专家(CATE,IBM System p5 2006)。



2008 年 9 月 01 日

引言

IBM 为 AIX 提供了业界最广泛的数据库服务器产品,并针对各种业务需求进行了优化:

  • DB2:用于要求具备最大限度的灵活性和性能的各种解决方案。
  • IDS:用于提供几乎无需人工干预的自动化管理,以及高可用性的事务密集型解决方案。
  • U2:用于快速地、灵活地开发需要动态数据记录的解决方案。

作为一名系统管理员,您应该已经了解了有关内存、CPU 和磁盘 I/O(有关这些主题的更多文章,请参见参考资料部分)的一些基础知识。但您可能尚未充分了解的是,VMM 在 AIX 中的工作方式以及它对 Oracle 所起到的作用。您还将发现,由于近些年来许多 AIX 优化命令和参数发生了更改,所以 Oracle 同样进行了更改,并且一些实用工具(如 Oracle 企业管理器,它是一种非常重要的实用工具,您完全有必要仔细地研究这个工具,并将其添加到您的技能库中)也进行了更改。

本文将详细讨论 AIX VMM,以及将用于优化内存的各种优化命令。本文还将介绍一些您将要使用的、可以帮助您正确地完成优化任务的监视工具。

在我们开始之前,还有很重要的一点需要说明,对于将要进行的工作,您必须有一个整体的方法。请确保使用正确的变更控制流程;一次仅进行一项更改,并且在将这项更改引入到其他环境、特别是产品环境之前,仔细地监视这项更改。实际上,性能优化是一个迭代的、持续进行的过程,并且您时常会发现在修复一个瓶颈时可能会产生另一个瓶颈,这是完全正常的,只要您不断地寻求改进系统运行状况的方法。请确保从一开始(在您的用户开始抱怨低下的性能之前)就对系统进行监视。如果您不知道正常运行时系统的状况,那么又怎么能够识别性能低下的系统呢?正确的基准是这个问题的关键。我们将要研究的系统是包含一个 CPU 和 4GB RAM 的 POWER5™ LPAR,其中运行了 Oracle 10g (10.1.0.2.0) 和 AIX 5.3 TL7。


内存

在这个部分中,我们将回顾内存与 AIX 和 Oracle 之间的关系。我们将讨论 AIX 如何使用虚拟内存,以及与 Oracle 之间的关系。我们还将分析相关的数据,并优化我们的子系统。

让我们首先从 VMM 开始。VMM 为系统中所有的内存请求(而不仅仅是虚拟内存的内存请求)提供服务,了解这一点是非常重要的。在访问 RAM 时,VMM 必须分配空间,即使系统中存在充足的物理内存。这一点经常令 DBA 和系统管理员感到困惑。使用一个称为分页空间预分配的过程,通过将段划分为页面,可以完成这项任务。这些页面可能是 RAM、或者分页空间(即存储于磁盘中的虚拟内存)。同时,VMM 维护了一个未分配页帧的空闲列表,可以使用该列表来处理缺页的问题。VMM 提供了一种页面置换算法,该算法用于分配页帧,以及确定应该将当前 RAM 中的哪些虚拟内存页面的页帧置换回空闲列表。

而且,AIX 操作系统将使用所有可供使用的内存,除了配置为不进行分配的,以及用于空闲列表的内存之外。很显然,在可以使用物理内存的情况下,管理员更希望使用物理内存,而不是分页空间。VMM 将内存段划分为两类:持久段和工作段。持久段使用文件内存,而工作段则使用计算性内存。对于我们来说,这意味着什么呢?在您的 SQL 查询访问数据库时,所使用的内存是计算性内存。这些都是工作段,并且将在该过程完成时终止。这些段没有真正的永久存储位置。另一方面,文件内存使用持久段,并且在磁盘中具有永久存储位置。通常它们将保存在内存中,直到偷取(置换)这些页面、或者回收数据库为止。同样,您希望将文件内存分页到磁盘中,而不是计算性内存中。

我们应该如何优化系统呢?有一个关键的参数需要介绍,那就是 Translation Lookaside Buffer (TLB)。因为像 Oracle 这样的应用程序会使用大量的虚拟内存,所以使用较大页面可以显著地提高性能。增加这个缓冲区的大小允许系统映射更多的虚拟内存,其结果是使得使用大量虚拟内存的应用程序(如 Oracle)的缺页率更低。这包括 OLTP 和数据仓库应用程序。Oracle 为它的 SGA 使用了较大的页面,因为主要占用虚拟内存的实际上正是 SGA。对于 AIX 5.3 和更早的版本,我们将使用 vmo;在此之前,我们使用的是 vmtune。

让我们来了解一些使用 vmo 时的参数,如清单 1 所示。

清单 1. 使用 vmo 的参数
root@lpar21ml16ed_pub[/] > vmo -L lgpg_size
NAME                      CUR    DEF    BOOT   MIN    MAX    UNIT           TYPE
     DEPENDENCIES
--------------------------------------------------------------------------------
lgpg_size                 0      0      0      0      16M    bytes             D
     lgpg_regions


root@lpar21ml16ed_pub[/] > vmo -L lgpg_regions
NAME                      CUR    DEF    BOOT   MIN    MAX    UNIT           TYPE
     DEPENDENCIES
--------------------------------------------------------------------------------
lgpg_regions              0      0      0      0                               D
     lgpg_size

使用下面的命令,我们将分配 16777216 字节,以提供较大的页面(共 256 个较大的页面):

# vmo -r -o lgpg_size=16777216 lgpg_regions=256

同时,对于 Oracle Database 10g,请确保将 LOCK_SGA Oracle 初始化参数设置为 TRUE,这样一来,Oracle 会在分配共享内存时请求较大的页面。到目前为止,最重要的两个 vmo 设置是 minpermmaxperm。我们使用这些参数来确定我们的系统是倾向于使用计算性内存、还是文件内存。这里我们要做的第一项工作是,确保我们的 lru_file_repage 参数 = 0。这个参数是在 AIX 5.3 的 ML1 中引入的,用于确定是否考虑 VMM 的重新分页计数,以及它应该偷取何种类型的内存(请参见清单 2)。

清单 2. lru_file_repage 参数
root@lpar21ml16ed_pub[/] > vmo -L lru_file_repage
NAME                      CUR    DEF    BOOT   MIN    MAX    UNIT           TYPE
     DEPENDENCIES
--------------------------------------------------------------------------------
lru_file_repage           1      1      1      0      1      boolean           D
--------------------------------------------------------------------------------
root@lpar21ml16ed_pub[/] >

如清单 2 中所示,其缺省值为 1,因此我们需要使用 vmo 对其进行更改(请参见清单 3)。

清单 3. 使用 vmo 更改 lru_file_repage 参数的缺省设置
root@lpar21ml16ed_pub[/] > vmo -o lru_file_repage=0
Setting lru_file_repage to 0
root@lpar21ml16ed_pub[/] >

将其设置为 0,可以告诉 VMM,您仅希望偷取文件页面、而不是计算性页面。如果是 numperm < minperm 或者 > maxperm,这种情况则将有所改变,所以我们将 maxperm 设置得较高,而将 minperm 设置得非常低。很多年以前,在引入 lru_file_repage 参数之前,我们习惯于将 maxperm 设置得较低。如果我们现在还这样做的话,那么我们则将停止当前正在运行的应用程序缓存程序。

清单 4 显示了我们将如何设置这些参数:

清单 4. 设置 minpermmaxpermmaxclient 参数
vmo -p -o minperm%=5
vmo -p -o maxperm%=90
vmo -p -o maxclient%=90

我们还希望研究一下 minfreemaxfree。当我们的空闲列表中的页面下降到 minfree 之下时,VMM 将开始偷取页面,而在空闲列表增大到 maxfree 中的数目之后,我们希望停止偷取页面。具体的值应该与清单 5 中所示类似。

清单 5. 设置 minfreemaxfree 参数
vmo -p -o minfree=960
vmo -p -o maxfree=1088

CPU

在这个部分中,我们将研究 CPU 与 AIX 和 Oracle 之间的关系。我们将讨论如何优化我们的 CPU 子系统,并利用最新的 System p 创新技术来提高 Oracle 的性能。

让我们从 SMT 开始。这项重要的 POWER5 创新技术允许单个物理处理器并发地分派来自几个硬件线程的指令。在 AIX 5L Version 5.3 中,通过开启 SMT,可以将使用一个物理处理器创建的专门的分区配置为逻辑双向的方式,这项操作允许两个硬件线程同时在一个物理处理器中运行。对于 Oracle,您应该始终保持 SMT 处于开启状态(请参见清单 6)。

清单 6. 对于 Oracle,保持 SMT 处于开启状态
oot@lpar21ml16ed_pub[/home/u0004773] > smtctl

This system is SMT capable.

SMT is currently enabled.

SMT boot mode is not set.
SMT threads are bound to the same virtual processor.

proc0 has 2 SMT threads.
Bind processor 0 is bound with proc0
Bind processor 1 is bound with proc0

root@lpar21ml16ed_pub[/home/u0004773] >

让我们来运行一种性能监视实用工具,即 mpstat(请参见清单 7)。

清单 7. 运行 mpstat 实用工具
root@lpar21ml16ed_pub[/] > mpstat 1 5

System configuration: lcpu=2 ent=0.2 mode=Uncapped

cpu  min  maj  mpc  int   cs  ics   rq  mig lpa sysc us sy wa id   pc  %ec  lcs
  0    0    0    0  557  274  128    1    1 100  682 26 51  0 22 0.02  9.9  769
  1    0    0    0  289    2    2    1    1 100    0  0 27  0 73 0.01  4.1  772
  U    -    -    -    -    -    -    -    -   -    -  -  -  0 86 0.22 86.1    -
ALL    0    0    0  846  276  130    2    2 100  682  3  6  0 91 0.03 13.9 1541

尽管我们的系统只有一个物理 CPU,但是在对系统进行分析时,我们发现了两个逻辑 CPU。

另一个值得介绍的重要实用工具是 nmon,它是我多年来最喜欢的一种监视实用工具(请参见图 1)。

图 1. nmon 的输出
nmon 分析器

尽管 nmon 显示了 CPU 所进行的活动,但是您可以使用不同的标志来显示 Oracle 进程所使用的活动总量。而且,使用 nmon 分析器,您可以将信息下载到电子表格中,并将其编制为高级管理层希望看到的漂亮的图表。

您还可以对 CPU 进行一些其他的重要操作,如下所示:

  • 处理器关联——这允许进程在特定的处理器中运行。事实上,您可以将特定的进程和正在运行的进程相关联。
  • Nice 和 Renice——这些值可以更改正在运行的进程的优先级。但不建议对 Oracle 进程进行 renice 操作。

vmstat 是另一种用于监视 CPU 的、重要的实用工具,该工具也可以让您迅速地了解出现瓶颈的位置。


磁盘 I/O

在这个部分中,我们将介绍磁盘 I/O 子系统与 AIX 和 Oracle 之间的关系。我们将回顾如何监视和优化我们的 I/O 子系统,并且还将讨论与 I/O 相关的一些重要的子系统。

当我们的系统运行迟缓时,大多数经验不丰富的管理员通常都会去检查 CPU。然而,大多数问题的原因都在于磁盘 I/O 子系统。在这个部分中,我们还将研究越来越重要的异步 I/O 和并发 I/O。

异步 I/O (AIO) 服务器

AIO 可以确定 Oracle 是否将在开始新的处理工作之前等待您的 I/O 完成相应的工作。如果没有正确地优化异步 I/O,那么它可能会对 I/O 子系统写入操作的整体性能造成极大的影响。它的作用是允许系统继续进行处理,同时在后台完成 I/O 操作。因为在进行 I/O 的同时可以执行处理任务,所以这将极大地提高性能。通过使用 iostat 或者 nmon,我们可以对 AIO 子系统进行监视(请参见清单 8)。

清单 8. 使用 iostat 监视 AIO 子系统
oot@lpar21ml16ed_pub[/home/u0004773] > iostat -A 1 5

System configuration: lcpu=2 drives=2 ent=0.25 paths=2 vdisks=2

aio: avgc avfc maxg maif maxr avg-cpu: % user % sys % idle % iowait physc % entc
        0    0  312    0 4096             3.1   7.1   89.8      0.0   0.0   16.7

Disks:        % tm_act     Kbps      tps    Kb_read   Kb_wrtn
hdisk1           0.0       0.0       0.0          0         0
hdisk0           0.0       0.0       0.0          0         0

下面的列表描述了用于监视 AIO 子系统的一些参数。

  • avfc:这个参数用于报告在指定的时间间隔内每秒的平均快速路径请求计数。
  • avgc:这个参数用于报告在指定的时间间隔内每秒的平均全局异步 I/O 请求。
  • maxgc:这个参数用于报告从上一次获取这个值以来最大的全局异步 I/O 请求。
  • maxfc:这个参数用于报告从上一次获取这个值以来快速路径请求计数的最大值。
  • maxreqs:这个参数是允许的、异步 I/O 请求的最大值。

在我们的示例中,AIO 服务器不是系统瓶颈。

并发 I/O (CIO)

AIX Version 5.2 中所引入的 CIO 是您应该在 Oracle 环境中使用的一个极其重要的系统。与它的前身(直接 I/O)非常类似,在开启时,它允许文件系统 I/O 绕过 VMM,并直接从用户的缓冲区将数据传输到磁盘。CIO 允许多个线程并发地对同一个文件读取和写入数据(这个功能应该归功于 JFS2 的实现方式),从而允许多个用户同时进行读取和写入操作。要开启这个系统,您可以使用 cio 标志装入您的文件系统: # mount -o cio /orafilesystem

对于 CIO,下面是一些需要考虑的重要的要素:

  • 原始设备——有些 Oracle DBA 倾向于为其数据创建原始逻辑卷,无疑这会带来一定的性能改进,尽管如此,在大多数情况下,这样做却难以进行管理,并且我通常发现,UNIX® 管理员可能会告诉 Oracle DBA 不要这样做。随着 CIO 的出现,除非对于您所进行每项操作而言性能是至关重要的因素,并且拥有能够维护这类环境的固有复杂性的工作人员,否则我将不再使用原始逻辑卷。
  • 分散资产——您所使用的 spindles 越多,就越应该分散您的资产。您将得到更多的适配器,从而使得性能得到更大的增长。您还应该尽量将索引和重做日志与您的数据分开保存。
  • SAN——请确保仔细地研究您的 SAN;对硬件进行优化比任何 OS 级的操作能够起到更好的效果。

Oracle 工具

在这个部分中,我们将了解可以帮助您进行 AIX 管理的一些特定 Oracle 工具。

Statspack

这是一种 Oracle 的性能诊断工具,我强烈建议 Unix 管理员应该学习如何使用这个工具。一旦安装并配置该工具,它的使用并不是非常困难。在安装了 Oracle 之后,就可以在 sql 中安装该工具了。实际上有两种类型的收集选项:levelthreshold。您需要配置 level 参数,它可以控制从 Oracle 收集的数据的类型。threshold 参数用作 SQL 语句集状态摘要信息表的筛选器。

下面介绍如何安装它。在登录系统(如 Oracle)之后,启动 sqlplus,然后执行下列步骤(请参见清单 9)。

清单 9. 启动 sqlplus 来安装 Statspack
SQL*Plus: Release 10.1.0.2.0 - Production on Sun May 18 19:21:21 2008

Copyright (c) 1982, 2004, Oracle.  All rights reserved.

Enter user-name: system as sysdba
Enter password:

Connected to:
Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL> execute
SQL> @?/rdbms/admin/spcreate

Choose the PERFSTAT user's password
-----------------------------------
Not specifying a password will result in the installation FAILING

Oracle Enterprise Manager
choose the Temporary tablespace for the PERFSTAT user
-----------------------------------------------------
Below is the list of online tablespaces in this database which can
store temporary data (e.g. for sort workareas).  Specifying the SYSTEM
tablespace for the user's temporary tablespace will result in the
installation FAILING, as using SYSTEM for workareas is not supported.

Choose the PERFSTAT user's Temporary tablespace.

Oracle 企业管理器

我已经使用 Oracle 企业管理器这个工具很多年了。要开启该工具,首先需要确保在安装 Oracle 或者使用 Oracle dbca 实用工具创建数据库时允许运行该工具。在创建数据库之后,您将需要开启 OEM: $ emctl start dbconsole

下面是您需要在浏览器中输入的内容: http://lpar21ml16ed_pub:5505/em

在登录之后,您将看到与图 2 所示类似的内容。

图 2. Oracle 企业管理器
Oracle 企业管理器

在 OEM 中,您可以对许多方面进行监视和优化,事实上,有很多介绍这个实用工具的书籍。如果您在 Oracle 环境中进行工作,那么这是一个必须使用的系统。


总结

在本文中,我们介绍了与 Oracle 相关的性能优化方面的概念。在分析和优化系统时,我们研究了内存、CPU 和 I/O 子系统。我们捕获了相关数据,并且分析了各种更改所带来的结果。我们介绍了诸如并发 I/O 这样的重要的系统,以及为什么实现这些系统将有助于我们的系统实现更高的性能。我们还介绍了一些重要的内核参数、它们的用途,以及如何对它们进行优化。同时,我们说明了近年来的一些重要更改,以及对于某些参数的处理方法。我们还研究了一些特定的 Oracle 实用工具,以及它们如何为 AIX 系统管理员提供帮助。

参考资料

学习

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX
ArticleID=334137
ArticleTitle=在 AIX 中运行 Oracle
publish-date=09012008