前端人员反映最近考勤资料准入很慢,之前几分钟转完的资料,现在需要很久。
针对这个问题,做了这个时间段的ash report,发现insert时伴随着db file sequential read以及read by other session,正常来讲,insert 与db file sequential read怎会扯上关系?进一步分析,应该是在做index维护,即insert表时,同时会更新index,同时确认新的key value在index的位置
而read by other session,显然是伴生于前者,即db file sequential read要读的block正在被其他session读取,这一般是buffer紧张造成
full sqltext:
做了一个10046,可以看到db file sequentail read, obj#236626(通过查询验证,正是被插入表的index)
db file sequential read属于physical read,故思路是将此index放入keep pool,不参与shared buffer竞争:
ALTER index IDHRIS.IDX_EM_CARD_RECORDstorage(buffer_pool keep)
验证结果:
SELECT OWNER,INDEX_NAME,BUFFER_POOL FROM DBA_INDEXES WHERE INDEX_NAME=‘IDX_EM_CARD_RECORD’
最后,请前端user检验成果:
从前端user的insert完成记录来看,已经改山很多。