欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

Db2的bufferpool问题

程序员文章站 2022-05-20 12:41:13
...

数据库从操作系统申请到的内存可分为两部分:1.缓存池内存(数据页和空闲页)2.非缓存池内存(线程/DLL/连接服务器等).在数据库中,如何设置和调整bufferpool是一个

数据库从操作系统申请到的内存可分为两部分:1.缓存池内存(数据页和空闲页) 2.非缓存池内存(线程/DLL/连接服务器等). 在数据库中,如何设置和调整bufferpool是一个重要技巧,值太大可能会使数据库无法启动,太小又会使应用出错,不能充分发挥数据库性能。

举例来说:

当你连接DB2数据库,运行某SQL语句时提示:

SQL1218N There are no pages currently available in bufferpool "4096"。SQLSTATE=57011。

一般解决思路:

调整buffpool的大小

解决方法:

1> 启动数据库
db2inst1@tysq: db2start
启动db2命令行
db2inst1@tysq:db2

2> 连接数据库
db2 =>connect to test

3> 修改buffer pool

检查当前数据库已有的buffer pool
db2=>select * from syscat.bufferpools
结果显示系统存在默认的bufferpool IBMDEFAULTBP, 大小为4K(1*4096),这个数值明显太小;

直接修改IBMDEFAULTBP的大小:
db2 =>alter bufferpool IBMDEFAULTBP immediate size 50000
现在bufferpool的大小为200M(50000*4096) ,可以满足当前应用需求。

4> 重启数据库管理程序
db2inst1@tysq: db2stop force
db2inst1@tysq: db2star


还有一种观察方法

db2inst1@tysq:~> db2pd -db zssqdb01 -buff


Database Partition 0 -- Database ZSSQDB01 -- Active -- Up 23 days 08:43:02 -- Date 2014-01-11-17.58.28.554662


Bufferpools:

First Active Pool ID 1

Max Bufferpool ID 2

Max Bufferpool ID on Disk 2

Num Bufferpools 6


Address Id Name PageSz PA-NumPgs BA-NumPgs BlkSize NumTbsp PgsToRemov CurrentSz PostAlter SuspndTSCt Automatic

0x00002AB4A91D91C0 1 IBMDEFAULTBP 4096 86884 0 0 5 0 86884 86884 0 True

0x00002AB4A91DA3C0 2 BP32 32768 45000 0 0 2 0 45000 45000 0 False

0x00002AB419AE4260 4096 IBMSYSTEMBP4K 4096 16 0 0 0 0 16 16 0 False

0x00002AB419AE5460 4097 IBMSYSTEMBP8K 8192 16 0 0 0 0 16 16 0 False

0x00002AB419AE66A0 4098 IBMSYSTEMBP16K 16384 16 0 0 0 0 16 16 0 False

0x00002AB419AE78E0 4099 IBMSYSTEMBP32K 32768 16 0 0 0 0 16 16 0 False


在这里可看到各个缓冲区的大小。检查SQL语句,可以发现报缓冲区不足信息的相应涉及表在几号表空间,那个表空间对应使用的BufferpoolID是什么,这样可以扩充对应的缓冲区空间,不是所有这个报错都和IBMDEFAULTBP有关系。