Topic: DB2中使用所有内存

ERP俱乐部

第 1 页 总共 1 页 [共有 1 条记录]


Posted by charlieokok on 2007-12-07 03:01 下午
来源:ZDNet China软件技术专区

  现在,在 RISC 和 Sparc 世界中,64 位体系架构正逐步成为标准,它允许商业性 UNIX(如 AIX、HP-UX 和 Solaris 等)为您喜爱的关系数据库提供大量内存。32 位内存的可寻址能力大约等于 4 GB,而许多 UNIX 机器装有 20 到 100 GB 内存,您肯定希望使用这样大的内存。Intel 世界也不落后多少:现在,操作系统、编译器和数据库软件实验室里,正在 64 位 Intel 芯片上运行的 Linux 和 Windows 2000 是一个现实,而且不久会在您周围的网站上销售。

  那么,如果硬件和操作系统都已经为使用巨大的内存做好了准备,并且数据库也能够利用大内存,那么您如何将它们结合起来并使之工作呢?使用 DB2版本 7,首先要弄清楚的是,在内部,DB2假设使用 32 位内存和硬件。要利用更大的内存,必须告诉 DB2可以使用它以及如何使用它。请勿责备 DB2— 大多数 DB2客户机和许多 DB2服务器在未来数年中将运行在 32 位 Intel 机器上。并且即使 DB2在您机器上检测到有 96 GB 内存,谁又能肯定您希望 DB2使用所有内存,而不是与其它应用程序共享这个内存呢?

  当使用这种大内存时,您有几种选择。最显而易见的选择是创建 64 位 DB2实例。现在,AIX、Solaris 和 HP-UX 上的 DB2版本 7 都支持这种操作。如果您拥有版本 7.1,则必须下载修订包 1 以安装 64 位 DB2库。如果您拥有版本 7.2 或更新版本,则不必为了创建 64 位 DB2实例而安装修订包。要创建 64 位 DB2实例,可以使用 db2icrt 命令,并指定参数 -w 的值为 64。例如:

db2icrt -w 64 -u db2fenc1 db2inst1

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。下面的图 1 和 2 分别说明了 AIX 和 Solaris 上 DB2的 32 位内存模型。

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

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