dbms_parallel_execute用法问题

我是一颗小小小草 2017-07-18 02:41:20
declare
vc_sql varchar2(1000);
n_try number;
n_status number;
begin
dbms_parallel_execute.create_task(task_name => 'T_Update');

dbms_parallel_execute.create_chunks_by_number_col(task_name => 'T_Update',
table_owner => 'TEST',
table_name => 'KETTLE_A',
table_column => 'K_ID'
chunk_size => 10000);

vc_sql := 'update KETTLE_A set flag =2 where kid := start_id between := end_id';

dbms_output.put_line(vc_sql);
dbms_parallel_execute.run_task(task_name => 'T_Update',
sql_stmt => vc_sql,
language_flag => dbms_sql.native,
parallel_level => 2);
n_try := 0;
n_status := dbms_parallel_execute.task_status('T_Update');
while (n_try < 2 and (n_status != dbms_parallel_execute.FINISHED)) loop
n_try := n_try + 1;
dbms_parallel_execute.resume_task('T_Update');
n_status := dbms_parallel_execute.task_status('T_Update');
end loop;

dbms_output.put_line('' || n_try);
dbms_parallel_execute.drop_task('T_Update');
end;

以上过程中parallel_level参数设置为1,整个流程任务可正常更新,当parallel_level 的参数大于1时,任务无法正常并行更新,这是为什么?电脑cpu_count=4在服务器上测试也是一样情况
...全文
341 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 2 楼 sxq129601 的回复:
show parameter job 你看看 job_queue_processes是多少,如果小于2就调大点

厉害了 找了好久这个参数。目前设置好后可以并发更新,但是任务不能正常的结束,试了好几次user_parallel_execute_chunks表中总有一条数据状态是ASSIGNED。END_TS没有结束时间,需要更新的表其实是已经更新完了,就是这个状态改变不了和存储过程一直执行中,看网上是说要在存储过程最后加上删除任务的语句,这个真的无解么?
sxq129601 2017-07-18
  • 打赏
  • 举报
回复
show parameter job 你看看 job_queue_processes是多少,如果小于2就调大点
sxq129601 2017-07-18
  • 打赏
  • 举报
回复
这个没试过,感觉只有大表更新才有意义,看下: table_column => 'K_ID' 但你更新的时候列名是where kid 是不是写错了

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧