程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle使用並行的坑

Oracle使用並行的坑

編輯:Oracle教程

Oracle使用並行的坑


現在要對5千萬數據的表刪除2千萬的數據,怎麼要快呢?直接刪肯定不行,最好的方法是:

1.用create table as

2.並行建主鍵和索引

問題來了,頭天晚上操作的,第二天上班發現了很嚴重的性能問題,那到底是什麼問題呢?來做個實驗吧!

SQL> create table test as select * from dba_objects where object_id is not null;
SQL> alter table test add constraint pk_t_object_id primary key(object_id) parallel 16 nologging;
SQL> create index idx_t_object_name on test(object_name) parallel 16 nologging;
SQL> select s.table_name, s.degree
from user_tables s
where s.table_name = 'TEST';
TABLE_NAME DEGREE
------------------------------ -----------------
TEST 16

SQL> select s.index_name, s.degree
from user_indexes s
where s.table_name = 'TEST';
INDEX_NAME DEGREE
------------------------------ -----------------
PK_T_OBJECT_ID 1
IDX_T_OBJECT_NAME 16

有兩個坑:1.你看表的並行度是不是改變 2.索引的並行度是不是改變了

需要把並行度打回來

SQL> alter table test noparallel;
SQL> alter index idx_t_object_name noparallel;
SQL> select s.table_name, s.degree
from user_tables s
where s.table_name = 'TEST';
TABLE_NAME DEGREE
------------------------------ --------------------
TEST 1
SQL> select s.index_name, s.degree
from user_indexes s
where s.table_name = 'TEST';
INDEX_NAME DEGREE
------------------------------ ---------------------
PK_T_OBJECT_ID 1
IDX_T_OBJECT_NAME 1

使用並行度造成性能問題的原因是:在未使用並行度的情況下,一條SQL只會在一個CPU上執行。如果加了並行,那就會在多個CPU上執行,在大量並發執行,勢必會引起爭用,在數據庫報告上會有db file parallel read的等待事件。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved