db2查看及更改数据库性能参数及head的配置
查看及更改数据库 head 的配置
设置的时候要注意, 一个database可用的最大内存数只有2G,配置后要计算一下使用的内存数,注意不要超过 1.6G,还要留一些内存给数据库其它的来用。 如果要使用 2G 以外的内存,将 NUM_ESTORE_SEGS 参数由 0->1,这样就可以使用 2G以外的内存做为二级缓存。 请注意,在大多数情况下,更改了数据的配置后,只有在所有的连接全部断掉后才会生效。
查看数据库 head的配制
db2 get db cfg for head
更改数据库 head的某个设置的值
1 设置使用2G以外的内存
db2 update db cfg for head using NUM_ESTORE_SEGS 1
参数由0->1,这样就可以使用 2G以外的内存做为二级缓存。
2 更改Buffer pool的大小
db2 update db cfg for head using BUFFPAGE 20480
但如果要上面这个设置值生效,需要查看一下SYSCAT.BUFFERPOOLS这张表,里面的bufferpool 的 npages 字段值至少有一条记录的为-1。
db2 alter bufferpool ibmdefaultbp size -1
Bufferpool 的大小这个指标是个很重要的指标,它实际上分配的一个内存区,数据的绝大部分操作都是在 bufferpool 中来进行。如果服务器仅仅是给这个数据库用,bufferpool 的大小应该要占到机器总物理内存的 50%-75%的比例。
如果内存够的话,理论上bufferpool.是越大越好。
3 更改dbheap的大小
db2 update db cfg for head using DBHEAP 4096
该值是对 db 的。
Dbheap>catalogcache_sz+logbufsz
4 改catalogcache的大小
db2 update db cfg for head using catalogcache 2048
和表的数量和字段数量有关,如果表及字段较多,最好将该指标改大一些。 该值的大小可以开为和建表 script 的大小相当, 再稍大一点。
当然,如果有动态创建表的话,根据实际情况可能要开得更大一些。
5 改事务buff的大小
db2 update db cfg for head using LOGBUFSZ 512
该指标对数据库并行比较有影响,如果并发的较多,最好将该指标改大一些。
数据库写日志先写在这个内存中,如果没有写满,每秒自动刷新一次,内存用满也会刷新一次,开的值最好不要让它被用满而被迫写到磁盘。
因此,如果一个事务的日志比较多时,最好能开大一些。
6 改工具堆大小
UTIL_HEAP_SZ
这个指标值是用于对import,export,load等工具来分配内存的。
7 改排序堆的大小
db2 update db cfg for head using SORTHEAP 2048
将排序堆的大小改为 2048 个页面,查询比较多的应用最好将该值设置比较大一些。
该指标值是对每个连接分配的内存,如果连接数比较多,注意不要开得太大。如果看到了 sort overflow 的话,可以将改值调大一些。
这个内存是只在用的时候才申请,平时是不会申请的。
8 改stmtheap的大小
db2 update db cfg for head using STMTHEAP 4096
该指标值是对每个连接分配的内存,如果连接数比较多,注意不要开得太大。该数据值和解释语句有关,如果太小,可能比较大的语句会解释不了。
这个内存是只在用的时候才申请,平时是不会申请的。
9 改事务日志的大小
db2 update db cfg for head using logfilsiz 40000
该项内容的大小要和数据库的事物处理相适应,如果事物比较大,应该要将该值改大一点。否则很容易处理日志文件满的错误。这是指单个文件的大小。
日志文件的大小,大概是同时没有 commit 的数据量的两倍大小。
还有个两个指标值是指日志文件的个数
LOGPRIMARY 基本日志文件数
LOGSECOND 备用日志文件数
在正常情况下,只用到基本日志文件,则日志大小为 logfilsiz*
LOGPRIMARY
在基本日志文件都用完而不够用的情况下,就会去使用备用日志文
件。
备用日志文件在事务commit 以后,系统就会自动的将备用日志文件释放掉。
db2 update db cfg for head using LOGPRIMARY 3
db2 update db cfg for head using LOGSECOND 2
db2 7.2版本中, LOGPRIMARY+ LOGSECOND<=128 马宏伟建议,日志文件开多一点,而每个日志文件开小一点,这样性能会好一些。好象AIX对大文件的管理不是很好。 10 改锁的相关参数的大小 db2 update db cfg for head using LOCKLIST 40000 这个是整个 db的最大锁资源占的内存。锁资源的消耗是每条共享锁占 36 个字节,独占锁占用72 个字节。锁资源的大小要考虑应用来设置。 db2 update db cfg for head using MAXLOCKS 10 这个参数是设定单个应用程序能够使用的最大锁资源,这是个百分比的值。实际上单个应用程序能够使用的锁资源的大小为 LOCKLIST* MAXLOCKS db2 update db cfg for head using LOCKTIMEOUT 60 这个参数是设定应用程序锁等待的最大时间。单位是秒,这个值的设定要比较适当,对并发较多的情况下,锁等待可能是不可避免的,如 果设定不适当,可能会发生太多的 time out 错误。 db2 update db cfg for head using DLCHKTIME 10000 这个参数是设定系统检测死锁发生的时间,单位是毫秒,不要设得太小,耗系统资源且没太多必要。 11 出现程序堆内存不足时修改程序堆内存大小 db2 update db cfg for head using applheapsz 4096 该值不能太小,否则会没有足够的内存来运行应用程序。 但也不能太大,因为该内存是对每个连接分配的,这个的内存是应用程序使用得最多和频繁的内存。 这个内存是只在用的时候才申请,平时是不会申请的。 12 NUM_IOCLEANERS及NUM_IOSERVERS数量设置 NUM_IOCLEANERS 设为 cpu即可 NUM_IOSERVERS设为cpu的个数+2 13 成组commit设置MINICOMMIT 马宏伟说就是设为 1 最好。可能是因为db2 设计还没有特别好。 14 设置连接数的相关参数MAXAPPLS MAXAPPLS 按需要设置,对于目前的应用为 500 AVG_APPLS 平均活动应用程序数,数据库会根据这个数值来采取不同的资源分配方式。50 可能比较合理。 15 设置包缓冲区PCKCACHESZ 这块区域是放置程序包的,最好不要让它有溢出。 缺省是 MAXAPPLS*8*4K 但我发现了溢出,聂华建议开大一点,它是对整个 database 的,考虑设到 MAXAPPLS*16*4K(32M)