今天公司某系统报处理速度慢,查看数据库主机发现,cpu使用率特别高,一直维持在98%以上,而磁盘IO特别低,查看(select event, wait_class from v$session where event not like 'SQL*Net%' and username !='SYSTEM' and type!='BACKGROUND' and username!='SYS';)等待事件,发现有大量latch: cache buffers chains等待事件,通过网上搜索,这个是由热块造成的,同时这个等待事件出现时,也会出现cpu使用率很高而磁盘IO很低的现象。通过以下命令查看热块所在的对象
SELECT OBJECT_NAME, SUBOBJECT_NAME FROM DBA_OBJECTS
WHERE DATA_OBJECT_ID in
(select data_object_id from
(SELECT OBJ data_object_id, FILE#, DBABLK,CLASS, STATE, TCH
FROM X$BH
WHERE HLADDR in (select addr from (select addr from v$latch_children order by (gets+misses+sleeps) desc) where rownum<10) order by tch desc) where rownum<10)
得出以下记录
R_FFRQZBB TABLE
PK_JC_T_JGDM INDEX
CL_TYLPCZXB_XFBZ INDEX
JC_T_YLXXZB_PK1 INDEX
QZBYDDJB_IND5 QZBYDDJB_201005 INDEX PARTITION
通过查询有“latch: cache buffers chains”等待事件的session所执行的sql,发现所有语句都访问表QZBYDDJB,同时QZBYDDJB_IND5是建于其上的索引,初步分析是此索引有问题,但是查询dba_indexes发现此索引状态正常,blevel也小于2,太奇怪了。由于现在应用已经跑不动了,干脆重建索引试试,重建后,正常。来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/611609/viewspace-708793/,如需转载,请注明出处,否则将追究法律责任。