日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Oracle刪除數據非常慢的問題及解決_oracle

作者:YiFengLc ? 更新時間: 2023-05-11 編程語言

Oracle刪除數據非常慢

記一次數據庫刪除數據非常慢的處理流程

問題描述

單表數據3000條左右,根據主鍵刪除需要509秒

處理流程

一. 首先查看SQL的執行計劃:執行計劃正常,cost只有1,用到了主鍵索引。

二. 查看等待事件:

SELECT s.sid, s.serial# FROM v$locked_object lo, dba_objects ao, v$session s WHERE ao.object_id = lo.object_id AND lo.session_id = s.sid;

先執行目標sql,在執行上面的sql獲得sid

select * from v$session_wait where sid = (上面sql查詢的sid)

顯示的event是db file sequential read,也沒有異常。

三. 測試其他其他表和系統io是否有問題,沒問題則進行下一步

四. 追蹤sql日志:

alter session set events='10046 trace name context forever,level 12';

delete from t_table1 where id = xxx(這里是目標sql)

alter session set events='10046 trace name context off';

若不知道日志文件存放位置執行以下sql會返回路徑

SELECT VALUE  FROM V$PARAMETER WHERE NAME = 'user_dump_dest' 

找到最新的trace文件

執行—>tkprof orcl_ora_3708.trc myoutput.txt將trc文件轉換為簡單明了的txt文件

查看執行刪除過程中有哪個操作時間過長

我發現的問題是在實行刪除的過程中這個表有外鍵關聯主表,會先查一遍這個表里有沒有那個設備的記錄,elapsed表示耗時

解決辦法,外鍵加索引,或者取消外鍵代碼里維護外鍵。

Oracle刪除表中大量數據卡頓的解決

首先,不要被標題誤導,分兩種情況。

  • 1. 刪之前原表數據不要。
  • 2. 刪之前保留原表數據。

正確姿勢

oracle數據表有過萬條數據后,刪除數據就變的特別慢,有時甚至會卡死,所以在此分享一個小白操作,望對各位有幫助。

刪除前: 從原表創建新表,即:先把需要的某些數據導入到新表里,或者不加條件即要刪除原表的所有數據,從原表創建臨時表(新表)。(相當于原模原樣拷貝一份原表)

create table tempTable as select id,name from table1 where sj>to_date('2013-7-31 23:59:59','yyyy-mm-dd hh24:mi:ss');

接著直接 drop 刪除原表,把新表名稱改為原表名稱。到此結束,這樣直接跳過刪除原表因數據多造成卡死的現象節省時間。

總結

原文鏈接:https://blog.csdn.net/IUCONG/article/details/88977830

欄目分類
最近更新