管理:性能

| | |

比较 32 位环境和 64 位环境中的 DB2_FORCE_FCM_BP 注册表变量

|

在启用 DB2_FORCE_FCM_BP 注册表变量后,可用于其他用途(尤其是数据库缓冲池)的共享内存段会减少。因此,启用 |DB2_FORCE_FCM_BP 注册表变量会减小数据库缓冲池的最大大小。请注意,由于 64 位环境中有大量的可用共享内存段,上述这种共享内存段数量减少的情况应该只有在 32 位环境中才是问题。

| | |

表创建后推荐的 RUNSTATS

|

首次创建某个表后,系统目录统计信息将设置为 -1,表示此表没有统计信息。在收集到统计信息之前,DB2 UDB |将使用 SQL 语句编译和优化的缺省值。如果新值与缺省值不一致,更新表或索引统计信息可能会失败。因此,应在手工更新表或索引的统计信息之前,对其运行 runstats 命令。

| | |

SQL1169N 的新原因码

|

SQL 错误消息 SQL1169N 有一个新的原因码 5,用于表示说明表的列太小。

|| | |

针对 MDC 表的优化策略

|

以下文本是对《管理指南:性能》中第 6 章 『了解 SQL 编译器』的更新。

|

即使 RID 索引是优化方案的一部分也可使用 MDC 转出,而无论 DELETE 语句中是否存在 WHERE 子句。 |因此,在列出允许扩展以及使用更有效的方法来删除行所必须符合的条件时,条件“除非 DELETE 语句中没有 WHERE子句,否则优化器不会选择 RID 索引来查找要删除的行”应被除去。

|

不仅如此,您还可以判断 MDC 转出是否有效,因为 db2expln 输出显示了短语“单元格删除”。 | 请注意:db2exfmt 不显示此信息。

|

以下文本是对『附录 A DB2 注册表和环境变量』的更新:

|

应更改 DB2_MDC_ROLLOUT 的描述,以从列表中除去条件“除非 DELETE 语句中没有 WHERE子句,否则优化器不会选择 RID 索引来查找要删除的行”。

| | |

澄清 NEWLOGPATH、MIRRORPATH 和 OVERFLOWLOGPATH 配置参数的描述

|

如果您在 DB2 UDB 企业服务器版环境中更新 newlogpath、mirrorpath 或 overflowlogpath 配置参数值,则节点号将附加到路径名后,而不考虑系统上节点的数量。此规则对 DB2 UDB 企业服务器版环境中的单一分区和多分区系统都有效。

| | |

DB2_COLLECT_TS_REC_INFO 缺省值

|

DB2_COLLECT_TS_REC_INFO 的缺省值是 ON。在 DB2 UDB V8.1 修订包 7 中,DB2_COLLECT_TS_REC_INFO 注册表变量的缺省值已更改为 ON。当前文档将此变量的缺省值指定为 |OFF 是不正确的。

调节器实用程序

调节器实例由一个前端实用程序和一个或多个守护程序组成。 您启动的调节器的每个实例特定于数据库管理器的一个实例。 缺省情况下,当启动调节器时,调节器守护程序在分区数据库的每个分区上启动。 但是,可以指定在要监视的单一分区上启动守护程序。

注:
  1. 当调节器活动时,其快照请求可能会影响数据库管理器性能。 要提高性能,增大调节器唤醒时间间隔以降低其 CPU 使用。
  2. 调节器守护程序在运行期间向本地实例发出 LOCAL 快照。因此,包含 setlimit 子句的任何规则都适用于来自 LOCAL 快照输出的输出,而不是来自 GLOBAL 快照的聚集结果。

每个调节器守护程序收集关于对数据库运行的应用程序的信息。 然后,调节器守护程序会针对您在此数据库的调节器配置文件中指定的规则检查此信息。

选择重组表的方法

考虑 In-place 表重组(而不是传统表重组)时,要了解 In-place 表重组需要更多日志空间。

由于 In-place 表重组记录其活动以便在出现意外故障后有可能恢复,因此它需要的日志空间要大于传统重组的日志空间。

In-place 重组方法所需的日志空间可能是所重组的表大小的数倍。所需的空间数量取决于要移动的行数和表中索引的数量和大小。

推荐:如果使用最少维护窗口执行 24x7 操作,请选择 In-place 表重组方法。

DMS 表的联机表重组允许在重组过程中对表所在的表空间启动联机备份操作。在截断阶段可能会存在重组操作的锁定等待。

有关执行这些表重组方法的详细信息,请参阅 REORG TABLE 语法描述。

FCM 内存的大页支持(AIX 5L 64 位)

在 AIX(R) 5L 64 位上,DB2_LARGE_PAGE_MEM 注册表变量现在支持关键字 FCM。

缺省情况下,在 AIX(R) 5L(TM) 64 位系统上,FCM 内存在 DBMS 内存集中。但是,如果启用了注册表变量 DB2_FORCE_FCM_BP,则 FCM 内存在其自己的内存集中。在 AIX 5L(TM) 64 位系统上,DB2_LARGE_PAGE_MEM 支持 DBMS 内存集的规范。当 FCM 内存在 DBMS 内存集中时,将对该内存集启用大页支持,FCM 内存将在大页中。当 FCM 内存在其自己的内存集中时,必须将 FCM 关键字添加至 DB2_LARGE_PAGE_MEM 注册表变量的值,以对 FCM 内存启用大页。

DB2_RESOURCE_POLICY 注册表变量接受新元素

从 DB2 通用数据库(TM)(UDB)版本 8.2.2(功能等同于版本 8.1 修订包 9)开始,由 DB2_RESOURCE_POLICY 注册表变量指定的配置文件接受 SCHEDULING_POLICY 元素。可在某些平台上使用 SCHEDULING_POLICY 元素来选择:

可单独使用注册表变量 DB2PRIORITIES 和 DB2NTPRICLASS 来控制操作系统调度策略和设置 DB2 代理进程优先级。

但是,在资源策略配置文件中指定 SCHEDULING_POLICY 元素就可以同时指定调度策略和相关联的代理进程优先级。

示例 1

选择 AIX SCHED_FIFO2 调度策略并提高 db2 日志的写入和读取进程的优先级:

<RESOURCE_POLICY>
   <SCHEDULING_POLICY>
      <POLICY_TYPE>SCHED_FIFO2</POLICY_TYPE>
      <PRIORITY_VALUE>60</PRIORITY_VALUE>

      <EDU_PRIORITY>
         <EDU_NAME>db2loggr</EDU_NAME>
         <PRIORITY_VALUE>56</PRIORITY_VALUE>
      </EDU_PRIORITY>

      <EDU_PRIORITY>
         <EDU_NAME>db2loggw</EDU_NAME>
         <PRIORITY_VALUE>56</PRIORITY_VALUE>
      </EDU_PRIORITY>
   </SCHEDULING_POLICY>
</RESOURCE_POLICY>
示例 2

替代 Windows 上的 DB2NTPRICLASS=H。

<RESOURCE_POLICY>
   <SCHEDULING_POLICY>
      <POLICY_TYPE>HIGH_PRIORITY_CLASS</POLICY_TYPE>
   </SCHEDULING_POLICY>
</RESOURCE_POLICY>

新的系统环境变量(Linux)

修订包 8 中添加了 DB2_MAPPED_BASE 和 DB2DBMSADDR 系统环境变量。

仅建议高级用户才使用这些注册表变量。

DB2_MAPPED_BASE

变量名
DB2_MAPPED_BASE
0 OR(十六进制)31 位和 32 位地址范围中的虚拟地址 OR NULL(未设置)
操作系统
x86 上的 Linux(TM) 和 zSeries(R) 上的 Linux(31 位)
描述
DB2_MAPPED_BASE 注册表变量可以用来增大可用于 DB2 通用数据库(TM)(UDB)的邻接虚拟地址空间量,这是通过重新定位特定进程的共享库的连接地址来实现的。邻接虚拟地址空间对于使可用于 DB2(R) UDB 的数据库共享内存量达到最大化是很重要的。此变量仅对于将 mapped_base 文件包括在 proc 文件系统中的进程标识目录的分发产品有效。

如果未设置此变量,则 DB2 UDB 将尝试把共享库重新定位至虚拟地址 0x10000000。

还可以将该注册表变量设置为 31 位和 32 位地址空间范围内的任何虚拟地址(十六进制)。

注:
不正确的地址会导致 DB2 UDB 产生严重问题,这些问题包括无法启动 DB2 UDB,甚至无法连接至数据库。不正确的地址就是与内存中已经在使用的区域相冲突的地址或者是预先指定为用于其他某些用途的地址。要解决此问题,可使用以下命令来将 DB2_MAPPED_BASE 变量重新设置为 NULL:
db2set DB2_MAPPED_BASE=

以下消息在 db2diag.log 文件中可能会多次出现,这是因为对每个逻辑节点都需要进行一次此更改:

ADM0506I  DB2 已自动将“mapped_base”内核参数从
“0x40000000(hex) 1073741824(dec)”更新为建议值
“0x10000000(hex) 268435456(dec)”。

仅当成功设置了该注册表变量时才会出现此消息,并且它将包括共享库被重新定位至的地址。

DB2DBMSADDR

变量名
DB2DBMSADDR
0x09000000 到 0xB0000000 范围内的虚拟地址,其增量为 0x10000
操作系统
x86 上的 Linux 和 zSeries 上的 Linux(31 位)
描述
以十六进制格式指定缺省数据库共享内存地址。
注:
不正确的地址会导致 DB2 UDB 产生严重问题,这些问题包括无法启动 DB2 UDB,甚至无法连接至数据库。不正确地址的示例就是与内存中已经在使用的区域相冲突的地址或者是预先指定为用于其他某些用途的地址。要解决此问题,可使用以下命令来将 DB2DBMSADDR 变量重新设置为 NULL:
db2set DB2DBMSADDR=

可以将此变量与 DB2_MAPPED_BASE 一起设置,也可以单独设置此变量,以便精细调整 DB2 UDB 进程的地址空间布局。此变量将把实例共享内存的位置从它在虚拟地址 0x20000000 的当前位置更改为给定的新值。

新增通信注册表变量

已在版本 8.2 中添加了 DB2TCP_CLIENT_RCVTIMEOUT 注册表变量。

表 12. 通信变量
变量名 操作系统
描述
DB2TCP_CLIENT_RCVTIMEOUT 所有

缺省值为 0(未设置)

值:0 至 32767 秒

指定 TCP/IP 接收操作中客户机等待数据的秒数。

如果注册表变量未设置或已设置为零,则没有超时。如果 TCP/IP 在超时值到期之前接收到返回的数据,则应用程序将如常继续。如果在数据返回前超时值到期,连接将关闭。

注:
此注册表变量仅适用于 DB2 客户机和 DB2 网关的客户端。它不适用于 DB2 服务器。

新增性能变量

已在版本 8.2 中添加了 DB2_LARGE_PAGE_MEM 性能变量。

表 13. 性能变量
变量名 操作系统
描述
DB2_LARGE_PAGE_MEM

仅 AIX(R) 5.x 64 位

Linux

缺省值为 NULL

使用 * 指示应使用大页内存的所有适用内存区域或者应使用大页内存的特定内存区域的用逗号分隔的列表。可用区域根据操作系统有所变化。在 64 位 AIX 5.x 上,可指定下列区域:DB、DBMS 或 PRIVATE。在 Linux 上,可指定以下区域:DB。

大页内存仅对于 DB2 通用数据库(UDB)AIX 5L(TM) 版 64 位版和 DB2 UDB Linux 版才是受支持的。

DB2_LARGE_PAGE_MEM 注册表变量用于在 AIX 5.x 或带有适当内核支持的任何 Linux 体系结构上运行时启用大页支持。此注册表变量不推荐使用 DB2_LGPAGE_BP 注册表变量,该变量只能用于对数据库共享内存区域启用大页内存。现在,可通过设置 DB2_LARGE_PAGE_MEM=DB 启用大页内存。提到使用 DB2_LGPAGE_BP 注册表变量启用大页的任何文档可被视为设置 DB2_LARGE_PAGE_MEM=DB。

大页的使用主要是为了改进性能以获取高性能计算应用程序。使用大量虚拟内存的密集内存访问型应用程序可以通过使用大页来提高性能。为使 DB2 UDB 能够使用大页,必须先将操作系统配置为使用大页。

启用大专用页将显著增加 DB2 UDB 内存使用量,而每个 DB2 UDB 代理进程将至少消耗 1 个大页(16MB)的物理内存。要对 64 位 DB2 UDB AIX 版上的代理进程专用内存启用大页(DB2_LARGE_PAGE_MEM=PRIVATE 设置),除了在操作系统上配置大页之外,还必须满足下列条件:

  • 实例所有者必须拥有 CAP_BYPASS_RAC_VMM 和 CAP_PROPOGATE 功能。
  • 内核必须支持允许进程在运行时修改其页大小的接口。 .

在 64 位 DB2 UDB AIX 版上,启用此变量将降低共享内存段的大小,使数据库内存的需求降至最低。缺省情况是创建 64 GB 内存段:有关更多详细信息,请参阅数据库共享内存大小(database_memory)数据库配置参数。这将避免在 RAM 中插入过量的共享内存。

通过设置此变量,动态增加总数据库共享内存配置(例如,增加缓冲池的大小)的能力将受到限制。

在 Linux 上,还需要有 libcap.so 库可用。必须先安装此库才能使此选项起作用。如果此选项已打开,且该库不在系统上,则 DB2 UDB 将禁用大内核页并继续如常运作。

在 Linux 上,要验证大内核页是否可用,发出以下命令:

      cat /proc/meminfo

如果可用,应出现下列三行(带有不同数字,这取决于在机器上配置的内存量):

      HugePages_Total:   200
      HugePages_Free:    200
      Hugepagesize:    16384 KB

如果没看到这几行,或者如果 HugePages_Total 为 0,则需要配置操作系统或内核。

SQL 编译器变量

以下更新适用于《管理指南:性能》的附录 A『DB2 注册表和环境变量』中的主题“SQL 编译器变量”:

当 DB2 编译器变量 DB2_MINIMIZE_LISTPREFETCH 和 DB2_INLIST_TO_NLJN 的其中一个变量或两个变量都设置为 ON 时,它们都保持活动,即使指定了 REOPT(ONCE) 也是如此。

配置参数更新

以下是对配置参数文档的更新:

认证 - 认证类型

认证类型(认证)数据库管理器配置参数还接受下列值:

util_impact_lim - 实例影响策略

从 DB2 通用数据库版本 8.2 开始,实例影响策略util_impact_lim)数据库管理器配置参数的缺省值就从 100 更改为 10。

sysadm_group、sysmaint_group、sysctrl_group 和 sysmon_group

在所有平台上,下列数据库管理器配置参数全部都可以接受长度为 30 个字节(或更少)的组名:

“数据库管理器配置参数总结”这一主题中的表包含这些数据库管理器配置参数的不正确的数据类型。所有情况下的正确值都是 char(30)。

estore_seg_sz - 扩展存储器内存段大小

在基于 Windows(R) 的平台上,扩展存储器内存段大小数据库estore_seg_size)配置参数的最大大小为 16 777 216。

hadr_timeout - HADR 超时值

HADR 超时值hadr_timeout)数据库配置参数的正确上限为 4 294 967 295。

locklist - 锁定列表的最大存储器

锁定列表的最大存储器locklist)数据库配置参数的文档指出仅对本地客户机服务的 Windows 64 位和 32 位服务器的最大值为 60 000。此值是不正确的,应该为 524 288。

num_db_backups - 数据库备份数

数据库备份数num_db_backups)数据库配置参数的值的范围不正确。正确范围是 0 到 32 767。

SQLDBCONF 数据库配置参数文件

从 DB2 通用数据库(UDB)版本 8.1 到版本 8.2 之后, DB2 UDB 将使用新的 16 KB 数据库配置参数文件,其名称为 SQLDBCONF。(在版本 8.1 中,数据库配置参数文件只有 4 KB,其名称为 SQLDBCON)。

对 DB2_HASH_JOIN 缺省值的更改

从版本 8.1 开始,注册表变量 DB2_HASH_JOIN 缺省情况下将设置为 ON。

应该使用散列连接变量,但是需要调整它才能获得最佳性能。

如果可以避免散列循环和溢出至磁盘,则散列连接性能将是最佳的。要调整散列连接性能,估计可用于 sheapthres 参数的最大内存量,然后调整 sortheap 参数。增大该参数的值,以尽可能避免存在太多散列循环和磁盘溢出,但是,不要达到 sheapthres 参数指定的限制。

有关更多信息,请参阅《管理指南:性能》手册中的“连接方法”主题。

不推荐使用 DB2NTNOCACHE 注册表变量

先前通过 DB2NTNOCACHE 实现的功能可通过在 CREATE TABLESPACE 或 ALTER TABLESPACE 语句上指定 NO FILE SYSTEM CACHING 子句在表空间级别实现。有关用法的详细信息,参阅 SQL 引用。DB2NTNOCACHE 注册表变量在将来的发行版中会被除去。

说明表和说明信息的组织

说明表可能对多个用户是公共的。 但是,可对一个用户定义这些说明表,并可对使用相同名称的每个其他用户定义别名以指向定义的表。或者,可在 SYSTOOLS 模式下定义说明表。如果在用于动态 SQL 的用户会话标识或用于静态 SQL 的语句授权标识下未发现任何其他说明表或别名, 则说明设施将缺省为 SYSTOOLS 模式。共享公用说明表的每个用户必须对那些表有插入许可权。公用说明表的读许可权通常也应限于分析说明信息的用户。

捕获说明信息的准则

如果在编译 SQL 语句时请求说明数据,则捕获该数据。 考虑您期望在请求说明数据时如何使用捕获的信息。

捕获说明表中的信息

db2CfgGet API 中的附加返回码 collate_info 参数

整理信息参数仅可使用 db2CfgGet API 显示。它不能通过命令行处理器或控制中心来显示。

配置类型
数据库
参数类型
参考

此参数提供 260 个字节的数据库整理信息。前面 256 个字节指定数据库整理顺序,其中字节“n”包含代码点的排序权重,该代码点在数据库代码页中的基本十进制表示为“n”。

最后 4 个字节包含关于整理顺序类型的内部信息。collate_info 的最后 4 个字节是整数。该整数依据平台的字节存储次序。可能的值包括:

如果使用此内部类型信息,在另一平台上检索有关数据库的信息时需要考虑字节逆转。

可在创建数据库时指定整理顺序。

自动设置缺省预取大小和更新缺省值

从 DB2 通用数据库(UDB)版本 8.2 开始,可以对表空间使用 AUTOMATIC 预取大小。当表空间的容器数更改时,DB2 UDB 将自动更新预取大小。

扩展了 DB2_PARALLEL_IO 注册表变量的语法,以识别具有不同 I/O 并行性特征的容器。通过扩展的语法,不同表空间的容器可以具有不同的 I/O 并行性特征。当为表空间指定的预取大小为 AUTOMATIC 时,将使用每个表空间的 I/O 并行性特征。如果启用了 DB2_PARALLEL_IO 注册表变量,但是未使用用于标识表空间的特定 I/O 并行性特征的扩展语法,则假定使用缺省级别的并行性。缺省级别为 RAID 5(6+1)。

仅当发出了用于更改表空间的预取大小或者更改容器数(使用 ADD/DROP/BEGIN NEW STRIPE SET/ADD TO NEW STRIPE SET)的 ALTER TABLESPACE 语句时,才会刷新优化器使用的预取大小信息。如果每个容器注册表设置的物理磁盘数发生更改,则应该发出 ALTER TABLESPACE <table space name> PREFETCHSIZE AUTOMATIC 语句来刷新优化器信息(除非已经发出了用于刷新优化器信息的 ALTER TABLESPACE 语句)。

如果重定向或者复原了表空间以使用不同的容器数,则通过发出 ALTER TABLESPACE <table space name> PREFETCHSIZE AUTOMATIC 语句来刷新优化器信息。如果一个表空间中有多个条形集,则使用条形集中的最大容器数来计算预取大小。如果通过计算获得的预取大小超过了最大大小(32 767 页),则将小于最大值的容器数的最大乘积用作预取大小。

在 DB2 UDB 企业服务器版环境中,如果表空间使用 AUTOMATIC 预取大小,则不同数据库分区上的预取大小可能不同。这种情况是存在的,这是因为不同的数据库分区用来计算预取大小的容器数可能不同。为了生成查询访问方案,优化器使用数据库分区组中的第一个分区的预取大小。

[ 页的顶部 |上一页 | 下一页 | 目录 ]