>  기사  >  데이터 베이스  >  oracle并行度调整

oracle并行度调整

WBOY
WBOY원래의
2016-06-07 15:50:521154검색

oracle并行度使用多个cpu与io来执行数据库操作,能够显著改善大型数据库操作性能,比如DSS或数据仓库 适用于 大表查询,join,分区索引的查询 创建大量的index 创建大量的表(包括固化视图) 批量的insert,update,delete 查行执行适合场景 对称多处理器,集群

oracle并行度使用多个cpu与io来执行数据库操作,能够显著改善大型数据库操作性能,比如DSS或数据仓库

适用于

大表查询,join,分区索引的查询

创建大量的index

创建大量的表(包括固化视图)

批量的insert,update,delete

查行执行适合场景

对称多处理器,集群,并行系统

足够的带宽

cpu利用不足

足够的内存用于其他操作,排序,hash,缓存

查行执行适合与dss与数据仓库,也适合于批量操作的OLTP系统,不适合OLTP简介的dml或select操作

并行执行不适合场景

非常短的查询或事务

这包括大多数的OLTP,因为并行协调的成本高于并行的好处

大量利用io,cpu,内存的操作

基本硬件要求

并行执行设计需要多个cpu与io来实现快速的查询,每个硬件都应该维持在同一个吞吐量

哪些操作可以用并行

全表查询,分区查询,索引快速查询

join操作

nested loop, sort merge, hash, and star transformation

DDL语句

CREATE TABLE AS SELECTCREATE INDEXREBUILD INDEXREBUILD INDEX PARTITION, and MOVE/SPLIT/COALESCE PARTITION

DML语句

<code>INSERT AS SELECTUPDATEDELETE, and MERGE operations

<span>并行执行的执行计划</span>

 执行

EXPLAIN PLAN FOR
SELECT /*+ PARALLEL(4) */ customers.cust_first_name, customers.cust_last_name, 
  MAX(QUANTITY_SOLD), AVG(QUANTITY_SOLD)
FROM sales, customers
WHERE sales.cust_id=customers.cust_id
GROUP BY customers.cust_first_name, customers.cust_last_name;

查看执行计划

SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY());

执行并行程度

<span><span><span><span><span lang="en-US">ALTER TABLES sales PARALLEL 8;</span></span></span></span></span>
<span><span><span>ALTER TABLE customers PARALLEL 4</span></span></span>

默认并行度

单实例:PARALLEL_THREADS_PER_CPUx CPU_COUNT

集群: <span><span><span><span lang="en-US">PARALLEL_THREADS_PER_CPUx CPU_COUNT x INSTANCE_COUNT</span></span></span></span>

<span><span><span><span lang="en-US">parallel_threads_per_cpu</span></span></span></span><span><span><span><span lang="zh-CN">查询</span></span></span></span><span><span><span><span lang="en-US">showparameter parallel_threads_per_cpu</span></span></span></span>

自动并行管理

PARALLEL_DEGREE_POLICY设置为auto说明由oracle决定并行执行

自动并行流程

sql发布

oracle优化解析并生成执行计划

查看PARALLEL_MIN_TIME_THRESHOLD参数值

如果执行时间小于该值就串行执行否则并行执行

<span><span><span><span lang="zh-CN">设置自动并行度</span></span></span></span>

<span><span><span><span lang="zh-CN">方法</span></span></span></span><span><span><span><span lang="en-US">1</span></span></span></span>

<span><span><span><span lang="en-US">altersession set parallel_degree_policy=limited;</span></span></span></span>

<span><span><span><span lang="en-US">altertable paralle(degree default);</span></span></span></span>

<span><span><span><span lang="zh-CN">方法</span></span></span></span><span><span><span><span lang="en-US">2</span></span></span></span>

<span><span><span><span lang="zh-CN">通过语句设置并行度</span></span></span></span>

<span><span><span><span lang="zh-CN">并行度</span></span></span></span><span><span><span><span lang="en-US">10</span></span></span></span>

<span><code><span><span><span><span lang="en-US">SELECT /*+ parallel(10) */ ename, dname FROM emp e, dept d</span></span></span></span></code></span>
<span><span><span>WHERE e.deptno=d.deptno;</span></span></span>

<span><span><span><span lang="zh-CN">非并行度</span></span></span></span>

<span><code><span><span><span><span lang="en-US">SELECT /*+ no_parallel */ ename, dname FROM emp e, dept d</span></span></span></span></code></span>
<span><span><span>WHERE e.deptno=d.deptno;</span></span></span>

<span><span><span><span lang="zh-CN">自动并行度</span></span></span></span>

<span><code><span><span><span><span lang="en-US">SELECT /*+ parallel(auto) */ ename, dname FROM emp e, dept d</span></span></span></span></code></span>
<span><span><span>WHERE e.deptno=d.deptno;</span></span></span>
In-memory并行

PARALLEL_DEGREE_POLICY设置为auto表示并行执行时利用buffer cache数据,

PARALLEL_ADAPTIVE_MULTI_USER默认为true保证自适应并行执行,oracle根据执行时间来决定是否来并行执,从而避免超载

PARALLEL_DEGREE_POLICY参数数决定是否自动DOP,并行语句队列,In-Meory并行执行

有以下几个值 

MANUAL 关闭auto DOP,并行语句队列,In-Memory并行,在11.2为默认

LIMITED关闭auto DOP,但开启并行语句队列,In-Memory并行,可以在语句中加入DOP设置来并行执

AUTO开启所有三项

并行DML

alter session enable parallel dml;

只有设置了DML并行才会在适合的语句调用并行

在insert 的SQL中使用APPEND,如:

Insert /*+append */ into t select * from t1;

Oracle 执行直接加载时,数据直接追加到数据段的最后,不需要花费时间在段中需找空间,数据不经过data buffer直接写到数据文件中,效率要比传统的加载方式高。


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.