1. 程式人生 > >記錄一次數據庫某表未創建索引造成的問題

記錄一次數據庫某表未創建索引造成的問題

如果 問題 大量 alt 多表 ima count 重建 sql

現象描述:

昨天鷹網監控告知廊坊某臺物理機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使用情況,恢復正常

技術分享

記錄一次數據庫某表未創建索引造成的問題