網站首頁 編程語言 正文
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
相關推薦
- 2022-06-26 ASP.NET?Core構建OData查詢Restful?API_實用技巧
- 2022-08-15 Docker常見用法
- 2022-09-25 FFmpeg源碼分析:圖像常用操作
- 2022-04-12 報錯(! [rejected] master -> master (fetch fir
- 2022-07-15 在SQL?Server中使用子查詢更新語句_MsSql
- 2022-03-30 python生成密碼字典詳解_python
- 2023-03-28 react-redux的connect用法詳解_React
- 2023-07-22 macos使用idea進行配置找不到隱藏目錄(/usr/local/)
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支