




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Oracle的并发技术可以将一个大任务分解为多个小任务由多个进程共同完成。合理地使用并发可以充分利用系统资源,提高效率。一、 并发的种类Parallel queryParallel DML(PDML)Parallel DDLParallel recoverymore二、 适用场合适用parallel的两个条件1)大的任务,如全表扫描大表这和日常生活中的经验是一样的,小任务自己完成都比派发任务省事2)系统有足够的资源(cpu/io)换句话说,并发是在系统资源充足、用户少的系统上,为了充分利用系统资源以提高任务处理速度而设计的一种技术。以下是几种场景:1)OLTP系统 有大量用户和session,如果每个session使用并发查询将导致系统崩溃。但也有例外例如计费系统月底或下班后没有或用户很少访问,运行批处理程序,此时可使用并发提高速度2)数据仓库系统 通常可使用并发查询、PDML等并发,注意有些数据仓库系统也提供给大量用户访问,这种系统有某些OLTP特性,应慎用并发3)无论是OLTP还是数据仓库,维护期间使用parallel ddl和PDML对管理员来说是非常有用的三、 Parallel query使用并发查询的方法:1)修改表属性Alter table big_table parallel 4;Alter table big_table parallel ;由oracle根据系统资源情况决定。这是推荐的.Oracle根据cpu数目乘以parallel threads per cpu参数(default 2),例如4cpu的机器,oracle决定parallel数目为82)使用hint , select * /*+ PARALLEL(emp,12) */ 四、 PDML例子:ALTER TABLE emp PARALLEL (10);ALTER SESSION ENABLE PARALLEL DML;INSERT INTO empSELECT * FROM t_emp;COMMIT;ALTER SESSION ENABLE PARALLEL DML;INSERT /*+ PARALLEL(emp,12) */ INTO empSELECT /*+ PARALLEL(t_emp,12) */ * FROM t_emp;COMMIT;注意:使用parallel后,insert select * 语句自动就使用direct-load了,此时不再需要使用append hint( /*+APPEND */)PDML的限制:不支持有trigger的表,在上面做PDML,能成功,但忽略了并发性不支持某些约束,例如self-referential integrity。原因是PDML分为多个独立的session去修改数据,无法保证某些完整性;容易引起死锁已经其他锁问题一个session使用了PDML,在commit/rollback之前,另一个session无法再使用PDMLAdvanced replication不支持(因为使用了trigger)Deferred constraints(约束的deferred模式指修改操作在提交时才去验证是否满足约束条件)不支持分布式事务不支持Clustered tables不支持当违反这些限制,PDML要么报错,要么忽略并行度五、 并发与空间浪费Parallel DDL以及某些PDML依赖于direct path load,即绕过databuffer直接写数据文件。例如,create table as select ,insert /*+APPEND */,这会形成空间浪费,例如倒入1010M数据,每个extent 100m,direct path load会新分配100m 的extent来存放数据(如果有小于100m的extent,常规insert可以用这些空间)。假设10个并发,每个并发倒入101M数据,会创建2个extent,则总共会创建20个extent,则形成990m空间浪费。一方面浪费了空间(如果表创建之后有常规insert,则能使用这些空间),另一方面全表扫描时会搜索这些空的extent,这也降低了全表扫描的速度。表空间的extent管理有两种方式,unform size,则每个extent大小相同,autoallocate是oracle根据内部机制决定extent大小,更灵活Uniform 方式不支持extent trimming,而autoallocate在parallel ddl中用到extent trimming,减少了空间浪费。因此在频繁使用parallel DDL操作的表空间上,要么减少uniform size每个extent的大小,要么使用autoallocate ,以减少空间浪费。六、 并发DIY-存储过程的并发以下是一个常见任务:扫描全表,修改数据,再写入新的表如果一个进程处理太慢,我们通常会自己将数据划分,然后开多个进程调用。使用11gr2 内置的并发包:DBMS_PARALLLEL_EXECUTE,大大简化了这一过程(11gr2之前,没有内置的并发程序包,需要手工按照rowid或主键划分大表,然后通过dbms_job或dbms_schedule并发调用。)我们以前两天*的一个程序为例,看看如何使用这一并发技术(本例较简单,不见得需要使用这样技术,仅仅作为例子来说明)程序的目的是删除bmf中orig_bill_ref_no like 18%的记录,本来一句sql可以完成,由于数据量太大,系统回滚段不足。因此开发人员准备分多个进程运行declarecursor c1is select orig_bill_ref_no from bmf where orig_bill_ref_no like 18%and mod(account_no, 5) = 0; (将数据分为5段)beginfor r1 in c1 loopdelete from bmf where orig_bill_ref_no = r1.orig_bill_ref_no;commit;end loop;commit;end;/这样的写法会有什么问题呢,很快就遇到snapshot too old错误了。原因是select打开bmf游标,同时修改bmf并commit数据,由于查询一致性要求,打开的游标要看到的是bmf修改之前的情况,这是从undo去读的,因此一旦时间超出undo_retention,undo信息过期,就报snapshot too old了。使用ora11g提供的并发包的写法:1) 创建过程serial过程,用来被多个并发线程调用create or replaceprocedure serial( p_lo_rid in rowid, p_hi_rid in rowid )isbegindelete from bmfwhere rowid between p_lo_rid and p_hi_rid and orig_bill_ref_no like 15%;end;/2) 按照rowid将表划分为多个chunk,供线程调用begindbms_parallel_execute.create_task(PROCESS BIG TABLE);dbms_parallel_execute.create_chunks_by_rowid( task_name = PROCESS BIG TABLE,table_owner = LUW,table_name = BMF,by_row = false, -不按行记录数而按block数chunk_size = 2000 );end;/select *from (select chunk_id, status, start_rowid, end_rowidfrom dba_parallel_execute_chunkswhere task_name = PROCESS BIG TABLEorder by chunk_id)where rownum PROCESS BIG TABLE,sql_stmt = begin serial( :start_id, :end_id ); end;,language_flag = DBMS_SQL.NATIVE,parallel_level = 4 );end;/4) 删除并发作业begindbms_parallel_execute.drop_task(process big table );end;/那么使用并发和简单的delete相比,速度怎样呢使用并
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 民法课件笔记
- 初源电子理论考试题及答案
- 表格考试题库及答案大全
- 民歌编花篮声部课件
- 新质生产力陕西行
- 金融业拥抱新质生产力
- 新质生产力:内涵与发展路径
- 广东:加快形成新质生产力路径
- 广东视角:新质生产力的实践与思考
- 端午节特色的活动策划方案
- 麻风病防治知识讲座
- 2023年威海桃威铁路有限公司招聘笔试参考题库附带答案详解
- 急性心梗诊疗(2025指南)解读课件
- 2025至2030年中国综合能源服务产业投资规划及前景预测报告
- 虾滑产品知识培训课件
- 2025-2030全球宠物电器行业发展趋势分析及投资前景预测研究报告
- 吸痰护理操作课件
- 2025年天津市专业人员继续教育试题及答案3
- 主要诊断及主要手术的选择原则
- 2024年急危重症患者鼻空肠营养管管理专家共识
- 医学教材 《中国高尿酸血症相关疾病诊疗多学科专家共识(2023年版)》解读课件
评论
0/150
提交评论