首页 > 代码库 > 记录一次数据库某表未创建索引造成的问题
记录一次数据库某表未创建索引造成的问题
现象描述:
昨天鹰网监控告知廊坊某台物理机CPU使用率接近100%,查看得知每颗逻辑CPU的使用率都接近了100%,但该数据库机器是测试机器,按理说不会造成此问题。截图如下:
处理步骤:
1. 查看消耗大量CPU资源和I/O等待的PID
通过TOP命令即可查看
2. 通过PID查看正在执行的SQL
SELECT sql_text FROM v$sqltext a WHERE (a.hash_value, a.address) IN (SELECT DECODE(sql_hash_value, 0, prev_hash_value, sql_hash_value), DECODE(sql_hash_value, 0, prev_sql_addr, sql_address) FROM v$session b WHERE b.paddr = (SELECT addr FROM v$process c WHERE c.spid = ‘&pid‘)) ORDER BY piece ASC
或者在生成AWR报告
SQL> @?/rdbms/admin/awrrpt.sql
3. 查看上述找到的影响性能的表是否创建索引或者索引失效
select count(*) from RESLTJT_ZL.TW_PSD_SERV_FEE_TOWER select index_name from user_indexes where table_name = ‘RESLTJT_ZL.TW_PSD_SERV_FEE_TOWER‘;
查询得知该表数据量为428W,但是未创建任何索引,这样多表连接查询时将是可怕的。
批注:如果说是创建了索引,查看索引是否失效,如下
select status from user_indexes where index_name=‘IDX_CONTRACT_ID‘
如果索引失效,重建即可。
4. 处理后查看CPU使用情况,恢复正常
记录一次数据库某表未创建索引造成的问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。