目录情况
$ lspv
hdisk0 00cb36a169514959 rootvg active
hdisk1 00cb36a11a470b12 rootvg active
hdisk2 none None
hdisk3 none None
hdisk4 00cb36b14a6226e3 db2vg
hdisk5 00cb36b14a6f4558 appfilevg active
hdisk6 00cb36a105af9ed3 appfilevg active
hdisk7 00cb36a157e9b7ea None
hdisk8 00cb3651fe38d85f None
hdisk10 00cb36a109c23641 db2vgtmp active
$ lsvg -l db2vgtmp
db2vgtmp:
LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT
db2lvtmp jfs2 598 598 1 open/syncd /db2data
db2lvtmp_log jfs2log 1 1 1 open/syncd N/A
$ lslv db2lvtmp
LOGICAL VOLUME: db2lvtmp VOLUME GROUP: db2vgtmp
LV IDENTIFIER: 00cb36a100004c000000015d09c416e6.1 PERMISSION: read/write
VG STATE: active/complete LV STATE: opened/syncd
TYPE: jfs2 WRITE VERIFY: off
MAX LPs: 2048 PP SIZE: 512 megabyte(s)
COPIES: 1 SCHED POLICY: parallel
LPs: 598 PPs: 598
STALE PPs: 0 BB POLICY: relocatable
INTER-POLICY: maximum RELOCATABLE: yes
INTRA-POLICY: middle UPPER BOUND: 32
MOUNT POINT: /db2data LABEL: /db2data
MIRROR WRITE CONSISTENCY: on/ACTIVE
EACH LP COPY ON A SEPARATE PV ?: yes
Serialize IO ?: NO
$
通过fuser看到
$
$ fuser -c /db2data
/db2data: 303712
$ ps -ef|grep 303712
root 327692 303712 0 Sep 22 - 42:06 db2ckpwd 0
root 373130 303712 0 Sep 22 - 42:05 db2ckpwd 0
db2inst1 397716 291556 0 15:46:59 pts/3 0:00 grep 303712
db2inst1 303712 148228 107 Sep 22 - 11901:37 db2sysc 0
root 74686 303712 0 Sep 22 - 42:25 db2ckpwd 0
$
是因为 db2sysc进程导致的,
该怎么往下查呢?
以上信息表明进程ID=303712对逻辑卷db2vgtmp产生了大量读操作。
建议如下操作:
1)topas看看PgspIn、PgspOut等是否持续高?
2)topas看看CPU Wait%等是否持续高?
3)db2top -d xxx看看哪些表在进行大量read/write?
根据以上操作来判断是否内存资源小导致频繁磁盘交换,还是每个SQL的access plan存在问题导致持续的read/write IO。
根据问题反馈,基本可以判断为“某个或者某些SQL慢”导致繁忙的I/O从而CPU Wait较大。进一步处理方法建议为:
1)使用db2top或者db2 snapshot找到问题SQL。
2)使用db2expln或者db2exfmt对定位的问题SQL进行抽取access plan。
3)分析其access plan,看看是否存在table scan还是nested loop join。
4)最后优化问题SQL。
1、hdisk10的Kbps数值为(368.8k),TPS数值为:7.8k,基本判断你的存储问题的不大
2、你的IO请求7.8k(7.81000),读写字节数368.8k(368.81000)
3、如果你的业务量很小,你需要判断你们的数据库目前是不在查询报表之类的,然后找查询报表比较大的SQL优化。【从你发的信息看,你们的业务应该不是很大,只是猜测】
4、如果你的业务量大,你需要判断看一下你们的业务执行的SQL是否有异常
个人以为问题可能出现在2个方面,存储或DB,建议分2个方向逐一排查:
存储:
对disk10上的目录进行 cp读写大文件,看看读写流量能否上到100MB/s以上?如果是,则排查DB;如果读写远远不到正常范围,则排查多路径软件、HBA卡,光纤交换机,存储的负荷及报错。
DB:
db2top看看SQL是否写得有问题。
1、检查主机硬件和存储是否有告警
2、IO Wait是否较高
3、DB2 缓存池命中率,SQL语句执行情况,耗时较大的是否需要建索引
4、Pagespace 20% 内存有可能不足了
5、iostat看下hdisk10是否队列深度较高,响应时间较大
6、通常来说不建议把数据和日志全放在一块盘上,虽然现在系统不做条带化了,但最好也将pp均分在多个磁盘上,不管底层是做的raid5,6还是pool池