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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-12 23:42:37

   来源:DB2 开发者园地    作者:Blair Adamache

描述 64 位环境中 DB2 使用的手册位于:

http://www-4.ibm.com/cgi-bin/db2www/data/db2/udb/winos2unix/support/document.d2w/report?fn=db2q9e71frm3toc.htm

  1 + 1 = 2。2 的 32 次方 = 极大的数。

  每个 32 位 DB2 实例能够对 4 GB 内存寻址。通常,您希望将大部分内存给缓冲池专用。但是,AIX、HP-UX 和 Windows 上的内存分段会将最大缓冲池的大小限制在 4 GB 以内。即使是在 32 位世界中拥有十分干净的内存模型的 Solaris 上,用于 DB2 缓冲池的内存也不能超过 3.35 GB;4 GB 内存空间的其余内存必须专用于 DB2 的其它共享内存用途。(幸运的是,对于 64 位世界中的所有操作系统,内存模型都更干净。)在 HP-UX 上,32 位 DB2 实例所能够创建的最大缓冲池大约是 800 MB。在 HP-UX 上,只有通过使用 32 位 HP-UX 上的 Memory Windows 来运行多个实例,才能使用 1 GB 以上的缓冲池。(DB2 发行说明(Release Notes)中描述了 HP Memory Windows。)在 Windows 上,缓冲池被限制为 3 GB,AIX 上是 1.75 GB,而 Linux 上大约是 1 GB。

  在运行 32 位 DB2 的大内存系统上,要将大量内存给予缓冲池,最简单方式就是在一个 DB2 企业扩展版(Enterprise-Extended Edition (EEE))配置中运行多个逻辑 DB2 实例。只需要运行操作系统的一个实例,这将有助于节省开销和允许多个 DB2 实例之间通过共享内存而不是通过 TCP/IP 或通信交换机来彼此通信。使用 DB2 的无共享体系结构,每个实例可以在它自己的数据库分区之内愉快地对 4 GB 内存寻址。在大多数 DB2 TPC-H 基准测试中 — 它通常让 DB2 EEE 在规模达 300 GB 或更大的数据库上运行决策支持查询 — 一个大型 SMP 为每个 DB2 节点划分多至 4 GB 内存(每个节点都是一个运行它自己的 DB2 实例的数据库分区)。

  DB2 还可以使用其它三种方法来利用大内存机器。在 AIX、Solaris 和 Windows 上,DB2 支持扩充存储器(Extended Storage)(也称为 ESTORE)。这允许 DB2 将超过 32 位内存模型中最大可用内存的内存用于系统临时表(用于排序)和只读用户数据。在 DB2 从磁盘获取数据时就由 DB2 判断哪些数据是可以认为是只读,但是需要配置 DB2 以使用扩充存储器。

  让我们考虑一种典型情况:您正在设计一个数据库,在其中希望将一个表尽可能多地放入内存。首先,更新数据库管理器配置并告诉它要使用多少扩充存储段(num_estore_segs)。这个值的缺省设置为零。n 取多大值将取决于表有多大、可用的内存有多少以及您希望这个特定表用多少内存。假定我们正在使用 Solaris,它有 6 GB 内存 — 在 4 GB 内存空间之上的 2GB 内存用于扩充存储器(也称为 estore):

update db cfg for sample using num_estore_segs n

  用“扩充存储器存储段大小”(estore_seg_sz)数据库配置参数来定义 estore 段的大小:

update db cfg for sample using estore_seg_sz 32000

  

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