oracle设置表的并行度是什么意思

作者&投稿:丹若 (若有异议请与网页底部的电邮联系)
oracle设置表的并行度是什么意思~

oracle设置表的并行度是什么意思
查看dba_tables数据字典时,可以发现有“DEGREE”字段,这个字段表示的就是数据表的并行度。这个参数的设置,关系着数据库的I/O,以及sql的执行效率。

并行概念

并行执行(parallel execution)是Oracle企业版才有的特性(标准版中没有这个特性),指能够将一个大型串行任务(任何DML,或者一般的DDL)物理地划分为多个较小的部分,这些较小的部分可以同时得到处理。

并行包括:

并行查询:这是指能使用多个操作系统进程或线程来执行一个查询。Oracle会发现能并行执行的操作(如全表扫描或大规模排序),并创建一个查询计划来实现)。
并行DML(PDML):这在本质上与并行查询很相似,但是PDML主要是使用并行处理来执行修改(INSERT、UPDATE、DELETE和MERGE)。
并行DDL:并行DDL是指Oracle能并行地执行大规模的DDL操作。例如,索引重建、创建一个新索引、数据加载以及大表的重组等都可以使用并行处理。
并行恢复:这是指数据库能并行地执行实例(甚至介质)恢复,以减少从故障恢复所需的时间。
过程并行化:这是指能并行地运行所开发的代码。

何时使用并行

在应用并行执行之前,需要保证以下两点成立:

必须有一个非常大的任务,如对50GB数据进行全面扫描。
必须有足够的可用资源(CPU、I/O、内存)。在并行全面扫描50GB数据之前,你要确保有足够的空闲CPU(以容纳并行进程),还要有足够的I/O通道。

如果只有一个小任务(通常OLTP系统中执行的查询就是这种典型的小任务),或者你的可用资源不足(这也是OLTP系统中很典型的情况),其中CPU和I/O资源通常已经得到最大限度的使用,那就根本不用考虑并行执行。

如果一个任务只需要几秒(或更短时间)就能串行地完成,引入并行执行后,相关的管理开销可能会让整个过程花费更长的时间。

举例如,写一页文档若12个人来写,需要开会分段等,可能并不如一个人来写更快。而如果写1200页,12个人写需要的时间只为原来的1/12,就算分配任务可能也就1/12,还是比一个人写要快多了。

并行查询

并行查询允许将一个SQL SELECT语句划分为多个较小的查询,每个部分的查询并发地运行,然后会将各个部分的结果组合起来,提供最终的答案。

在并行进程和扫描文件之间并不存在1对1映射,可以多个进程扫描同一个文件。

各个并行进程可称为并行执行服务器(parallel execution server),有时也称为并行查询(parallel
query,PQ)从属进程。各个并行执行服务器都是单独的会话,就像是专业服务器进程一样连接数据库。每个并行执行服务器分别负责扫描表中一个部分(各
个部分都不重叠),汇总其结果子集,将其输出发回给协调服务器(即原始会话的服务器进程),它再将这些子结果汇总为最终答案。

在默认情况下,Oracle是不启用并行查询的。启用并行查询有多种方法,可以直接在查询中使用一个提示,或者修改表要求考虑并行执行路径等。

【并行查询方法】

1)暗示hints式,临时有效

select /*+parallel(table_name num)*/ count(*) from table_name;

多表关联时多表并行:

select /*+parallel(table_name1,num1) parallel(table_name2,num2)*/ count(*) from table_name1, table_name2;

2)alter table对象式,长期有效

alter table table_name parallel num;

3)alter session会话式,会话生命周期有效

alter session force parallel query parallel num;

4)并行DDL式,会话生命周期有效

alter session enable parallel dml;

对于前两种方式,若省略num则Oracle将自动根据负载确定并行度。并行度要随着系统上工作负载的增减而变化。如果有充足的空闲资源,并行度会
上升;如果可用资源有限,并行度则会下降。这样就不会为机器强加一个固定的并行度。利用这种方法,允许Oracle动态地增加或减少查询所需的并发资源
量。

【查看默认并行数】

1)确定会话SID

select sid from v$mystat where rownum = 1;

2)在其他会话中查询

select sid,qcsid,server#,degree from v$px_session where qcsid = num;

一般而言,如果能访问尽可能多的资源(CPU、内存和I/O),并行执行就能最好地发挥作用。但这并不是说如果整个数据集都在一个磁盘上,就从并行
查询得不到任何好处。不过如果整个数据集都在一个磁盘上,可能确实不如使用多个磁盘那样能有更多收获。即使使用一个磁盘,在响应时间上也可能可以得到一定
的速度提升。原因在于:给定的一个并行执行服务器在统计行时并不读取这些行,反之亦然。所以,与执行串行相比,两个并行执行服务器可以在更短的时间内完成
所有行的统计。

数据分布在多个物理设备上可以提高I/O,如表分区、跨磁盘等。

在Oracle 11g Release2及以上版本中,引入了一项新功能来限制资源过度使用:并行语句排除(Parallel
Statement
Queuing,PSQ)。使用PSQ时,数据库会限制并发执行的并行查询数,并把更多的并行请求放在一个执行队列中。CPU资源用尽时数据库会阻止新的
请求变为活动状态。这些请求并没有失败,它们只是会延迟开始,也就是说它们将排队。资源可用时,数据库就会开始执行队列中的查询。

并行DML

Oracle文档将并行DML(PDML)一词的范围限制为只包括INSERT、UPDATE、DELETE和MERGE(不像平常的DML那样还
包括SELECT)。在PDML期间,Oracle可以使用多个并行执行服务器来执行INSERT、UPDATE、DELETE或MERGE,而不是只利
用一个串行进程。在一个有充足I/O带宽的多CPU主机上,对于大规模的DML操作,可能会得到很大的速度提升。

不过,不能把PDML当成提高OLTP应用速度的一个特性。因为并行操作设计为要充分、完全地利用一台机器上的所有资源。通过这种设计,一个用户可
以完全使用机器上的所有磁盘、CPU和内存。在某些数据仓库中(有大量数据,而用户很少),这可能正是你想要的。而在一个OLTP系统中(大量用户都在做
很短、很快的事务),可能就不能希望如此了,你不想让用户能够完全占用机器资源。

类似于Oracle执行的分布式查询,PDML操作采用同样的方式执行,即每个并行执行服务器相当于一个单独数据库实例中的一个进程。这些事务都结束后,会执行一个相当于快速2PC的过程来提交这些单独的独立事务。这些事务要么都由PDML协调会话提交,要么无一提交。

由于PDML采用的一种伪分布式的实现,因此存在一些限制:

PDML操作期间不支持触发器。这是一个很合理的限制,因为触发器可能会向更新增加大量开销,而你使用PDML的本来目的是为了更快一些,这两方面是矛盾的,不能放在一起。
PDML期间,不支持某些声明方式的引用完整性约束,因为表中的每一片(部分)会在单独的会话中作为单独的事务进行修改。例如,PDML操作不支持自引用完整性。如果真的支持自引用完整性,可能会出现死锁和其他锁定问题。
在提交或回滚之前,不能访问用PDML修改的表。
PDML不支持高级复制(因为复制特性的实现要基于触发器)。
不支持延迟约束(也就是说,采用延迟模式的约束)。
如果表是分区的,PDML只可能在有位图索引或LOB列的表上执行,而且并行度取决于分区数。在这种情况下,无法在分区内并行执行一个操作,因为每个分区只有一个并行执行服务器来处理。
执行PDML时不支持分布式事务。
PDML不支持聚簇表。

并行DDL

从维护的观点看,以及从管理的角度来说,并行DDL才是Oracle中并行执行最突出的优点。如果认为并行查询主要是为最终用户设计的,那么并行
DDL则是为DBA/开发人员设计的。如果没有并行执行,DBA将很难真正充分利用硬件的全部能力。但如果利用并行执行,则完全可以做到。以下SQL
DDL命令允许“并行化”:

CREATE INDEX:多个并行执行服务器可以扫描表、对数据排序,并把有序的段写出到索引结构。
CREATE TABLE AS SELECT:执行SELECT的查询可以使用并行查询来执行,表加载本身可以并行完成。
ALTER INDEX REBUILD:索引结构可以并行重建。
ALTER TABLE MOVE:表可以并行移动。
ALTER TABLE SPLIT|COALESCE PARTITION:单个表分区可以并行地分解或合并。
ALTER INDEX SPLIT PARTITION:索引分区可以并行地分解。

前4个命令还适用于单个的表/索引分区,也就是说,可以并行地MOVE一个表的单个分区。

并行DDL和使用外部表的数据加载

利用并行DDL,再加上外部表,就能通过一个简单的CREATE TABLE AS SELECT or INSERT /*+ APPEND
*/来实现并行直接路径加载。不用再编写脚本,不必再分解文件,也不用协调要运行的N个脚本。简单地说,通过结合并行DDL和外部表,不仅提供了纯粹的易
用性,而且全无性能损失。

并行DDL和区段截断

并行DDL依赖于直接路径操作。也就是说,数据不传递到缓冲区缓存以便以后写出;而是由一个操作(如CREATE TABLE AS
SELECT)来创建新的区段,并直接写入这些区段,数据直接从查询写到磁盘(放在这些新分配的区段中)。每个并行执行服务器执行自己的部分CREATE
TABLE AS SELECT工作,并且都会写至自己的区段。INSERT /*+ APPEND
*/(直接路径插入)会在一个段的HWM“之上“写,每个并行执行服务器再写至其自己的一组区段,而不会与其他并行执行服务器共享。因此,如果执行一个并
行CREATE TABLE AS
SELECT,并使用4个并行执行服务器来创建表,就至少有4个分区,可能还会更多。每个并行执行服务器会分配其自己的区段,向其写入,等填满时,再分配
另一个新的区段,并行执行服务器不会使用由其他并行执行服务器非品牌的区段。

在数据仓库环境中,执行一个大规模的加载之后,这可能导致“过渡浪费“。假设你想加载1,010MB的数据(大约1GB),而且正在使用一个有
100MB区段的表空间,你决定使用10个并行执行服务器来加载这个数据。每个并行执行服务器先分配其自己的100MB区段(总共会有10个100MB的
区段),并在其中填入数据。由于每个并行执行服务器都要加载101MB的数据,所以它会填满第一个区段,然后再继续分配另一个100MB的区段,但实际上
只会使用这个区段中1MB的空间。现在就有了20区段,其中10个是满的,另外10个则不同,这10个区段中都各有1MB的数据,因此,总共会有
990MB的空间是”已分配但未使用的“。下一次加载是可以使用这个空间,但是对现在来说,你就有了990MB的死空间。此时区段截断(extend
trimming)就能派上用场了。Oracle会试图取每个并行执行服务器的最后一个区段,并将其”截断为“可能的最小大小。

区段截断和字典管理表空间

如果使用传统的字典管理表空间,Oracle可以把只包含1MB数据的各个100MB区段转变或1MB的区段。遗憾的是,(在字典管理的表空间中)
这会留下10个不连续的99MB空闲区段,因为你的分配机制采用的是100MB区段,所以这990MB空间就会用不上!下一次分配100MB时,往往无法
使用现有的这些空间,因为现在的情况是:有99MB的空闲空间,接下来是1MB的已分配空间,然后又是99MB空闲空间,依此类推。

区段截断和本地管理表空间

本地管理表空间有两种类型:UNIFORM SIZE 和AUTOALLOCATE,UNIFORM
SIZE是指表空间中的每个区段大小总是完全相同;AUTOALLOCATE则表示Oracle会使用一种内部算法来确定每个区段应该是多大。这些方法都
能很好地解决上述问题,不过,这两种方法的解决策略截然不同。

在字典管理的表空间中,如果请求一个100MB区段,倘若Oracle只找到了99MB的自由区段,请求还是会失败。与字典管理表空间不同,有AUTOALLOCATE区段的本地管理表空间可以更为灵活。为了试图使用所有空闲空间,它可以减小所请求的空间大小。

随着使用并行直接路径操作向表UNIFORM_TEST加载越来越多的数据,过一段时间后,空间利用情况会变得越来越糟糕。对此,我们可能希望使用
一个更小的统一区段大小,或者使用AUTOALLOCATE。一段时间后,AUTOALLOCATE也可能生成更多的区段,但是由于会发生区段截断,所以
空间利用情况要好得多。

查看dba_tables数据字典时,可以发现有“DEGREE”字段,这个字段表示的就是数据表的并行度。这个参数的设置,关系着数据库的I/O,以及sql的执行效率。

并行度的优点就是能够最大限度的利用机器的多个cpu资源,是多个cpu同时工作,从而达到提高数据库工作效率的目的。在系统空闲时间,使用并行是个不错的选择,但是好东西总是相对而言,没有绝对的好坏,不当的使用,同样会引起数据库的新的问题产生。
1、 此参数的大小设置
orcl@ SCOTT> select table_name,degree from user_tables;

TABLE_NAME DEGREE
------------------------------ --------------------
T1 1
TAB_REGISTER 1
EMP 1
EMP_BAK 1
SALGRADE 1
BONUS 1
DEPT 1
LETTER_USER 1
T2 1
BASE_LOG 1
T 1
通过上例的例子大家可以观察,此参数的默认值为1,这个数值,我们认为的增加,当设置表的并行度非常高的时候,sql优化器将可能对表进行全表扫描,引起 Direct Path Read 等待 。
在使用并行查询前需要慎重考虑, 因为并行查询尽管能提高程序的响应时间, 但是会
消耗比较多的资源。 对于低配置的数据库服务器需要慎重。 此外, 需要确认并行度的设置要与 IO 系统的配置相符(建议并行度为 2~4 * CPU 数) 。
2、 并行度的修改
alter table t parallel(degree 1);------直接指定表的并行度
alter table t parallel; ----------设置表的并行度为default
3、 如何在sql语句中使用表的并行度,并选择合适的并行等级
示例:使用并行查询的执行计划
并行度为4
orcl@ SCOTT> SELECT /*+ PARALLEL(4) */
2 MAX(sal),
3 AVG(comm)
4 FROM emp,dept
5 WHERE emp.deptno=dept.deptno
6 GROUP BY 1


oracle 数据库如何建表?
(3)开始创建表,我们进行创建一个有关新闻信息的简单表,其中包含信息如下所示:(4)下面进行表的创建:左键点击要建表的数据库连接名打开,在“表(已过滤)”选项进行右键单击选择“新建表”,然后出现新建表对话框,具体步骤如下图所示:(5)接着在弹出的对话框中进行设置表格式,具体步骤如下所示...

怎么建oracle的表格
这种的注释是存储在数据库中的,一般在脚本文件,过程或函数中建议增加单行或多行注释以增加可读性,在Oracle数据库中,单行注释使用两个短的中划线“_ _”表示,多行注释使用“\/*...*\/”表示。在数据字典中查看表的信息:和表相关的数据字典主要包括USER_TABLES和USER_OBJECTS查看表信息,以及USER_...

oracle中为什么要设置header(头表)和line(细分表)
比如你去超市买东西,给你打的小票就相当于头(header),每个客户一张小票,里面有超市编号、购买时间、收款员等信息 明细(line)就是小票上的每个细目,比如你买了面包、牛奶、黄油,就会有品名、数量、单价等信息

Oracle用户权限表的管理方法
我们将通过介绍命令的方式 谈谈Oracle用户权限表的管理方法 希望对大家有所帮助 我们将从创建Oracle用户权限表 开始谈起 然后讲解登陆等一般性动作 使大家对Oracle用户权限表有个深入的了解 一 创建 sys;\/\/系统管理员 拥有最高权限 system;\/\/本地管理员 次高权限 scott;\/\/普通用户 密码默认为tiger ...

oracle中表空间设置问题
用命令:比如设置undo表空间大小:ALTER DATABASE DATAFILE 'D:\\Programs\\oracle\\product\\10.2.0\\oradata\\ctsdb\\undotbs01.dbf'RESIZE 2048M;用界面:开始菜单中找到 Enterprise Manager Console(安装Oracle Client后才有)或直接CMD窗口中运行命令:D:\\oracle\\product\\10.2.0\\client_1\\BIN>oemapp console...

oracle数据库唯一约束设置方法
在Oracle数据库中,可以使用唯一约束(Unique Constraint)来确保表中的某列或多列的值是唯一的。以下是根据条件设置唯一约束的一般步骤:1、创建表时定义唯一约束:在创建表时,可以使用CREATE TABLE语句来定义唯一约束。在列定义中使用UNIQUE关键字,标识要设置唯一约束的列。例如:2、使用ALTER TABLE语句添加...

oracle创建表空间的方法有哪些
oracle创建表空间操作方法如下:1.开启oracle服务,打开plsql工具,使用管理员账户登录 2.点左上角的新建SQL窗口 3.创建表空间。在sql窗口中输入create tablespace test datafile 'D:\\test.ora' size 1000m;这里的test为表空间名称,路径自己来命名。然后点执行按钮。4.执行成功后,继续创建用户。输入...

oracle19c 用户、表空间、权限详解与相关操作
tablespaces查询默认表空间,可创建、重命名、设置读写状态及可用性,还需管理大文件表空间和临时表空间。4. 数据文件管理 数据文件的在线\/脱机状态可通过alter tablespace调整,更改文件名称和删除需满足特定条件。更多详细信息可参考《Oracle从入门到精通》以及相关博客如cnblogs.com\/javasl\/p\/14...

oracle sql developer建表的时候id字段的自动递增怎么设置
oracle sql developer建表的时候id字段的自动递增的设置方法和步骤如下:1、首先,打开sql server数据库,创建一个新表,然后在表中创建id字段并选择int类型,如下图所示,然后进入下一步。2、其次,完成上述步骤后,选择id字段,然后在下面的列属性中找到标识规范,如下图所示,然后进入下一步。3、接...

oracle SQL语句怎么修改数据表的字段允许为空?
字段允许为空的语句为:alter table 表名 alter column 列名 类型长度 null。数据库SQL语言的修改语句,可以用来修改基本表,其一般表示格式为:ALTER TABLE<表名>[改变方式]改变方式:1、 加一个栏位: ADD "栏位 1" "栏位 1 资料种类"2、删去一个栏位: DROP "栏位 1"3、改变栏位名称: ...

新宁县13845036513: oracle设置表的并行度是什么意思 -
裘苛益心: 查看dba_tables数据字典时,可以发现有“DEGREE”字段,这个字段表示的就是数据表的并行度.这个参数的设置,关系着数据库的I/O,以及sql的执行效率.并行度的优点就是能够最大限度的利用机器的多个cpu资源,是多个cpu同时工作,...

新宁县13845036513: 如何设置oracle的并行度 -
裘苛益心: 设置并行度:alter table table_name parallel(degree 4); ---4是修改该表并行度 alter table table_name parallel ; ---修改并行度为默认值

新宁县13845036513: oracle中如何将表的并行度设定为DEFAULT?如下: -
裘苛益心: SQL> create table testa1 (ti int) ;Table created.SQL> create table testa2 (t1 int) parallel;Table created.SQL> SELECT owner, table_name, degree FROM dba_tables WHERE table_name in ('testa1','testa2');no rows selectedSQL> SELECT ...

新宁县13845036513: 如何配置Oracle并行处理 -
裘苛益心: 判断并行度 合适的并行度DOP对于良好的并行性能很关键.Oracle会按如下方式设定DOP: 1、如果指定或请求了并行执行,但是没有指定DOP,默认DOP会设置为该系统上CPU内核数量的两倍.对于RAC系统,DOP值会是整个集群内核数量...

新宁县13845036513: 怎样查找oracle并行查询sql -
裘苛益心: 直接用hint即可.例如:select/*+parallel(o2)*/*fromt_objectso其中o为要开启并行的表的别名,2为并行度.不过不一定会提升效率,一般查询中使用parallel的情景如下:需要大量的表的扫描、连接或者分区索引扫描.聚合操作(计数).

新宁县13845036513: 请教,如何修改ORACLE中的最大并行用户数 -
裘苛益心: 1、查看并行度 select table_name,degree from user_tables; --并行度按照用户表分别设置2、修改并行度 alter table table_name parallel(degree 4); ---4是修改该表并行度 alter table table_name parallel ; ---修改并行度为默认值3、在语句中指定并行度 SELECT /*+ PARALLEL(4) */ FROM T ---指定并行度为4 SELECT /*+ no_parallel */ FROM T --- 非并行度

新宁县13845036513: oracle 建索引怎么开启并行 -
裘苛益心: 索引时,我们为了建索引快,会加上并行,加上并行之后,此列索引就会是并行了. 访问有并行度的索引时,CBO可能可能会考虑并行执行,这可能会引发一些问题, 如在服务器资源紧张的时候用并行会引起更加严重的争用.当使用并行后,需要把并行度改回来.1.并发常见索引 CREATE INDEX 索引名 ON 表名(字段名) parallel 32;2.关闭并发 ALTER INDEX 索引名 noparallel;

新宁县13845036513: 什么叫Oracle Parallel模式 -
裘苛益心: Oracle Parallel用法Oracle技术 2011-03-23 15:51:08 阅读105 评论0 字号:大中小 订阅 .一、Parallel1. 用途 强行启用并行度来执行当前SQL.这个在Oracle 9i之后的版本可以使用,之前的版本现在没有环境进行测试.也就是说,加上这个说明,...

新宁县13845036513: 关于ORACLE并行度最多只能用到4个吗 -
裘苛益心: 在语句中指定并行度 SELECT /*+ PARALLEL(4) */ FROM T ---指定并行度为4 SELECT /*+ no_parallel */ FROM T --- 非并行度 SELECT /*+ parallel(auto) */ FROM T ---自动并行度

新宁县13845036513: 在SQL语句中用PARALLEL指定并行查询,应该怎么用 -
裘苛益心: 并行查询在sql语句上不用设置.是通过系统参数,将并行设置打开的.oracle 11g中,parallel_degree_prolicy控制的,默认是manual关闭在未开启的状态下,也可以对执行表进行并行处理1. alter table table_name parallel; 2.也可以sql中加hits 如 select /*+ PARALLEL(t1, <degree>)*/ * from t1<degree>如果不输入,是使用默认的值

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网