|
书接上回
appgroup_mem_sz
这个参数,ibm的官方建议是不要太大。
这个参数是定义的在applicationgroup中的所有的application共享应用程序的heap.
设置过大,假设在这个组里面只有很少的应用程序,那么起到的作用反而有限。
关于这个说法,我只能说ibm或者厂商讲话小心,谨慎。
要我说,都是宁可大不可小。
宁可多不可少。
你想这种参数的默认值才多大?扩大个几倍又能多到什么地方去?
我们的目前国内的大多数的用户在购买机器的时候,本身对内存的使用就是没有什么专业看法,完全是对着空气大概估计需要多大的内存。
我遇到的情况,从来没有遇到过是物理内存而导致的性能问题。
我所看到的情况,都是物理内存大大多于实际需要。
所以,我多设了一定程度,注意,我这里说的是一定程度,对系统最起码没有坏处。
反正,物理内存,闲着也是闲着。
我遇到的只有一个事情,看上去似乎是由物理内存不够造成的。
那是辽宁的一个著名城市的著名银行。
正在开发一个收费系统,用户的是oracle+ibm websphere
aix,物理内存1.5gb
当时的现象是单据在准备调出打印的时候调出速度很慢,要到30多秒。这显然是不能接受的。
当时就很多人认为是极其的物理内存很少造成的。
只有老夫我坚持不是,但是我也不知道现场情况怎么样,我就认为肯定不是物理内存太少,因为我们在其他的项目里面也在这样的硬件平台
上做过开发。
到了现场,一看,差点没把我乐坏,原来是是他们在websphere的平台上面认为的将java设置成了sun的jdk。
一改了之。
一天做了个飞机来回。
全局(共享)内存
就是对instance或者db级别的所有的进程都可用的内存。
私有内存
只能被分配它的进程使用。
内存的影响范围
dbm共享内存
是被实例范围的所有进程使用
db共享内存
是db范围内的所有进程使用
fast communication manager 共享内存
是被一个通讯实例过来的所有进程使用
application control 共享内存(appctl)
是被某一个应用程序的所有进程共享
哈哈哈哈
我估计大家可能看得有点晕
我承认,第一我写的不系统不统筹。
第二确实db2的内存底层模型和组件方面比较复杂一些。
就连我这样的难得一见的聪明人都晕了一段时间。
写的不系统是没有办法,因为我总是想写点不一样的东西,所以就遐想,想到啥地方就写一下,大家就凑乎看。
不过我觉得我挺不容易的了。
我帮你把你把e文翻译成了中国话。
而且我是我国的还未出名的著名的文学天才+翻译天才,
翻译出来的东西你已经容易理解多了。
进程私有内存
每个进程或者线程都会从相关的私有内存中分得一杯羹,只是或多或少的问题。
私有内存是从相应的process heap中分得。
process heap随需增长,受限物理内存。
process heap的内存的分配和是否是动态的。释放了即变成了os物理内存的可用内存。
shared memory - 共享内存
dbheap
在connect或者activate的时候分配
在disconnect或者deactivate的时候释放
可以在线配置和在线立即生效
每个数据库都有1个,包含log buffer,catalog cahce,monitor cache
这个内存配置在初始化的时候,只是得到了十几所需要的最小的尺寸,然后根据实际的需要实时扩大,知道定义的最大尺寸。
这个参数只是中等级别的内存参数。对性能不会有太大的影响。
catalog cache
该内存参数是从dbheap中分得的。
数据库关闭的时候释放。
可以在线配置和在线立即生效
用来存储各种sql 语句的编译的各种信息。
每个数据分区有一个这样的内存堆。
但是这个内存参数并不存放临时表的各种信息,内存中的临时表的信息是属于应用程序的堆的范围,是用的应用程序堆。
logbuffer
这个值是在dbstart的时候从dbheap从分配到的。
这个值是不能在线动态改变的。日志记录在被写到磁盘里面之前,是首先放在内存中进行记录,等待事务的结果,这个结果可能是提交或者回退。
这个值一般不需要更改,默认值基本ok,当然,如果增大的话,也许能对性能有好处。
谁知道呢,以上是废话,具体情况具体分析。
utility heap
这个值是被db2的一些实用工具来使用的,对不起,我还是不能或者我自己还是清醒的知道我没有找到一个很妙的关于utility的翻译。
实用工具?
我觉得这个词够傻的。
db2有些实用工具,如backup,restore,export,import,load等等。
这个参数是用时分配,用毕即释放,很好的。
我最喜欢这样的状况。
也许我骨子里面是个完美主义者的缘故吧。
我喜欢世界和生活简单,感觉,简洁。
欲望能得到简单简洁迅速的满足。
比如我想要女人的时候,一个妙女子立刻出现,当我满足之后,这个妙女子立刻消失,如同没有出现过一样。
这样多好。
这个参数也是可以在线更改并立刻生效。
只不过需要注意的是utility heap的地址空间必须是连续的,否则会报sql2009的错误。
随便说一句,在我的db2的顾问实施或者维护的项目中,我都会做个脚本,定时作业,工作的时候,将工作相关的内存调大。
在维护时间段的时候,将维护任务所需要的各内存调最大。
我觉得这样对内存的合理使用和各项任务还是有比较积极的意义和作用的。
lock list
lock list和maxlocks是一对鸳鸯参数。
就是互相配合使用的参数。
locklist就是当前db中所有的的应用程序的所有的锁的信息或者对象的可以存放的内存空间。
maxlocks就是某个应用程序所能占用的locklist的最大百分比。
知道了吧?
loacklist是总量,
maxlocks是规定每人的口粮。
lock list 是在应用程序链接的时候分配到手,
在应用程序结束和对数据库连接断开后,相应的内存的释放,
从这点,你是否可以看见我们的事务的正确结束和尽快结束和有始有终是多么重要!
这样的参数好玩的是只能在线扩大无法在线减小。
原文链接: http://www.ituren.org.cn/html/jishusuibi/200806/24-89.html |
|