设为首页 加入收藏

TOP

Oracle使用并行的坑
2015-11-21 02:04:48 来源: 作者: 【 】 浏览:0
Tags: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的等待事件。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇rediscluster集群重启关闭 下一篇sqlserver带输入输出存储过程

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: