首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

并行有关问题

2012-01-15 
并行问题表t的分区是按列day_id的日期的每一天分区的,(如20091201、20091202、每天一个分区,每个分区中有两

并行问题
表t的分区是按列day_id的日期的每一天分区的,
(如20091201、20091202、每天一个分区,每个分区中有两百万条数据,每个月有5000万条数据),
表t在code字段上建有索引,是local索引,create index on t(code) local,
且有足够的cpu和io.

sql_1: select t.code, max(t.time) from
  t
  where
  t.day_id between 20100101 and 20100131 
  group by t.code;
sql_2: select /*+ parallel(t,4) */ t.code, max(t.time) from
  t
  where
  t.day_id between 20100101 and 20100131 
  group by t.code;
问题:1,有种说法说‘涉及多个表分区的sql会自动并行’,上面的这句sql_1为何没并行
  2,执行sql_2时,我在pl_dev的tools-->sessions-->active sessions,看到有5个进程,
  为什么有时候用/*+ parallel(t,4) */ 放在sql中时,会有9个进程?

[解决办法]
问题:1,有种说法说‘涉及多个表分区的sql会自动并行’,上面的这句sql_1为何没并行?

答:alter table t parallel;
这以后,就会自动并行


[解决办法]
1、需要将表设计为 parallel

2、/*+ parallel(t,4) */ 用hint并行4个cup,可以在任务管理器里面可以看到有几个CPU并行运行

并行不是优化的开关
[解决办法]
既然是分区表,你可以按分区查询也比较快

再加上创建索引,几千万德数据查询也是比较快的
[解决办法]
可以在会话级默认启用并行
ALTER session enable parallel DML;
[解决办法]
LS的,允许并行DML对并行查询不起作用,并行查询的机制跟并行DML不一样。

热点排行
Bad Request.