a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 數據庫 > Oracle > 正文

實例講解臨時處理去重 80w 數據時夯死現象

2024-08-29 13:58:26
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了臨時處理去重 80w 數據時夯死現象,需要的朋友可以參考下

近日,在對一張百萬數據的業務表進行去重時,去重操作竟然夯住了。下面就來簡單回憶一下。

1、查詢業務表數據量,查看到總共有200多w條

 

 
  1. SQL> select count(*) from tb_bj_banker_etl; 
  2.  
  3. 2552381 

2、查詢表內應該去掉的重復數據量,共80多w條

 

 
  1. SQL> select count(*) from tb_bj_banker_etl where (id) in (select id from tb_bj_banker_etl group by id having count(*)>1) and rowid not in(select max(rowid) from tb_bj_banker_etl group by id having count(*)>1); 
  2.  
  3. 830099 

3、于是,在晚上下班前,執行了下面的語句腳本,為了去重

 

  1. SQL> delete from tb_bj_banker_etl where(id) in (select id from tb_bj_banker_etl group by id having count(*)>1) and rowid not in(select max(rowid) from tb_bj_banker_etl group by id having count(*)>1); 
  2.  
  3. SQL> commit; 

4、第二天,到達現場時,發現PL/SQL Developer工具中昨天晚上執行的語句仍在執行中

首先察覺,80多w的去重數據跑了一個晚上也沒跑完?這肯定是哪里出了問題?

懷疑有鎖表。

于是查詢是否有鎖表的用戶。

 

 
  1. SELECT 
  2. A.OWNER, --OBJECT所屬用戶  
  3. A.OBJECT_NAME, --OBJECT名稱  
  4. B.XIDUSN,  
  5. B.XIDSLOT,  
  6. B.XIDSQN,  
  7. B.SESSION_ID, --鎖表用戶的session  
  8. B.ORACLE_USERNAME, --鎖表用戶的Oracle用戶名  
  9. B.OS_USER_NAME, --鎖表用戶的操作系統登陸用戶名  
  10. B.PROCESS,  
  11. B.LOCKED_MODE,  
  12. C.MACHINE, --鎖表用戶的計算機名稱  
  13. C.STATUS, --鎖表狀態  
  14. C.SERVER,  
  15. C.SID,  
  16. C.SERIAL#,  
  17. C.PROGRAM --鎖表用戶所用的數據庫管理工具  
  18. FROM 
  19. ALL_OBJECTS A,  
  20. V$LOCKED_OBJECT B,  
  21. SYS.GV_$SESSION C  
  22. WHERE 
  23. A.OBJECT_ID = B.OBJECT_ID  
  24. AND B.PROCESS = C.PROCESS  
  25. ORDER BY 1,2 

在下面結果中可以看到,鎖表的只是去重語句的發起會話,并沒有其它用戶造成鎖表,這說明語句仍然在執行嘛?帶著疑問,開始嘗試解決。

1 BJHYL tb_bj_banker_ETL 15 18 9000 913 BJHYL Administrator 4036:972 3 WORKGROUP/BACKDB ACTIVE DEDICATED 913 3381 plsqldev.exe

2 BJHYL tb_bj_banker_ETL 15 18 9000 913 BJHYL Administrator 4036:972 3 WORKGROUP/BACKDB INACTIVE DEDICATED 649 41791 plsqldev.exe

3 BJHYL tb_bj_banker_ETL 15 18 9000 913 BJHYL Administrator 4036:972 3 WORKGROUP/BACKDB INACTIVE DEDICATED 817 27777 plsqldev.exe

4 BJHYL tb_bj_banker_ETL 15 18 9000 913 BJHYL Administrator 4036:972 3 WORKGROUP/BACKDB INACTIVE DEDICATED 841 1981 plsqldev.exe

5、采用分批次,解決去重夯住問題

由于直接去重無法順利進行,于是想到了分批次去重的方法,試一下。

 

 
  1. 第一次:  
  2. delete from tb_bj_banker_etl where(id) in (select id from tb_bj_banker_etl group by id having count(*)>1) and rowid not in(select max(rowid) from tb_bj_banker_etl group by id having count(*)>1) and rownum<=100000;  
  3. commit;  
  4.  
  5. 第二次:  
  6. delete from tb_bj_banker_etl where(id) in (select id from tb_bj_banker_etl group by id having count(*)>1) and rowid not in(select max(rowid) from tb_bj_banker_etl group by id having count(*)>1) and rownum<=100000;  
  7. commit;  
  8.  
  9. 。。。。。。。  
  10. 。。。。。。。  
  11. 。。。。。。。  
  12.  
  13. 第八次:  
  14. delete from tb_bj_banker_etl where(id) in (select id from tb_bj_banker_etl group by id having count(*)>1) and rowid not in(select max(rowid) from tb_bj_banker_etl group by id having count(*)>1);  
  15. commit; 

結果:通過將80多萬數據劃分成以10w數據為單次進行去重操作,總共用時140多秒,完成了去重80萬數據的目的。但為何直接處理出現夯死情況,有待后續跟蹤分析。

以上就是臨時處理去重80w數據時夯死現象的全部過程,希望可以幫到大家。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 红杏aⅴ成人免费视频 | 欧美色图第一页 | 每日更新av| 精品国产乱码简爱久久久久久 | 日韩精品123 | 久久久免费电影 | 在线观看国产 | 成人在线免费观看 | 成人久久18 | 色偷偷噜噜噜亚洲男人 | 国产精品无码久久久久 | 国产在线h | 成人免费视频网站在线观看 | 欧美男人天堂网 | 日本aⅴ免费视频一区二区三区 | 中文字幕一区在线 | 日韩三级电影在线免费观看 | 日韩一区二区不卡 | 美女张开腿视频网站免费 | 亚洲高清久久 | 人人干网站 | 亚洲一二三四在线 | 黄色三级网| 亚洲黄色在线免费观看 | 一区二区蜜桃 | 中文字幕在线视频免费播放 | 毛片在线免费 | 久久精品一 | 亚洲首页 | 伊人影院在线视频 | 国产日韩欧美激情 | 亚洲精品久久视频 | 国产精品一区亚洲二区日本三区 | 国产一区二区三区免费在线观看 | 99久久综合国产精品二区 | 欧美一级二级片 | av直接看 | 国产福利一区二区在线 | 色图综合 | 麻豆视频在线 | 三级网站大全 |