DB2中内存的使用(1) - 51CTO.COM

来源:百度文库 编辑:神马文学网 时间:2024/04/28 23:08:06
51CTO首页 | 新闻 | 专题 | 论坛 | 博客 | 技术圈 | 读书 | 技术频道 | CIO | 存储 | 地图 | English
  • 组网建网
  • 网络安全
  • 服务器
  • 操作系统
  • 虚拟化
  • 开发
  • 资讯前沿
  • 业界观察
  • 应用体验
  • 杀手技术
  • 新闻资讯
  • 技术中心
  • 互动视频
  • 专题汇聚
  • 买HP服务器获赠加油卡
  • 节约服务器开销有哪些绝招?
  • 思杰(Citrix)虚拟化技术社区
  • 下载白皮书解决数据库扩展难题
首页 | 新闻 | Oracle | DB2 | SQL Server | MySQL | 企业应用 | 数据库开发 | 教程 | 全部文章
您所在的位置: 首页 > 数据库 > DB2 >

DB2中内存的使用(1)

http://database.51cto.com  2005-12-01 10:17    IBM中国  我要评论()
  • 摘要:本文将向您讲解 DB2 内存使用的基础,以及共享内存和私有内存的概念。这些内容同时适用于 32 位和 64 位的系统。
  • 标签:DB2
  • Oracle帮您准确洞察各个物流环节

简介
理解 DB2 如何使用内存,可以防止过度分配内存,并有助于对内存的使用进行调优,从而获得更好的性能。

本文将向您传授 DB2 内存使用的基础,以及共享内存和私有内存的概念。这些内容同时适用于 32 位和 64 位的系统。虽然对于 64 位系统有一些限制,但是在未来的一段时间内还不大可能触及这些限制。因此,我们将焦点放在影响 32 位系统的内存限制,并对之进行详细的讨论。

我们首先讨论一般情况下 DB2 如何使用内存,接着讨论内存管理如何随着平台(AIX、Sun、HP、Linux 和 Windows)的不同而变化,以及它们对 DB2 的影响。最后,我们将给出一些实际生活中客户处境/问题以及他们的解决方案的有意义的例子。本文的内容适用于 DB2 version 8。

DB2 内存结构概述

图 1中说明了 DB2 内存结构。这种内存结构在所有平台上都是一致的。 注意:在多分区环境中,下面的图适用于多分区实例中的每个分区。

图 1 - DB2 内存结构

DB2 在 4 种不同的内存集(memory set)内拆分和管理内存。这 4 种内存集分别是:

  • 实例共享内存(instance shared memory)
  • 数据库共享内存(database shared memory)
  • 应用程序组共享内存(application group shared memory)
  • 代理私有内存(agent private memory)

每种内存集由各种不同的内存池(亦称堆)组成。图 1 也给出了各内存池的名称。例如, locklist是属于数据库共享内存集的一个内存池。 sortheap是属于代理私有内存集的一个内存池。

我们将详细讨论每一种内存集。

实例共享内存

每个 DB2 实例都有一个实例共享内存。实例共享内存是在数据库管理器启动(db2start)时分配的,并随着数据库管理器的停止(db2stop)而释放。这种内存集用于实例级的任务,例如监控、审计和节点间通信。下面的数据库管理器配置(dbm cfg)参数控制着对实例共享内存以及其中个别内存池的限制:

  • 实例内存( instance_memory)。
  • 监视器堆( mon_heap_sz):用于监控。
  • Audit Buffer( audit_buf_sz):用于 db2audit 实用程序。
  • Fast Communication buffers ( fcm_num_buffers):用于分区之间的节点间通信。仅适用于分区的实例。

instance_memory参数指定为实例管理预留的内存数量。默认值是 AUTOMATIC。这意味着 DB2 将根据监视器堆、审计缓冲区和 FCM 缓冲区的大小计算当前配置所需的实例内存数量。此外,DB2 还将分配一些额外的内存,作为溢出缓冲区。每当某个堆超出了其配置的大小时,便可以使用溢出缓冲区来满足实例共享内存区内任何堆的峰值需求。在这种情况下,个别堆的设置是 限制的,它们可以在内存使用的峰值期间进一步增长。

如果 instance_memory被设置为某一个数字,则采用 instance_memorymon_heap_szaudit_buf_szfcm_num_buffers的和之间的较大者。这时,对实例内存就施加了一个硬性的限制,而不是软限制。当达到这个限制时,就会收到内存分配错误。出于这个原因,建议将 instance_memory的设置保留为 AUTOMATIC

如果 instance_memory被设为 AUTOMATIC,则可以使用下面的命令来确定它的值:

  • db2 attach to instance_name(其中 instance_name是实例的名称)
  • db2 get dbm cfg show detail

下面的输出表明有 42 MB 的内存被预留给实例共享内存集(10313 页 * 4096 字节/页):

  • Size of instance shared memory (4KB) (INSTANCE_MEMORY) = AUTOMATIC(10313) AUTOMATIC(10313)

instance_memory参数只是设置了实例共享内存的限制。它并没有说出当前使用了多少内存。要查明一个实例的内存使用情况,可以使用 DB2 内存跟踪器工具 db2mtrk。例如,

  • db2start
  • db2mtrk -i -v
  • Memory for instance
  • FCMBP Heap is of size 17432576 bytes
  • Database Monitor Heap is of size 180224 bytes
  • Other Memory is of size 3686400 bytes
  • Total: 21299200 bytes

上面的例子表明,虽然预留给实例共享内存集的内存有 42 MB,但在 db2mtrk运行时只用到了大约 21 MB。注意:在某些情况下,db2mtrk 显示的大小会大于指定给配置参数的值。在这种情况下,赋予配置参数的值被作为一种软限制,内存池实际使用的内存可能会增长,从而超出配置的大小。

数据库共享内存

每个数据库有一个数据库共享内存集。数据库共享内存是在数据库被激活或者第一次被连接上的时候分配的。该内存集将在数据库处于非激活状态时释放(如果数据库先前是处于激活状态)或者最后一个连接被断开的时候释放。这种内存用于数据库级的任务,例如备份/恢复、锁定和 SQL 的执行。

图2展示了数据库共享内存集内的各种内存池。括号中显示了控制这些内存池大小的配置参数。

图 2 - DB2 数据库共享内存

完整的绿色方框意味着,在数据库启动的时候,该内存池是完全分配的,否则,就只分配部分的内存。例如,当一个数据库第一次启动时,不管 util_heap_sz的值是多少,只有大约 16 KB 的内存被分配给实用程序堆。当一个数据库实用程序(例如备份、恢复、导出、导入和装载)启动时,才会按 util_heap_sz指定的大小分配全额的内存。

主缓冲池

数据库缓冲池通常是数据库共享内存中最大的一块内存。DB2 在其中操纵所有常规数据和索引数据。一个数据库必须至少有一个缓冲池,并且可以有多个缓冲池,这要视工作负载的特征、数据库中使用的数据库页面大小等因素而定。例如,页面大小为 8KB 的表空间只能使用页面大小为 8KB 的缓冲池。

可以通过 CREATE BUFFERPOOL 语句中的 EXTENDED STORAGE 选项“扩展”缓冲池。扩展的存储(ESTORE)充当的是从缓冲池中被逐出的页的辅助缓存,这样可以减少 I/O。ESTORE 的大小由 num_estore_segs 和 estore_seg_sz 这两个数据库配置参数来控制。如果使用 ESTORE,那么就要从数据库共享内存中拿出一定的内存,用于管理 ESTORE,这意味着用于其他内存池的内存将更少。

这时您可能要问,为什么要这么麻烦去使用 ESTORE?为什么不分配一个更大的缓冲池呢?答案跟可寻址内存(而不是物理内存)的限制有关,我们在后面会加以讨论。

隐藏的缓冲池

当数据库启动时,要分配 4 个页宽分别为 4K、8K、16K 和 32K 的小型缓冲池。这些缓冲池是“隐藏”的,因为在系统编目中看不到它们(通过 SELECT * FROM SYSCAT.BUFFERPOOLS 显示不出)。

如果主缓冲池配置得太大,则可能出现主缓冲池不适合可寻址内存空间的情况。(我们在后面会谈到可寻址内存。)这意味着 DB2 无法启动数据库,因为一个数据库至少必须有一个缓冲池。如果数据库没有启动,那么就不能连接到数据库,也就不能更改缓冲池的大小。由于这个原因,DB2 预先分配了 4 个这样的小型缓冲池。这样,一旦主缓冲池无法启动,DB2 还可以使用这些小型的缓冲池来启动数据库。(在此情况下,用户将收到一条警告(SQLSTATE 01626))。这时,应该连接到数据库,并减少主缓冲池的大小。

上一篇: 获得DB2企业应用程序的最佳性能 下一篇: DB2基础问答系列一
  • 相关文章
  • ·用DB2 pureXML执行不区分大小写的高效搜索
  • ·史上最伟大12款软件排名 DB2名列第二
  • ·在DB2中正确导出LOB数据
  • ·解析DB2与非DB2数据库之间远程复制
  • ·DB2 9数据库服务器管理之DB2安全性
  • 频道热门
  • ·MySQL一派添“轻功”Drizzle+PHP抢先体验
  • ·数据库连接性能深度探索
  • ·Oracle关键补丁更新版本预览
  • ·活用Sybase超级用户密码
  • ·Ingres数据库发新安装包 争夺Mysql开发者
查看所有评论()
通行证: 密码: 
   验证码: (点击刷新验证码)   匿名发表

频道推荐

更多>>
  • ·MySQL一派添“轻功”Drizzle+PHP抢先体验
  • ·数据库连接性能深度探索
  • ·Oracle关键补丁更新版本预览

热点标签

刀片服务器   云计算   ARP攻防   思科培训  

全站热点

更多>> ARP攻击防范与.. 2009年上半年..
  • ·H3C交换机配置案例:防止同网段ARP攻击
  • ·成本速度定成败 四种宽带接入技术大比拼
  • ·半数软件开发商因收购重新审视Java
  • ·7月第3周要闻回顾:Firefox兵祸连结 微软谷歌..
  • ·熊猫烧香主犯将出狱 接受专访称想去大网络公司..

技术人

更多>> 乔布斯病假月底.. 魔兽易主,三大..
  • ·熊猫烧香主犯将出狱 接受专访称想去大网络公司..
  • ·《魔兽》负责人李日强:网易被暗算
  • ·魔兽玩家掀起史上最大规模维权 称行政审批应便..
  • ·8条体面的程序员偷懒技巧
  • ·职业教育与学历教育,哪个更重要?

读书

更多>>
  • Linux命令详解手册

  • 作者:Christopher Negus Francois Caen
  • 本书出自多本Linux畅销书作者Negus之手,他以多年实践经验为基础,且从大多数系统管理员的日常工作需求出发,分门别类、细致入..
  • ·Java程序员 上班那点事儿
  • ·企业级虚拟机应用实战:玩转VMware VI、Hyper-V ..
  • ·亮剑.NET. 图解C#开发实战
  • ·Oracle PL/SQL实例精解

优秀博文

更多>>
  • ·在Android(OPhone)模拟器中加载和使用SDCa...
  • ·话里话外:改变从细节入手
  • ·中国也许不需要谷歌
  • ·软件企业的项目特征

最新热帖

更多>>
  • ·编辑好的历年网管试题方便打印
  • ·请问,何为“信任用户”,怎样才能获得信任?
  • ·大家讨论下出新大纲了但是新大纲的书却很少
  • ·[每日一读]Your Time Has Come(2009-2-20)

技术快讯

查看样刊
Copyright©2005-2009 51CTO.COM 版权所有 买HP服务器获赠加油卡 节约服务器开销有哪些绝招? 思杰(Citrix)虚拟化技术社区 下载白皮书解决数据库扩展难题