《DB2内存详细介绍》
- 1 架构图
- 2 主要概念
- 2.1 内存集(Memory Set)
- 2.2 内存池(Memory Pool)
- 2.3 内存块(Memory Block)
- 3 内存方案
- 3.1 第一级服务器内存
- 3.2 第二级操作系统内存和实例共享内存
- 3.3 第三级数据库共享内存
- 3.4 第四级应用程序组共享内存
- 3.5 第五级代理私有内存
- 4 内存查看
- 4.1 操作系统内存
- 4.1.1
- 4.1.2系统内存监控
- 4.1.3收集内存使用数据和换页数据
- 4.1.4查看换页空间(paging space)使用情况
- 4.1.5物理内存中计算内存和文件缓存的配置参数
- 4.2 数据库内存
- 4.2.1 数据库占用内存
- 4.2.2 数据库分区内存
- 4.2.3 查询DB2实例共享内存
- 4.2.4 查看DB2数据库共享内存
- 4.2.5 实例级内存查询
- 4.2.6 查看系统表空间使用的BUFFERPOOL语句
- 4.2.7 查看表的信息
1 架构图
2 主要概念
2.1 内存集(Memory Set)
DB2 的内存集包括实例内存集、数据库共享内存集、应用程序内存集和代理私有内存集
2.2 内存池(Memory Pool)
内存池由若干内存块组成,其地址空间并不连续。
①内存池跟踪与其相关的内存块总和,并且控制其总和值不能超过池创建时的指定的大小。
②每个内存池都属于一个内存集;同一内存池的内存块都从该内存集中分配。
③MemoryPool是DB2 Memory Manager分配给不同组件的一组内存,DB2根据内存的使用范围、用途、行为来组织分配。
2.3 内存块(Memory Block)
一片连续的内存空间,是DB2内部内存分配的基本单位。
①内存块是一段连续的内存地址范围,主要用于被其他组件申请。
②DB2由内部结构跟踪内存块分配情况。
③一个内存块,只能属于一个内存池。
3 内存方案
3.1 第一级服务器内存
可分配部分:
服务器可分配总内存
将分配给下一级:
操作系统内存、实例共享内存。
说明:
①一个数据库可以建多个实例。如果有多个实例,则有多个实例共享内存。
3.2 第二级操作系统内存和实例共享内存
1、操作系统使用的内存。
说明:分配给操作系统的内存大小,约占比为10%以上
2、实例共享内存
分配给数据库实例使用的内存;
数据库管理器启动(db2start)时分配。
用于实例级的任务(监控、审计和节点间通信等)
①实例下的所有数据库,使用内存的集合。共享实例内存。
②实例下有多个数据库。
③包含mon_heap_sz(监控器堆)、
audit_buf_sz(审计缓冲区)、
fcm_num_buffers(多分区节点通信)、
④物理内存RAM百分比75%至95%,系统越大百分比越高。
3.3 第三级数据库共享内存
分配给数据库使用的内存
数据库激活时分配;非激活时释放。
用于数据库级的任务(备份恢复、锁定和SQL的执行等)
①每个数据库都有一个数据库共享内存集。
②包含数据库缓冲池、隐藏的缓冲池(syscat.bufferpool中没有,db2 get snapshot中存在)util_heap_sz、pckcachesz、logbufsz、dbheap、locklist、sortheap、sheapthres、sheapthres_shr
3.4 第四级应用程序组共享内存
应用程序共享内存(appl_memory)
共享应用程序内存
特定于应用程序的内容
应用程序堆(applheapsz)
统计信息堆(stat_heap_sz)
语句堆(stmtheap)
①appl_memory
②applheapsz
③stmtheap
④stat_heap_sz
3.5 第五级代理私有内存
每个DB2代理进程都需要获得内存以执行其任务。
代理进程将代表应用程序使用内存来优化、构建和执行访问计划,执行顺序,记录游标信息(例如位置和状态),收集统计信息等。
为响应并行环境中的连接请求或新的SQL请求,要为DB2代理分配代理私有内存。
application heap(applheapsz)
sort heap(sortheap)
statement heap(stmtheap)
statistics heap(stat_heap_sz)
query_heap(query_heap_sz)
java heap size(java_heap_sz)
agent stack size(java_stack_sz)
4 内存查看
4.1 操作系统内存
4.1.1
系统内存查询
命令:prtconf|grep -i "Memory Size"
4.1.2系统内存监控
命令:svmon -G
virtual > size ==>> virtual值给出了系统工作所需的页面数。如果virtual > size值,就表示物理内存资源不足,换页不可避免。解决:硬件上升级内存或配置用户应用,或者通过减小应用对内存的需求量来解决此性能瓶颈。
4.1.3收集内存使用数据和换页数据
命令:vmstat -w 1 6
4.1.4查看换页空间(paging space)使用情况
命令:lsps -a
换页空间使用率高且持续增加是物理内存资源不足的表现。
如果不能及时采取措施改善内存的使用,最终可能会导致操作系统宕机。
4.1.5物理内存中计算内存和文件缓存的配置参数
命令:vmstat -v
4.2 数据库内存
4.2.1 数据库占用内存
命令:db2mtrk -i -d -v
db2mtrk是用于在DB2数据库中进行内存跟踪的工具,可以用于查看示例、数据库、代理进程当前对内存的使用状态。
db2mtrk -i 显示当前实例的内存使用情况
db2mtrk -i -v 显示当前实例的内存使用的详细信息
db2mtrk -d 显示数据库的内存使用情况
db2mtrk -d -v 显示数据库的内存使用情况的详细信息
db2mtrk -p 显示代理进程专用内存使用率
db2mtrk -h 显示帮助信息
-m 参数选项用于显示最大的内存使用上线
-w 参数选项用于显示使用过程中内存达到的最大值,即watermark
-r 参数选项用于重复显示,其中interval是重复显示的时间间隔数,count是要重复显示的次数
interval 指定以秒为单位的重复的间隔
count 指定间隔的次数
-v 详细输出
-h 显示帮助信息
在db2mtrk工具的输出的信息中有几种类型的信息:
*当前值得大小
*最大值的限制(hard limit)
*最高值(high water mark)
*类型(用于指定使用了哪种内存)
*代理进程使用的内容(只针对私有内存池)
4.2.2 数据库分区内存
命令:db2pd -dbptnmem
Controller Automatic | 内存控制器设置。如果instance_memory配置参数设置为automatic,则值显示为Y。数据库自行确定内存消耗上限。 |
---|---|
Memory Limit | 内存限制:如果强制施加了实例内存限制。那么instance_memory配置参数的值是可以耗用的DB2服务器内存的上限。 |
Current usage | 服务器当前耗用的内存量 |
HWM usage | 激活数据库分区(db2start命令运行时)以来消耗的内存高水位标记(HWM)或峰值 |
Cached memory | 当前使用量中未使用但为了提高将来内存请求的性能二高速缓存的内存量 |
APPL-TYCJDB | 为数据库dbname耗用的应用程序内存。 |
DBMS-db2inst1 | DBMS-name:全局数据库管理器内存需求。 |
FMP_RESOURCES | 与db2fmps进行通信所需的内存。 |
PRIVATE | 其他专用内存需求。 |
DB-TYCJDB | 为数据库dbname耗用的数据库内存。 |
Name | 内存“使用者”的简短专有名称,例如APPL-dbname为数据库dbname耗用的应用程序内存。 |
Mem Used(KB) | 当前分配给使用者的内存量 |
HWM Used(KB) | 使用者曾经耗用的内存量的高水位标记(HWM),即内存量峰值。 |
Cached(KB) | 在“使用的内存”中,当前未使用但立即可用于将来的内存分配的内存量。 |
命令:db2pd -memblock
命令:db2pd -bufferpool
4.2.3 查询DB2实例共享内存
命令:db2 get dbm cfg | grep -i mem
4.2.4 查看DB2数据库共享内存
命令:db2 get db cfg | grep -i mem
4.2.5 实例级内存查询
命令:db2pd -inst -memsets
Name:内存集的名称;Id:内存集的标识。Size(Kb):内存集的总大小,为Cmt(Kb)与UnCmt(Kb)之和。
Unrsv(Kb):是指未预留给特定内存池的大小,任何内存池都可以使用这部分。Used(Kb):当前分配给内存池的大小。
Cmt(Kb):是DB2已经向操作系统提交的内存。这些内存既可以是物理内存,也可以是交换空间。
Uncmt(Kb):当前还没有使用、但被DB2标识为未提交的内存。根据操作系统不同,这些内存既可以是物理内存,也可以是交换空间。
上图,db2实例级内存集有三个:实例使用(DBMS)、保护存储过程使用(FMP)、跟踪工具使用(Trace)。
命令:ipcs -m
4.2.6 查看系统表空间使用的BUFFERPOOL语句
select A.TBSPACE,A.OWNER,A.OWNERTYPE,A.CREATE_TIME,A.TBSPACEID,A.DBPGNAME,A.BUFFERPOOLID,B.BPNAME from syscat.tablespaces A ,syscat.bufferpools B where A.BUFFERPOOLID=B.BUFFERPOOLID
select TABSCHEMA,TABNAME,OWNER,TYPE,CREATE_TIME,ALTER_TIME,STATS_TIME,TBSPACEID,TBSPACE,INDEX_TBSPACE,CARD,NPAGES from syscat.tables where OWNER !='SYSIBM' and TYPE='T'
4.2.7 查看表的信息
select TABSCHEMA,TABNAME,OWNER,TYPE,CREATE_TIME,ALTER_TIME,STATS_TIME,TBSPACEID,TBSPACE,INDEX_TBSPACE,CARD,NPAGES from syscat.tables where OWNER !='SYSIBM' and TYPE='T'