级别: 初级 Surendra Parlapalli, IBM Corporation, Beaverton,OR
2003 年 12 月 01 日 本文介绍了调优 DB2 Extended Enterprise Edition(EEE)的技术,包括内存的使用、缓冲池以及调优工具。本文提供了 Perl 脚本以帮助您收集和分析 DB2 快照数据以及提供提示以提高数据库性能。
简介
本文介绍了调优 DB2® Universal Database Extended Enterprise Edition(EEE)性能的技术。这里所描述的主题有 DB2 EEE 基础、DB2 内存使用的有关信息、调优指南,等等。本文提供了 Perl 脚本来帮助您收集和分析 DB2 快照数据以及提供提示以提高数据库性能。本文中所提供的实例主要是针对 Windows® 平台的。
DB2 EEE 是什么?
DB2 产品家族的企业扩展版(Extended Enterprise Edition)支持跨大规模并行计算机的群集对数据进行分区。分区数据库可以维护大量数据,并可以为新的应用程序提供机会。您可以在单个系统上安装带有多个分区(逻辑节点)的 DB2 EEE,您也可以将之作为物理节点分布在多个系统上。每个节点上的数据库管理器管理数据库的一部分。DB2 EEE 体系结构可以提高决策支持和联机事务处理系统的性能。
无共享体系结构
DB2 EEE 在 Windows®、UNIX® 和 Linux 操作系统上为无共享(shared-nothing)体系结构。
图
1说明了 DB2 EEE 无共享体系结构。
图 1 无共享硬件上的 DB2 EEE 分区
将由自身数据、索引、配置文件和事务日志构成的一部分数据库称作一个
数据库分区(database partition)。
DB2 EEE 的无共享体系结构支持将数据库分区指派给一个或多个处理器。数据库分区不会共享数据,但会通过消息进行通信。
并行性
DB2 EEE 支持两类并行性:分区间和分区内。
若启用分区间并行性,对于任何给定的查询,DB2 首先识别数据所驻留的分区。然后,发出查询的节点(
协调节点)与其他分区节点相协调以找到所有合适的记录行。每个节点仅仅处理部分数据。
若启用分区内并行性,给定查询将被分为一系列操作,如扫描、连接和排序,但是这些操作所做的全部工作将在同一分区中通过不同进程并发地完成。
每个分区的 DB2 EEE 进程/线程模型
当发出 db2start 命令时,Windows 上的 DB2 EEE 实例将作为一个服务启动。而实例的启动将会为节点上的每个分区启动
db2syscs.exe。这些进程使用 IPC 或 TCP/IP 通过消息进行通信。给每个应用程序指派了一个代理程序以代表该应用程序进行工作。
数据库的激活将启动日志记录器来记录活动以及启动死锁检测器来检测死锁。而 DB2 的许可证管理器(license manager)将作为不同的进程启动并且监控许可证的使用。
DB2 如何使用内存
DB2 内存是按不同级别分配的。
图 2说明了 DB2 EEE 的内存分配情况。
全局控制块
运行数据库管理器所需的内存空间。在数据库管理器启动的时候分配该内存。快速通信管理器(Fast Communication Manager,FCM)为 DB2 EEE 提供了通信支持。而 FCM 缓冲区也是从该内存区域分配的。
数据库全局内存
运行数据库所需的内存。在激活数据库的时候分配该内存。内存段的数量由配置参数 numdb(数据库数量)来限制。而总的数据库全局内存的大小是由
表 1中所示的数据库配置参数来确定的:
表 1. 影响数据库全局内存大小的数据库配置参数
|
参数
|
描述
| | buffpage | 影响缓冲池大小(设置为 -1) | | pckcachesz | 包缓存器大小 | | util_heap_sz | 实用程序堆大小 | | dbheap | 数据库堆 | | locklist | 锁的最大存储量 |
应用程序全局内存
应用程序全局内存是指运行应用程序所需的内存。在要从应用程序接收请求的第一个代理程序要求建立连接的时候分配该内存。该内存是由数据库配置参数 app_ctl_heap_sz 控制的。所有工作于同一应用程序的代理程序将共享应用程序全局内存。
代理程序私有内存
每个代理程序都拥有自己的私有内存。低层配置参数 maxappls 和 maxagents 将限制内存段的数量:
表 2. 低层的 maxappls 和 maxagents 限制内存段
|
参数
|
描述
| | maxappls | 所有活动数据库的应用程序的最大总数目 | | maxagents | 代理程序的最大数目 |
其最大容量由
表 3中所示的各种配置参数来确定。
表 3. 影响最大私有内存的配置参数
|
参数
|
描述
| | agent_stack_sz | 代理程序堆栈大小 | | udf_mem_sz | UDF 共享内存集大小 | | applheapsz | 应用程序堆大小 | | sortheap | 排序堆大小 | | stmtheap | 语句堆大小 | | stat_heap_sz | 统计堆大小 | | query_heap_sz | 查询堆大小 | | drda_heap_sz | DRDA 堆大小 |
代理程序/应用程序共享内存
工作于同一应用程序的代理程序将共享该内存。
代理共享内存受
表 4中所示的数据库和数据库管理器配置参数的影响。
表 4.影响代理程序共享内存的配置参数
|
参数
|
描述
| | aslheapsz | 应用程序支持层堆大小 | | rqrioblk | 客户机 I/O 块大小 |
代理程序私有内存受
表 5中所示的数据库配置参数的影响。
表 5.影响应用程序共享内存的配置参数
|
参数
|
描述
| | applheapsz | 应用程序堆大小 | | agent_stack_sz | 代理堆栈大小 | | stat_heap_sz | 统计堆大小 | | udf_mem_sz | UDF 内存 | | sortheap | 排序堆大小 | | rqrioblk | 查询堆大小 | | query_heap_sz | 客户机 I/O 块 | | drda_heap_sz | DRDA 堆大小 |
图 2说明了 DB2 是如何使用内存的。请查阅
Making
DB2 Use All the Memory以获得更多信息。
图 2 DB2 的内存使用情况
创建数据库
在 DB2 EEE 中,可从 DB2 命令行处理器(CLP)提示符发出一个简单命令来创建数据库。以下示例创建了一个名为
mydb的数据库。
执行了以上语句之后,数据库
mydb将出现在实例目录中。
表空间
表空间是数据库与实际容纳数据的容器对象之间的逻辑层。DB2 EEE 支持两类表空间:系统管理的空间(SMS)和数据库管理的空间(DMS)。在 SMS 中,操作系统的文件管理器分配并管理存储空间。SMS 中所使用的容器必须是目录。在 DMS 中,数据库管理器控制存储空间。DMS 中所使用的容器则必须是预分配的文件或物理设备,如硬盘驱动器。DBA 有权选择目录表空间、临时表空间和用户表空间这三者所需的表空间类型。
如果您在创建数据库时使用默认值,则会创建下列系统管理的表空间:
-
System—— 存储系统表中的目录信息。目录包含关于数据库对象(如表、视图、索引和包)定义的信息以及关于用户对于这些对象的访问类型的安全性信息。
-
Temporary—— 存储数据库处理过程中所创建的系统临时表。
-
User—— 存储由用户所创建的数据库对象,如表和索引。
下列示例说明了数据库管理员可以如何使用 DMS 和 SMS 表空间来创建数据库。下列示例利用系统管理的目录表空间以及数据库管理的临时表空间和用户表空间创建了名为
tested的数据库。
CREATE DATABASE tested
CATALOG TABLESPACE
PAGESIZE 4096
MANAGED BY DATABASE USING
(FILE 'C:\\DATA\\CAT1.DAT' 3000,
FILE 'D:\\DATA\\CAT1.DAT' 3000)
EXTENTSIZE 12
PREFETCHSIZE 16
TEMPORARY TABLESPACE
MANAGED BY SYSTEM USING
('C:\\DATA\\TEMP1' , 'D:\\DATA\\TEMP2')
USER TABLESPACE
MANAGED BY DATABASE USING
('\\\\.\\PhysicalDrive1' 4096,
'\\\\.\\PhysicalDrive2' 4096) |
页(PAGE):组成块的表数据行称作页(page)。DB2 支持大小为 4 KB、8 KB、16 KB 和 32 KB 的页。您可以基于所使用的应用程序类型为不同的表空间选择不同的页面大小。默认情况下,DB2 使用 4 KB 的页。
页大小(PAGESIZE):为目录表空间指定页面大小为 4 KB。
扩展块(EXTENT):形成分配单元的一组页称作扩展块(extent)。在上面的示例中,
扩展块大小(EXTENTSIZE)定义 12 个 4 KB 的页组成一个扩展块。
预取(PREFETCH):该方式允许 DB2 在检索数据时预先读取数据以避免等待时间。
预取大小(PREFETCHSIZE):定义可预取的页数。
命令 LIST TABLESPACES SHOW DETAILS 除了显示以上信息之外,还显示总的页、可用的页、已用的页、空页等信息。
在由 LIST TABLESPACES 命令找到表空间 ID 之后,您可以通过发出命令 LIST TABLESPACE
CONTAINERS FOR 2 SHOW DETAIL 找到关于容器的更多信息。2 是这个表空间的 ID。该命令将列出所指定的表空间的容器。而对于每个容器,它将显示其 ID、名称、类型、可用的页以及该容器当前是否可被访问。
在 DB2 中,您可以将索引、数据置于不同的表空间。给容器使用不同的硬盘驱动器将减少 I/O 竞争。下列示例创建了表
employee。常规数据将被置于表空间 TBS1 之中,而索引数据将被置于 TBS2 之中。
CREATE TABLE employee(
E_NO INT NOT NULL,
E_NAME CHAR(20) NOT NULL )
IN TBS1 INDEX IN TBS2 |
创建缓冲池
当从硬盘驱动器读写表和索引数据时,DB2 使用缓冲池来缓存它们。在创建表空间的时候,会指派一个默认的缓冲池 IBMDEFAULTBP。DBA 在创建或更改表空间时可以将缓冲池映射到该表空间。对于每个不同页大小的表空间,应该存在一个页大小相匹配的缓冲池。
CREATE BUFFERPOOL bp1
SIZE 4000
PAGESIZE 4096 |
上面的 SQL 语句创建了一个 4000 个 4KB 页的缓冲池
bp1(4000*4K = 16000K)。
现在就可以更改当前的表空间以映射缓冲池
bp1。以下示例将 emp 表空间映射到缓冲池
bp1:
ALTER TABLESPACE emp BUFFERPOOL bp1 |
缓冲池在数据库服务器上被分配为许多共享的内存段。数据库记录是在内存的缓冲池区域里被读取和更新的。而所有的缓冲池是在数据库被激活时被分配的。当应用程序需要数据库中指定表或索引的数据时,包含该数据的页将被从硬盘转移到相关的缓冲池中。直到发生以下某种情形时,才将这些页写回到硬盘中:
- 所有的应用程序与数据库断开连接。
- 新的页需要被读入缓冲池。
- 页清除器(cleaner)可用,并且被数据库管理器激活。
缓冲池应该大到足以在内存中保留所需的数据,以便减少硬盘驱动器的活动。要利用增加的缓冲池,您必须重新绑定应用程序,以使优化器在决定其访问策略时考虑缓冲池大小。
配置数据库实例
DB2 EEE 实例或实例管理器都驻留在目录节点上。实例所属的机器(即节点 0)拥有存储了该信息的共享目录。添加到一个实例的其他数据库分区服务器被称为是
参与该实例的。
物理节点
首先在一台机器上安装该实例所属的分区数据库服务器,然后在参与了分区的数据库系统的其他每台机器上安装一个数据库分区服务器,您可以通过这样做来配置物理节点。
逻辑节点
将同一机器上有不止一个分区数据库服务器称作
多逻辑节点(MLN)配置。MLN 利用了 SMP 体系结构。可使用 db2ncrt 命令在实例上添加分区数据库服务器节点(逻辑节点)来创建 MLN 配置。
下列示例向机器
node1上的实例 BENCH 添加了一个新的数据库分区服务器。该命令将这个新节点安装到
node1并使用逻辑端口 1。
db2ncrt /n:1 /u:BENCH\\db2inst1,bmdb2 /I:BENCH /m:node1 /p:1 /h:node1
节点组
一个或多个数据库分区的命名子集称作节点组。而由不止一个数据库分区构成的子集就被称作多分区节点组。多分区节点组可以仅存在于属于同一数据库的数据库分区之中。
下列示例在所有数据库分区上创建节点组
allnodes:
CREATE NODEGROUP allnodes ON ALL NODES |
这个示例仅仅在节点 0 至 3 以及节点 5 上创建节点组 snodes:
CREATE NODEGROUP snodes ON NODE (0 TO 3, 5)
在创建了节点组之后,您必须将之与表空间关联起来以指定在哪些节点上对数据进行分区。
CREATE TABLESPACE org
IN NODEGROUP s_nodes
MANAGED BY DATABASE
USING (DEVICE '\\\\.\\PhysicalDrive1' 2000) ON NODE(0)
USING (DEVICE '\\\\.\\PhysicalDrive1' 2000) ON NODE(1)
USING (DEVICE '\\\\.\\PhysicalDrive1' 2000) ON NODE(5) |
图 3说明了给定分区的数据库对象之间的关系。
图 3. 给定数据库分区的 DB2 对象 - 关系图
调优指南
DB2 有用于监控和分析数据库性能问题的工具。
解释工具
解释(Explain)工具对于识别性能问题非常有用。它有助于判断是否需要附加索引,是否需要重写查询,锁定策略是否合适,等等。可通过下列方式捕获解释快照信息。
启用 EXPLAIN SNAPSHOT 专用寄存器
将专用寄存器 CURRENT EXPLAIN SNAPSHOT 设置为 YES 以捕获动态 SQL 语句的快照。您可以在应用程序中嵌入下列语句或者交互发出该语句。通过设置专用寄存器,将获得任何后续的合格动态 SQL 语句的解释快照(Explain snapshot)。
SET CURRENT EXPLAIN SNAPSHOT YES |
收集 SQL 过程的解释快照
存储过程需要将寄存器 EXPLSNAP 设置为 ALL 或 YES,用以收集存取方案。
db2 PREP <procedure name> EXPLSNAP {YES / ALL / NO }
YES = static SQL
ALL = static and dynamic
NO = No snapshot |
当用 EXPLSNAP YES 或 ALL 准备好包时,您就可以获得关于整个程序包的方案。
db2expln 工具描述了为系统目录表中存储的程序包中的静态 SQL 语句选中的存取方案,而 dynexpln
工具描述了动态 SQL 语句的存取方案。
下列示例使用 db2expln 来检索用户 myuser 创建的数据库
mydb 中名为
neword 的包的存取方案,并写入输出文件 output.file。
db2expln -d mydb -p neword -c myuser -o output.file
影响性能的实用程序
DB2 提供了各种实用程序来提高数据库性能,如 RUNSTATS、REORG 和 REORGCHK。
RUNSTATS 实用程序更新系统目录表中的统计信息以帮助查询优化处理。数据库管理器通过这些统计信息可以做出决策以提高 SQL 语句的性能。大量更改数据之后或运行 REORG 之后使用该实用程序。
REORG 清除表和索引中的碎片,并且可选择根据索引的次序排列表行。当另一个实用程序 REORGCHK
指明需要 REORG 时以及当性能随时间下降时(当数据的插入、更新和删除造成群集或空间利用下降时),就使用 REORG。
REORGCHK 检查系统表中的数据和应用公式以判断是否要重新组织表及其索引。REORGCHK 还可以在检查统计信息之前调用 RUNSTATS。要定期运行 REORGCHK,或者在用户注意到性能下降时运行它。
示例
下列 RUNSTATS 示例收集基于索引的所有可能统计信息:
RUNSTATS ON TABLE bench.neword WITH DISTRIBUTION AND DETAILED INDEXES ALL
下列 REORG 示例重新组织客户表,并使用系统临时表空间 TEMPSAPCE1 作为工作区域以存储中间结果。
REORG TABLE bench.customer USING TEMPSPACE1 |
下列 REORGCHK 命令检查是否需要 REORG,并且更新关于表 bench.customer 的统计信息:
REORGCHK UPDATE STATISTICS ON TABLE bench.customer |
最小化 I/O
通过利用索引、缓存、登录开销的减少、汇总表以及取数据的减少来减少 I/O。
使用索引
创建恰当的索引将提高查询的性能。DB2 索引顾问(index adviser)辅助设计表上的索引。它在下列情况中十分有用:
- 为问题查询找到最适合的索引。
- 为一组查询寻找最佳索引受到了优化应用的资源限制。
- 测试工作负载上的索引而无需创建该索引。
索引的创建有助于避免对表进行不必要的扫描和排序,加速频繁执行的查询以及确保惟一性。
创建索引之后,请使用解释(Explain)工具来确保 DB2 在使用它们。
目录缓存器、包缓存器和日志缓冲区
要设置大小适当的目录缓存器、包缓存器和日志缓冲区以提高性能。目录缓存器用于存储表描述符信息,而在先前的语句中引用表、视图或别名时将使用该信息。包缓存器设置数据库全局内存的总量以用于缓存程序包的静态和动态 SQL 语句。日志缓冲区将容纳存储器中的日志记录,直到它们被写回硬盘驱动器。当发生下列一种情况时,日志记录就被写入硬盘驱动器:
使日志缓冲区可以容纳一般事务所使用的日志空间总量是很重要的。否则,大量的日志写操作将带来糟糕的记录性能,而这主要是由日志缓冲区已满的状况导致的。
以下是用于更改这些缓存参数的命令:
db2 update db cfg for mydb using logbufsz 4096
db2 update db cfg for mydb using catalogcache_sz 1024
db2 update db cfg for mydb using pckacchesz 4096 |
提高 I/O 并行性
以下是提高 I/O 并行性的指南:
- 在多个硬盘驱动器上展开数据以减少 I/O 等待时间。
- 将数据和索引分隔到不同的表空间,以通过减少 I/O 竞争来提高 OLTP 和 OLAP 应用程序的性能。
作为 OLTP 应用程序的经验法则,可在多个设备上使用 DMS 表空间。而临时表空间和目录表空间必须置为
SMS。
日志文件的放置
对于 OLTP 应用程序,将日志文件放置在单独的物理设备上是极其重要的,因为这样它们的频繁活动就不会给在同一硬盘驱动器上的其他工作带来不良影响。
DB2 的并行 I/O
当从表空间容器读取或者向其写入数据时,如果数据库中的容器数量大于 1,DB2 就可能使用并行 I/O。然而,也存在受益于为单个容器的表空间启用并行 I/O 情形,特别是对于条带化的 RAID 设备。
启用分区内并行性
要启用优化器以选择分区内并行性,您必须按如下所示设置分区内并行的数据库管理器配置参数:
db2 update dbm cfg using intra_parallel YES |
分区内并行需要设置数据库参数 dft_degree 以指定并行度。应将该值设置为大于 1 而小于等于数据库分区可使用的处理器数目。
数据库配置参数 dft_degree 指定每个数据库默认的并行性级别。1 意味着不存在分区内并行性。而
-1 则意味着由优化器基于处理器数目和查询类型来确定并行度。
当将数据库跨节点进行分区时,将自动启用分区间并行性。
汇总表
汇总表是指其定义基于查询结果的表。因此,汇总表通常包含基于其定义所基于的表中的现有数据的预计算结果。如果 SQL 编译器判断对汇总表运行动态查询比对基表运行更高效,则将对汇总表执行查询,您也将更快地获得结果。
如何对数据分区
分区键(partitioned key)是指一列或一组列,用于确定特定行数据所存储的分区。要在 CREATE TABLE 语句中指定表的分区键。如果您没有在表空间中指定表的分区键,而该表空间又被分隔给节点组中的多个数据库分区,DB2 则会默认地由主键的第一列创建一个。而如果没有指定主键,默认的分区键则为该表上所定义的第一个不为 long 字段的列。
CREATE TABLE customer(
C_ID INTEGER NOT NULL,
C_FIRST VARCHAR(20) NOT NULL,
C_MIDDLE VARCHAR(20) NOT NULL)
IN CUSTOMER
INDEX IN CUSTOMER_IDX
PARTITIONING KEY(C_ID) USING HASHING; |
使用数据库快照监控器进行调优
数据库监控器向 DBA 提供了关于数据库和访问该数据库的应用程序的大量信息。下面列出了不同的监控器组开关:
-
SORT—— 使用的堆、溢出和执行的排序的总数。
-
LOCK—— 保存的锁、死锁和锁等待升级的数目。
-
TABLE—— 活动度量(读取行,写入行)。
-
BUFFERPOOL—— 物理读、逻辑读和定时信息。
-
STATEMENT—— 提交、回滚、选择和失败的数目。
您可以通过下列命令使用这些开关以运行快照监控器:
GET MONITOR SWITCHES
UPDATE MONITOR SWITCHES USING <
switch-name> ON/ OFF
RESET MONITOR ALL/ FOR DATABASE <
dbname>
|
调优缓冲区
缓冲区命中率表明了数据库管理器无需为服务页请求而加载来自于硬盘驱动器中的页的时间百分比;也就是说,该页已经存在于缓冲池中。缓冲池命中率越高,硬盘驱动器的 I/O 频率则越低。下列公式将通过缓冲池快照信息计算缓冲池命中率:
(1- ((pool_data_p_reads + pool_index_p_reads) /
(pool_data_l_reads + pool_index_l_reads))) * 100 |
如果命中率较低,则可以增加缓冲池页数来提高性能。
调优排序堆
快照数据排序的平均经过时间可被度量为 total_sort_time / total_sorts。随着排序性能的提高,此平均量将减少。排序堆的增加可能会消除合并阶段,因而减少排序时间。
调优排序堆阈值(sortheapthres)
总是要让阈值保持足够大以便满足所有应用程序所需的总排序堆。否则,应用程序进行管道排序的请求将遭到拒绝。数据库管理器所接受的管道排序请求百分比可以使用下列公式来计算:
100%*piped_sorts_accepted/piped_sorts_requested |
小百分比表明可通过增大参数 sortheapthres 来提高性能。
调优包缓存器(pckcachesz)
可使用下列公式计算包缓存器的命中率:
(1 - (Package cache inserts / package cache lookups)) * 100 |
较小的命中率表明应该增大参数 pckcachesz。
调优目录缓存器
可使用下列公式计算目录缓存器的命中率:
(1 - (Catalog cache inserts / catalog cache lookups)) * 100 |
较小的命中率表明应该增大 catalogcache_sz。
调优并发应用程序的最大数目(maxappls)
数据库配置参数 maxappls 指定可连接到一个数据库的并发应用程序的最大数目。增加该参数的值而不减小参数 maxlocks 或增大参数 locklist 可能会达到数据库的锁(locklist)极限而不是应用程序的极限,并因此导致普遍锁升级问题。您应该确保应用程序有足够的可用代理程序(maxagents)。
调优数据库管理器代理程序的最大数目(maxagents)
maxagents 表明用以在任何给定时间里接受应用程序请求的数据库管理器代理程序的最大数目。参数 maxagents 的值应该为允许并发访问的每个数据库中 Maxappls 值的总和。
快速通信管理器(FCM)
DB2 可以使用 FCM 在工作于同一请求的代理程序之间进行通信。FCM 的可配置参数有 fcm_num_anchors、fcm_num_buffers、fcm_num_connect 和 fcm_num_rqb。随着分区数目的增加,连接条目的数目(fcm_num_connect)和 BQS RQB(fcm_num_rqb)也将会增加。而当请求块的数目增加时,FCM 缓冲区的数目(fcm_num_buffers)也会增加。当子段(subsection)数目(即查询复杂性)增加时,BDS RQB 的数目(fcm_num_rqb)和消息锚的数目(fcm_num_anchors)也将增加。
在一个 MLN 环境中将 DB2_FORCE_FCM_BP 设置为 YES,可允许 DB2 在单独的内存段中创建 FCM 缓冲区。而当在单独的内存段中创建 FCM 缓冲区时,在同一物理节点上的不同逻辑分区的 FCM 守护进程间的通信将通过共享存储器进行。
禁用 Windows 的文件系统缓存
文件系统缓存的执行如下:
- 对于 DMS 文件容器(以及所有 SMS 容器),操作系统可在文件系统缓存器中缓存页面。
- 对于 DMS 设备容器表空间,操作系统不在文件系统缓存器中缓存页面。
当在 Windows NT® 上工作时,注册表变量 DB2NTNOCACHE 指定 DB2 是否用 NOCACHE 选项打开数据库文件。如果 DB2NTNOCACHE=ON,将不进行文件系统缓存。而如果 DB2NTNOCACHE=OFF,操作系统将缓存 DB2 文件。除了对于包含 LONG FIELDS 或 LOBS 的文件,这适用于所有数据。消除系统缓存将允许更多内存对数据库可用,以便可以增加缓冲池或排序堆。要禁用文件系统缓存,您必须将注册表变量设置为 ON:
消除系统缓存将允许更多内存对数据库可用,以便可以增加缓冲池或排序堆。
调优 Linux、UNIX 和 Windows 上的 DB2 的示例 Perl 脚本
enable_snap.pl—— 启用所有 DB2 快照(即 BUFFERPOOLS、TABLES、LOCKS,等等)。
perl gather_stats.pl <
dbname> <
time_in_secs>
—— 该脚本将所有 DB2 快照信息搜集到名为 dbrun.snap 的文件中。
perl buffhitratio.pl dbrun.snap—— 该脚本提供了每个缓冲池的数据和索引页命中率。
$ perl buffhitratio.pl dbrun.snap
BP Name Logical Rd Physical Rd Writes Async Rds Async Wrts Hit Ratio%
------------------------------------------------------------------------------
DATA 1538 133 19 117 0 91.35%
INDX 3084 38 2 0 0 98.77%
IBMDEFAULTBP DATA 1538 133 19 117 0 91.35%
IBMDEFAULTBP INDX 3084 38 2 0 0 98.77%
IBMDEFAULTBP DATA 1538 133 19 117 0 91.35%
IBMDEFAULTBP INDX 3084 38 2 0 0 98.77%
HINT :
It is good have high hit ratio; if not increase your bufferpool size.
|
perl cathitratio.pl dbrun.snap—— 该脚本提供了目录缓存器的命中率。
$ perl cathitratio.pl dbrun.snap
Cache Inserts Cache Lookups % Hit Ratio
-------------------------------------------------------
10 20 50%
HINT :
If hit ratio is less than increase catalog cache size
|
perl packhitratio.pl dbrun.snap—— 该脚本提供了包缓存器的命中率。
$ perl packhitratio.pl dbrun.snap
Package Cache Inserts Package Cache Lookups % Hit Ratio
--------------------------------------------------------------
1 244 99%
HINT :
Increase the catalog cache size if the hit ratio is less
|
perl sortthresh.pl dbrun.snap—— 该脚本提供了已服务的排序数目和被拒绝的排序数目。
$ perl sortthresh.pl dbrun.snap
Piped sorts requested Piped sorts accepted % Serviced Num Sorts Rejected
--------------------------------------------------------------------------------
1 1 100% 0
HINT :
If % Serviced is low then increase sheapthresh
If Num Sorts Rejected is higher then increase sortheap or sheapthreash is too small
|
perl sorttime.pl dbrun.snap—— 该脚本提供了每个排序的平均经过时间。
$ perl sorttime.pl dbrun.snap
Total Sort Time (ms) Total Sorts Average Elapsed Time per sort
-----------------------------------------------------------------
100 10 10
HINT :
As the performance improves, this average will decrease
|
perl tbs_usage.pl <dbname>—— 该脚本提供了给定数据库的所有表空间的空闲和已用空间。
$ perl tbs_usage.pl tpcd
connect to ebuis
Database Connection Information
Database server = DB2/LINUX 7.2.2
SQL authorization ID = EBUIS
Local database alias = EBUIS
Ts_Id Ts_Name Total Used Free Number_of_files
------------------------------------------------------------------
0 SYSCATSPACE 10M 10M 0M 1
1 TEMPSPACE1 0M 0M 0M 1
2 USERSPACE1 0M 0M 0M 1
3 BENCHTEMP 1000M 0M 999M 2
4 ORDERS_DATA 1000M 95M 903M 2
5 ORDERS_INDEX 1000M 18M 981M 2
6 LINEITEM_DATA 1000M 398M 600M 2
7 LINEITEM_INDEX 1000M 138M 861M 2
8 BENCHINDX 1000M 22M 977M 2
9 BENCHDATA 1000M 94M 905M 2
|
perl locklist.pl dbrun.snap <dbname> ——
该脚本显示总的锁列表、使用中的平均锁列表以及平均锁列表利用率。
$ perl locklist.pl dbrun.snap ebuis
Locklist (4K Page) Lock_list_in_use(4K Page) Lock list utilization
--------------------------------------------------------------------------------
100 6 6%
HINT :
If Lock list utilization is low then decresae the locklist
If Lock list utilization is more then increase the locklist
|
perl disable_snap.pl—— 禁用所有的 DB2 快照。
参考资料
关于作者  | 
|  |
Surendra Parlapalli拥有超过八年的 IT 行业经验,并且获得了计算机科学的硕士学位。他是一位 IBM 认证的 DB2 DBA、Application Developer 和 Microsoft 认证的 Windows NT 的解决方案开发专家。可通过
sparlapalli@us.ibm.com与他联系。
|
对本文的评价
|