oracle_并发优化.docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
oracle_并发优化

Oracle的并发技术可以将一个大任务分解为多个小任务由多个进程共同完成。合理地使用并发可以充分利用系统资源,提高效率。一、 并发的种类Parallel queryParallel DML(PDML)Parallel DDL?Parallel recovery[@more@]二、 适用场合适用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 ,以

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档