Db2的bufferpool问题怎么解决


今天就跟大家聊聊有关Db2的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的大小为20开发云主机域名0M(50000*4096) ,可以满足当前应用需求。 4> 重启数据库管理程序
db2inst1@tysq: db2stop force
db2inst1@tysq: db2star还有一种观察方法db2inst1@tysq:~> db2pd -db zssqdb01 -buffDatabase Partition 0 — Database ZSSQDB01 — Active — Up 23 days 08:43:02 — Date 2014-01-11-17.58.28.554662Bufferpools:First Active Pool ID 1Max Bufferpool ID 2Max Bufferpool ID on Disk 2Num Bufferpools 6Address Id Name PageSz PA-NumPgs BA-NumPgs BlkSize NumTbsp PgsToRemov CurrentSz PostAlter SuspndTSCt Automatic0x00002AB4A91D91C0 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有关系。同样有时缓冲区设的太大,当前的机器物理内存不足以分配这个大的buffer pool,反而会造成数据库不可连接,尝试连接的时候会提示这样的错误:SQL1042C An unexpected system error occurred. SQLSTATE=58004
。这个时候关键的不是扩,而是应该缩,通过缩小Bufferpool使问题得到解决。可以尝试用下面的步骤来解决:

1. 用DB2实例Owner的用户登录到系统,
2. 执行下面的命令来设置环境变量DB2_OVERRIDE_BPF
db2set DB2_OVERRIDE_BPF=number-of-pages
其中number-of-pages为页数, 应该是一个较小的, 操作系统可以分配的值, 如5000; 下一次DB2数据库连接以激活数据库时, DB2系统会尝试按照此参数指定的大小来分配BUFFERPOOL;
3.执行db2 terminate ,运行命令db2 connect to db来建立数据库连接; 由于我们已经设置了DB2_OVERRIDE_BPF环境变量, 此连接应该可以成功;
4. 连接建立后, 不要做其他操作, 立刻修改bufferpool;
db2 alter bufferpool bufferpool-name size number-of-pages
5. 为了使得我们修改的新buffer pool的大小可以生效, 需要先运行命令 db2 connect reset 断开当前的连接;
6. 运行命令 db2set DB2_OVERRIDE_BPF= 以去掉该环境变量, 使得我们配置的新的buffer pool的大小可以生效;
7. 重新连接数据库注意:在32位系统上操作时, 此系统中db2总的内存只能用到1.75G左右,bufferpool用到1.2G.

要想充分使用主机内存,要将操作系统改为64位, 把你的db2也改为64位。另外,db2使用内存最好不要超过主机内存一半。 补充一点:(来自互联网)要准确反映现在生效的bufferpool设置,应该1. db2 get snapshot for bufferpools on dbname|lessDB2 V7,8,9通用。分区通用,加db2_all or rah2. db2mtrk -d -vDB2 V8,9通用。分区通用, 加db2_all or rah3. db2 “select * from sysibmadm.snapbp”DB2 V9通用。分区应为sysibmadm.snapbp_part。4. db2 “select * from sysibmadm.bp_hitratio”DB2 V9通用。分区通用,加db2_all or rah注:1只对单个activated数据库有效;3,4只对当前connect数据库有效。看完上述内容,你们对Db2的bufferpool问题怎么解决有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注开发云行业资讯频道,感谢大家的支持。

相关推荐: 虚拟主机伪静态在哪里设置

今天就跟大家聊聊有关虚拟主机伪静态在哪里设置,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。虚拟主机如果是linux操作系统,只要把伪静态规则写到网站根目录的.htaccess文件中就可以。若是win开发…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/04 13:52
下一篇 06/04 13:52

相关推荐