create table as及並行相關問題

工做中設計到更新多張千萬級數據量的表,須要先統計相關信息,再將信息更新到表中,更新操做須要幾個小時才能執行完成。
調整思路爲,先統計相關信息到中間表中C,用業務表A和C聯查,用create table as方式建立表B,刪除A表相關索引、主外鍵,建立B表索引,主外鍵,將A表rename爲備份表,將B表rename爲A。
期間考慮過用Insert into select方式,比較效率後採用create as方式。create table as是ddl語句,insert into select是dml語句,insert into select每一條記錄的時候都會產生undo和redo,整個過程相比create table as產生的redo和undo至關多,所以整個過程會慢也是正常的;可是create table as使用的前提是目標表的結構不存在才能使用;當有大量數據的時候不推薦使用Insert into as,由於該語句的插入的效率很慢;
最後增長並行,用create table B  parallel (degree default)  AS方式建立,8千萬的數據能夠在3分鐘內執行完成,還要注意建立完表以後須要關閉該表的並行,不關閉並行可能 引發執行計劃錯誤,查詢效率出現問題。 oracle

在生產環境執行過程當中發現問題:ORA-12805: parallel query server died unexpectedly spa

從新執行後執行成功,相關文章: 設計

https://community.oracle.com/thread/317343 server

另外開啓並行容易致使RAC服務問題,嚴重可能致使宕機,注意根據機器調整並行度。 索引

查看各表並行度
select table_name,degree from user_tables; 

關閉表並行
alter table B noparallel;

it

相關文章
相關標籤/搜索