首页 > 其他分享 >并行的常见问题和注意事项

并行的常见问题和注意事项

时间:2023-06-19 13:06:32浏览次数:53  
标签:常见问题 并行 SQL dml alter session 注意事项 parallel


关于Oracle中的并行,可以说是一把双刃剑,用得好,可以充分利用系统资源,提升数据库的处理能力,用得不好,可能会适得其反。

并行的基本使用方法,对于大部分SQL开发者和DBA来说,并行的一些最基本的使用方法还没有完全掌握,为此老虎刘老师特意写了一篇文章《关于parallel(并行)的几个基本常识》,着重介绍一下并行使用的常见问题及注意事项,非常受益。

1、什么时候使用并行?

常见的场景有:

a) 普通SQL最常见的情况就是大表的全表扫描,还有就是大的索引的快速全扫描(注意,index fast full scan可以使用并行,index full scan 不能使用并行)。

需要纠正一个误区:SQL执行慢就可以通过使用并行或是增加并行来提高速度。

正解:并行能否发挥作用要看SQL的具体执行计划,比如标量子查询或是DB link,增大并行带来的性能提升是微乎其微的!

多大的表算大表?

至少要百万级以上记录的表吧。如果几亿甚至十几亿记录数的表全表扫描不使用并行,SQL的执行时间会相当长,特别是表在SQL执行的过程中如果还有其他session的DML操作的时候。

OLTP系统的正常事务一般不会使用大表全扫描的执行计划,如果有一些统计分析的业务,建议在系统资源相对空闲的时候开启并行。

b) 用create table As Select创建一张大表,如

create table test parallel 16 as select .... from t1,t2 where .....;
alter table test noparallel;

c) 创建或重建索引

create index idx_test on table_A(name) parallel 8;
alter index idx_test noparallel;

d) 大表收集统计信息,可以设置并行,如degree=>8

其他不常见的操作还有表压缩等,一些比较耗时的分区操作也可以查查语法,看看是否支持并行操作。

2、并行度的选择

一般使用2的幂作为并行度,如2、4、8、16等,正常情况并行度不要设置太高,建议最多不要超过32。当然,特殊情况特殊对待,强悍的系统(比如 exadata),如果需要非常高的响应速度,并行度再多个几倍也不是问题。并行高的时候并发就要减少,否则可能会耗光并行资源。

3、并行hint的写法

通常我们都会使用hint在SQL级别设置并行,一般不在表上和索引上设置并行度,所以我们上面并行创建表和索引的例子,后面都伴随着一个noparallel,如果在创建表或索引时使用了并行,要把它改成noparallel或parallel 1 :

alter table/index table_name/index_name noparallel/parallel 1;

Hint的写法在10g和11g+有很大差别,11g+就方便很多。

10g 及以下:

每个需要并行的表都要指定并行,如 /*+ parallel(a 4) parallel(b 4) */  ,如果SQL涉及的表较多,那么hint会比较长;如果内联视图较多,经常会出来遗漏的情况。如果某个表没有指定并行,那么就只能串行,如果某个大表忘 了写,就会出现性能瓶颈。

11g+:

只要在整个sql的任何一个关键字(select、update、insert、delete、merge)后面出现一次parallel(n),那么整个SQL相关的表,都会使用并行,在写法上非常的简洁,而且不会遗漏。现在新开发的应用都应该是11gR2以上了,忘了10g的写法吧。

注意:

/*+ parallel */ 或 /*+ parallel 8 */是错误的并行hint写法,这些不正确的写法会导致SQL使用一个比较大的并行度,消耗大量的系统资源。

    

4、并行DML

DML有4种,INSERT、DELETE、UPDATE还有MERGE,如:

insert /*+ parallel(4) */ into t1 select .... from ....;

这个写法将会在select部分使用并行度为4的并行,DML部分的并行并没有真正的启用,12c之前,DML的并行默认是关闭的,如果需要使用,必须在session级别通过下面命令开启:

alter session enable parallel dml;--推荐写法

或者

alter session force parallel dml parallel n;
--用force的语法,可以使下面的dml即使不用parallel的hint,
也会使用并行度为n的并行。

执行这个命令后,才真正开启了DML的并行。

从12c开始,启用并行DML的方法也有了改进,可以说操作更加简单了,不用alter session的方式,而是直接用enable_parallel_dml的hint启用,如:

insert /*+ enable_parallel_dml parallel(8) */ into tab_name select * from ....;
commit;
alter session enable parallel dml;
insert /*+ parallel(8) */ into tab_name select * from ....;
commit;
alter session disable parallel dml;


注意:

开启了DML的并行后,接下来的DML语句将会产生一个表锁,在commit之前,当前session不能对该表做查询和dml操作,其他session也不能对该表做DML操作。

所以建议,并行dml语句,应该在语句执行后立即commit; 然后再关闭并行dml,完整的过程应该是:

alter session enable parallel dml;
your dml;
commit;
alter session disable parallel dml;

或者

alter session force parallel dml parallel 1;


补充:

parallel的hint并不能保证sql一定会使用并行,如果优化器认为sql使用索引更高效,可能会使用索引而不使用并行。如果要确保SQL使用并行,有时可能要结合full的hint,这种情况不多见。

无论是并行,还是其他的技术,还是需要理解原理层面,知其然更要知其所以然,才能在合适的场景使用合适的技术。


标签:常见问题,并行,SQL,dml,alter,session,注意事项,parallel
From: https://blog.51cto.com/u_13950417/6512432

相关文章

  • 1494. 并行课程 II (Hard)
    问题描述1494.并行课程II(Hard)给你一个整数n表示某所大学里课程的数目,编号为1到n,数组relations中,relations[i]=[xᵢ,yᵢ]表示一个先修课的关系,也就是课程xᵢ必须在课程yᵢ之前上。同时你还有一个整数k。在一个学期中,你最多可以同时上k门课,前提是这......
  • 小程序授权常见问题解析及解决方案
    引言小程序作为一种轻便、易用的应用形式,正在成为许多企业和个人开发者的首选。在用户使用小程序时,需要授权相应的权限才能获取更好的使用体验。但是,有时会遇到授权失败或出现安全隐患等问题。本文将从常见问题的角度出发,为大家解析小程序授权常见问题及其解决方案。下午一直犯困吟......
  • 并行智能(parallel intelligence)
    并行智能是现实与虚拟现实之间的交互。这是一个复杂的概念,已被应用于许多领域,包括智能交通、艺术创作、计算机视觉和智能传感器。并行智能最早由王飞跃于2004年提出,用于构建可用于验证社会政策、经济战略和军事行动的人工系统。   论文地址:https://ieeexplore.ieee.org/documen......
  • 并行计算之绪论01
    一、绪论1.1基本概念加速比:表示加速效果。单个处理器运行花费时间/P个处理器运行花费时间;\(S=\frac{T(1)}{T(p)}\)效率:\(E=\frac{S}{p}=\frac{T(1)}{T(p)\timesp}\)开销:\(C=T(p)\timesp\)可扩展性:处理器数目增多时并行程序的行为;计算通信比:计算花费时间/处理器......
  • 类的注意事项
    在一个类中,都要写什么,mainpublic,多个类怎么办 在Java中,一个源代码文件可以包含多个类,但只能有一个公共类(publicclass)。公共类的名称必须与文件名相同,并且只能有一个公共类。所以这样写是错误的   在一个java文件中,写多个类......
  • C语言中的转义字符及注意事项
    在C语言中,转义字符是由一个反斜杠(\)和一个特定字符组成的组合。它们用于表示一些特殊的控制字符,例如在字符串中插入换行符或者制表符。当编译器遇到一个反斜杠时,它会将其后面的字符解释为一个转义字符,简单来说,转义字符就是反斜杠加上某个特定的字符,改变其原本含义,来表示另一个含义......
  • 租房注意事项
    本文摘自:微信公众号腾讯招聘 ......
  • 怎么买美股?有哪些美股购买常见问题?
    美股市场是全球最大的股票市场,也是全球最受投资者关注的市场之一。许多投资者都想参与其中,但不知道如何买美股。上文中已经扩列了美股购买的基本规则,继续为大家分享美股购买常见问题的相关知识要点。更深入的认识美股交易。美股购买常见问题一、如何开户?对于国内投资者而言,大多数都......
  • 1494. 并行课程 II
    给你一个整数 n 表示某所大学里课程的数目,编号为 1 到 n ,数组 relations 中, relations[i]=[xi,yi] 表示一个先修课的关系,也就是课程 xi 必须在课程 yi 之前上。同时你还有一个整数 k 。在一个学期中,你最多 可以同时上k 门课,前提是这些课的先修课在之前的......
  • 人工智能领域:面试常见问题超全(深度学习基础、卷积模型、对抗神经网络、预训练模型、计
    人工智能领域:面试常见问题超全(深度学习基础、卷积模型、对抗神经网络、预训练模型、计算机视觉、自然语言处理、推荐系统、模型压缩、强化学习、元学习)人工智能领域:面试常见问题1.深度学习基础为什么归一化能够提高求解最优解的速度?为什么要归一化?归一化与标准化有什么联系......