欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

實例講解臨時處理去重 80w 數據時夯死現(xiàn)象

 更新時間:2015年09月02日 09:55:30   投稿:lijiao  
這篇文章主要介紹了臨時處理去重 80w 數據時夯死現(xiàn)象,需要的朋友可以參考下

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

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

SQL> select count(*) from tb_bj_banker_etl;

2552381

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

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);

830099

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

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);

SQL> commit;

4、第二天,到達現(xiàn)場時,發(fā)現(xiàn)PL/SQL Developer工具中昨天晚上執(zhí)行的語句仍在執(zhí)行中

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

懷疑有鎖表。

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

SELECT 
 A.OWNER,            --OBJECT所屬用戶 
 A.OBJECT_NAME,         --OBJECT名稱 
 B.XIDUSN, 
 B.XIDSLOT, 
 B.XIDSQN, 
 B.SESSION_ID,          --鎖表用戶的session 
 B.ORACLE_USERNAME,       --鎖表用戶的Oracle用戶名 
 B.OS_USER_NAME,         --鎖表用戶的操作系統(tǒng)登陸用戶名 
 B.PROCESS, 
 B.LOCKED_MODE, 
 C.MACHINE,           --鎖表用戶的計算機名稱 
 C.STATUS,            --鎖表狀態(tài) 
 C.SERVER, 
 C.SID, 
 C.SERIAL#, 
 C.PROGRAM            --鎖表用戶所用的數據庫管理工具 
FROM 
 ALL_OBJECTS A, 
 V$LOCKED_OBJECT B, 
 SYS.GV_$SESSION C 
WHERE 
 A.OBJECT_ID = B.OBJECT_ID 
 AND B.PROCESS = C.PROCESS 
ORDER BY 1,2 

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

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、采用分批次,解決去重夯住問題

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

第一次: 
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; 
commit; 
 
第二次: 
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; 
commit; 
 
。。。。。。。 
。。。。。。。 
。。。。。。。 
 
第八次: 
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); 
commit; 

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

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

相關文章

  • VMware中l(wèi)inux環(huán)境下oracle安裝圖文教程(一)

    VMware中l(wèi)inux環(huán)境下oracle安裝圖文教程(一)

    剛剛接觸ORACLE的人來說,從那里學,如何學,有那些工具可以使用,應該執(zhí)行什么操作,一定回感到無助。所以在學習使用ORACLE之前,首先來安裝一下ORACLE 10g,在來掌握其基本工具。俗話說的好:工欲善其事,必先利其器。作為一個新手,我們還是先在VMware虛擬機里安裝吧。
    2014-08-08
  • 詳解oracle的分表之表分區(qū)的具體使用和示例

    詳解oracle的分表之表分區(qū)的具體使用和示例

    這篇文章主要介紹了詳解oracle的分表之表分區(qū)的具體使用和示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • 使用Navicat Premium工具將oracle數據庫遷移到MySQL

    使用Navicat Premium工具將oracle數據庫遷移到MySQL

    最近的業(yè)務項目需求,因此總結遇到的問題。使用Navicat Premium工具將Oralce數據庫遷移到MySQL,本文通過圖文的形式給大家詳細介紹,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • oracle定時備份壓縮的實現(xiàn)步驟

    oracle定時備份壓縮的實現(xiàn)步驟

    本篇文章是對oracle定時備份壓縮的實現(xiàn)步驟進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • Oracle在PL/SQL中使用存儲過程

    Oracle在PL/SQL中使用存儲過程

    這篇文章介紹了Oracle在PL/SQL中使用存儲過程的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • oracle如何查詢表中所有字段

    oracle如何查詢表中所有字段

    這篇文章主要介紹了oracle如何查詢表中所有字段問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Oracle數據安全面面觀

    Oracle數據安全面面觀

    Oracle數據安全面面觀...
    2007-03-03
  • 將Oracle數據庫中的數據寫入Excel

    將Oracle數據庫中的數據寫入Excel

    本文主要分享了將Oracle數據庫中的數據寫入Excel的關鍵代碼。具有很好的參考價值,需要的朋友一起來看下吧
    2016-12-12
  • sqlplus 命令登錄 Oracle數據庫的多種方法

    sqlplus 命令登錄 Oracle數據庫的多種方法

    這篇文章主要介紹了sqlplus 命令登錄 Oracle數據庫的兩種方法,方式一通過sql*plus 命令窗口,方式2:通過 cmd 窗口,每種方式給大家介紹的非常詳細,需要的朋友可以參考下
    2021-09-09
  • Oracle中scott表結構與簡單查詢實例分析

    Oracle中scott表結構與簡單查詢實例分析

    這篇文章主要介紹了Oracle中scott表結構與簡單查詢,實例分析Oracle查詢的相關技巧,需要的朋友可以參考下
    2015-04-04

最新評論