DB2数据库操作与调优笔记

导语2:

我们在进行性能测试过程中会出现db2数据库的一些异常报错信息,这时应该适当调整db2的参数配置或者更新数据库实例等操作。

切换到db2数据库实例用户后,再进入cd sqllib/db2dump目录有db2diag.log文件会记录当前db2数据库的使用的日志信息。

使用db2 get dbm cfg|grep -i DIAGLEVEL命令查看当前db2数据库日志级别。

    使用db2 update dbm cfg using diaglevel 1将db2数据库日志级别修改为1。

0 为不记录信息

1 为仅记录错误

2 记录服务和非服务错误

3是缺省值,记录db2的错误和警告

4 是记录全部信息,包括成功执行的信息

在db2数据库中,有实例级参数(dbm cfg)、数据库级参数(db cfg) 和db2 注册变量(db2set –lr或者 db2set)三种配置参数。db2利用这三种配置参数来进行数据库约束和资源限制。

以下是db2数据库报错信息及其解决办法:

Ø  xx稳定压测中出现报错SQL1040N The maximum number of applications is already connected to the database. SQLSTATE=57030。表明MAXAPPLS参数已达最大值。

使用db2 update db cfg using MAXAPPLS AUTOMATIC命令将其修改为自动增长。

使用db2 get db cfg for dbname|grep -i max命令查看MAXAPPLS等参数的值。

Ø  xx稳定压测中出现报错: Error: ('57011', -289, '[IBM][CLI Driver][DB2/AIX64] SQL0289N  Unable to allocate new pages in table space "AFA_IDX_UDF".  SQLSTATE=57011\n')表明AFA_IDX_UDF表空间已满,此时需要使用du -sm home/db2inst1/ecity命令查看当前表空间的大小。再使用

db2 " alter tablespace tablespacenameextend(file ' /home/db2inst1/ecity' 20480M)"命令来扩大表空间。

db2 list tablespace containers for 2   -2为表空间编号

db2 " alter tablespace tablespacenameextend(file ' /home/db2inst1/ecity' 10000)"增加10000页。

表空间会出现满的情况表明此表空间在创建时是非自动增长[nonautomatic]的,建议表空间创建为自动增长的。

使用db2 list tablespaces show detail命令查看数据库中表空间(table space)具体情况,如下图所示:

使用db2pd -d dbname -tablespaces命令查看,AR(Automatic Resize)为YES表示此表空间是自动扩展的。AS(Automatic Storage)为YES表明表空间是自动存储的。

Ø  在不确定db2数据库端口的情况下,连接数据库报错[jcc][t4][2043][11550][4.18.60] 异常java.net.ConnectException:打开端口 50,000 上服务器 10.0.113.129 的套接字时出错,消息为:Connection refused: connect,Error Code: -4499  SQL State: 08001。通过db2 get dbm cfg | grep -i SVCENAME与cat etc/services |grep db2_db2inst1命令可以查看当前数据库使用的端口号是50001。

Ø  当数据库报错 :The transaction log for the database is full.. SQLCODE=-964, SQLSTATE=57011即事务日志满时,应使用db2 UPDATE DB CFG FOR dbName USING LOGFILSIZ 102400命令来增大LOGFILSIZ的大小。LOGFILSIZ参数配置修改后需重启(db2stop force;db2start;)数据库实例才生效。

数据库事务日志的最大大小 = (LOGPRIMARY + LOGSECOND)* LOGFILSIZ * 4KB

LOGPRIMARY:指定要预先分配空间的主日志文件个数。

LOGSECOND:当主日志文件个数不够用时,请启用从日志文件,从日志文件的最大值就是此参数的设定值。

LOGFILSIZ:日志文件大小。

LOGBUFSZ:事务日志的内部缓冲大小(单位4kb),默认值8,此值应该设置大一些。

Ø  xx平台在压测过程中发现数据库锁等待一直不被释放,Lock Wait值不为0。且压测停止后Lock Wait值仍不为0时,db2top -d dbname -R进入后按d可看见Lock Wait,如下图所示:

此时需要查看db2数据库参数LOCKTIMEOUT参数。如果LOCKTIMEOUT为-1表示无超时时间。使用db2 update db cfg for dbname using LOCKTIMEOUT 30命令把超时时间改为30秒,30秒后锁等待释放,修改后如下所示:

          

Ø  xx压测过程中发现日志报错: (STATE) : [SQL RC = -956, SQL STATE = 57011],此时应该修改db2数据库的dbheap(数据库堆)参数。dbheap控制可用于数据库对象信息的内存量。这些对象包括:索引、表、缓冲池和表空间。

   使用db2 update db cfg using dbheap AUTOMATIC命令将其修改为自动增长。

Ø  在xx稳定压测过程中发现TPS下降的情况,查看数据库的日志发现有关CATALOGCACHE_SZ参数的报错信息如下:

           此时可以使用db2 get snapshot for db on dbname |grep -i "catalog"命令查看缓存编目使用情况:

发现Catalog cache overflows 不为0,表明缓存编目已溢出。

      使用db2 get db cfg for dbname|grep -i catalog命令查看缓存编目当前大小;

使用db2 update db cfg for dbname using CATALOGCACHE_SZ 1024修改缓存编目大小,如果增大此值后压测过程中Catalog cache overflows值仍不为0,就使用db2 update db cfg for dbname using CATALOGCACHE_SZ -1 命令将CATALOGCACHE_SZ值随MAXAPPLS值的改变而改变即可。

如果命中率(1 – (Catalog cache inserts / Catalog cache lookups)) * 100 < 95%,增加该参数值,也需要增加该参数值,一般同时会增加dbheap参数值。

Ø  当报错SQL2310N  The utility could not generate statistics.  Error "-911" was returned.则运行db2 force applications all来断开所有连接,再执行需要执行的命令。

Ø  当数据库报错DB2 SQL Error: SQLCODE=-911, SQLSTATE=40001,表示db2数据库

发生了死锁,此时可以通过添加相关索引来缓解死锁这个现象,但如果系统并发用户数要求高的话,建议最好修改逻辑并优化其代码来彻底解决死锁问题。

Ø  当在数据库日志db2diag.log里发现如下错误日志时,可修改PCKCACHESZ参数。

使用db2 update db cfg for dbname using PCKCACHESZ AUTOMATIC命令将其修改为自动增长。

Ø  当数据库报错如下时:

使用db2 update dbm cfg using MON_HEAP_SZ 4096增大MON_HEAP_SZ参数

Ø  当db2数据库使用db2start命令起不来时、db2top界面不能打开时可以进行以下操作:

cd /opt/IBM/db2/V10.1/bin

./ipclean

Application ./ipclean: Removing DB2 engine and client IPC resources for db2inst1.

即使用./ipclean命令来清理IPC(进程间通讯)资源。Ipclean命令在清理IPC资源的同时也db2stop了数据库。之后使用db2start命令来启动数据库。db2sysc是db2数据库正在运行的主进程。如下命令可以查看数据库主进程信息:

Ø  清理数据库日志命令 

清理日志:  db2 prune logfile prior to S0038448.LOG

db2 prune history 20180425170000 with force option and delete

删除20180425 170000 之前在线归档的日志文件

Ø  当发现db2实例可以启动但无法(connect)连接时可以先清理IPC(进程间通讯)资源再更新db2数据库实例。或者当数据库报错DB2 SQL Error: SQLCODE=-1639, SQLSTATE=08001, SQLERRMC=null, DRIVER=3.57.82。也可以直接更新数据库实例。

$ cd /opt/IBM/db2/V10.1/instance

$./db2ilist    --查看到数据库当前实例为db2inst1

$./db2iupdt db2inst1   --更新此数据库实例

    更新数据库实例之后重启数据库实例即可。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值