資料刪除慢的原因排查
同事給我反饋一個問題,刪除某個表上的資料非常的慢。即使是透過主鍵刪除,也是非常的慢,刪除1條資料要1分鐘。我測試刪除了2000條,花了差不多12分鐘。
我看了執行計劃,和預期一樣,走了索引,效率貌似很高。
看了一下這個表,發現存在很多外來鍵關聯,把外來鍵全部刪除,再測試資料刪除,依然很慢。
透過v$session ,v$sqlarea 和 v$session_wait 找到該sql對應的event為“db file sequential read”,好像也正常。
懷疑是表空間碎片,執行如下語句
alter table xxx enable row movement;
alter table xxx shrink space;
select a.segment_name,a.bytes,a.blocks from user_segments a where segment_name = 'XXX';
前後變化不大,看來不是這問題。
後面,想到用trace方法跟蹤delete事件,發現trace檔案裡面多了幾個多餘的select語句,應該都是系統自動產生的。根據這幾個可疑的sql語句,發現原來是因為有幾個表的外來鍵引用了我的刪除表,而這些外來鍵上又沒有建立索引,導致每次刪除這個表的記錄,都要去全表掃描那幾個關聯表。
於是,在那幾個表的外來鍵上新建索引。再次刪除,測試效果,搞定。
附上trace指令碼:
alter session set events='10046 trace name context forever,level 12';
執行要跟蹤的SQL
alter session set events='10046 trace name context off';
完成後,到udump目錄找到trace檔案,拉到本地,使用命令轉換
D:\>tkprof orcl_ora_21999.trc myoutput.txt
另一種跟蹤方式,執行完sql用這個跟蹤
exec dbms_system.set_sql_trace_in_session(SID,
SERIAL# ,true);
exec dbms_system.set_sql_trace_in_session(SID,
SERIAL# ,false);
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9399028/viewspace-760702/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫——慢sql的原因資料庫SQL
- 資料庫查詢慢的原因資料庫
- whk我【資料刪除】你個【資料刪除】的
- 關於刪除表資料時速度慢的測試報告測試報告
- 刪除資料
- indexedDB 刪除資料Index
- Solr刪除資料Solr
- 刪除elasticsearch資料Elasticsearch
- 大量刪除資料的速度
- Laravel 資料庫裡的資料刪除Laravel資料庫
- 批量刪除Oracle資料庫的資料Oracle資料庫
- MongoDB 資料庫建立刪除、表(集合)建立刪除、資料增刪改查MongoDB資料庫
- 資料夾刪除不掉怎麼辦?資料夾無法刪除
- 一次資料庫響應緩慢的問題排查資料庫
- 資料夾刪除不了怎麼辦?資料夾刪除不了的解決方法
- CnosDB的資料更新和刪除
- 刪除不掉的資料記錄
- 批量刪除空的資料夾
- MySQL刪除資料表MySql
- indexedDB 刪除資料庫Index資料庫
- 刪除重複資料
- MongoDB之資料刪除MongoDB
- 刪除大表資料
- git刪除資料夾Git
- 批次刪除資料方法
- 刪除重復資料
- 6.12php對資料庫的刪除和批量刪除PHP資料庫
- 儲存系統實現-資料刪除之索引的刪除索引
- 【RAC】刪除RAC資料庫節點(一)——刪除資料庫例項資料庫
- 造資料難,刪除資料容易
- 誤刪除資料了怎麼辦?小編交易誤刪除資料的恢復方法
- 【RAC】刪除RAC資料庫節點(二)——刪除ASM資料庫ASM
- 【RAC】刪除RAC資料庫節點(五)——刪除ONS資料庫
- MySQL(四) 資料表的插入、更新、刪除資料MySql
- PostgreSQL:資料庫的建立與刪除SQL資料庫
- 如何刪除大表中的資料
- 2.11 刪除資料庫資料庫
- mongodb刪除重複資料MongoDB