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的等待事件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值