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

article/2025/9/13 16:37:57

关于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,这种情况不多见。

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

P.S. 友情发个广告,

老虎刘老师最近会在北京开班,本次培训报名人数限额在40左右(培训教室座位有限),以报名费缴交先后为准。

培训时间:2019.09.21~09.22  周末两天

                 9:00~17:30(午休1小时)

培训地点:北京(暂定:大望路地铁站附近)

培训内容:Oracle数据库性能优化

培训费用:2000 RMB(先交报名费500,余款1500培训时交齐)

费用说明:

如果9月8日前实际报名不足20人,本次培训取消,报名费退回;

组团报名优惠:2人团优惠400,3人团优惠600,以此类推;

因为北京差旅费用和培训教室租金费用较高,本次培训没有赠书;

关于发票:因为本人公司申领的发票为十万位,不宜开万元以下发票。公费组团超过1万的发票(普票)可以开,培训费用按照2500一位。

报名请加微信ora_service

培训材料一览:

640?wx_fmt=png


http://chatgpt.dhexx.cn/article/gusGxWs7.shtml

相关文章

并发和串行、并行的概念

先抛开语言不管,只聊概念,说起并发,就很容易想到它和串行、并行的区别。 串行:一次只能取得一个任务并执行这个任务,这个任务执行完后面的任务才能继续; 并发:指的是在同一个时间段内&#xf…

牛腩新闻发布--过程或函数 'news_selectByCaId' 需要参数 '@caid',但未提供该参数(二)

发现问题 之前有一篇博客是因为存储过程中没有添加相应的函数,导致出现了“过程或函数 ‘news_selectByCaId’ 需要参数 ‘caid’,但未提供该参数”,这次继续出现了这样一个问题,但是出现的错误就不再过程函数中了,而…

牛腩新闻发布--过程或函数 'news_selectByCaId' 需要参数 '@caid',但未提供该参数(三)

发现问题 这篇博客是建立在“牛腩新闻发布–过程或函数 ‘news_selectByCaId’ 需要参数 ‘caid’,但未提供该参数(二)”,因为在那篇博客中说出了我当时遇到的“过程或函数 ‘news_selectByCaId’ 需要参数 ‘caid’,…

【牛腩】-'T_news_selectByCaId' 需要参数 '@caid',但未提供该参数。”

问题截图 解决方案: 改动存储过程 BEGINselect n.id,n.title,n.createTime,c.[name],n.caId from T_news ninner join T_category c on n.caIdc.id and n.caIdcaidorder by n.createTime desc END检查传参是或否正确如果以上都没有错误,那就看一下是否…

【重要补充】关于第三方潜在SDK导致的5.1.2Data use sharing

接上一篇《关于IDFA、CAID和「5. 1.2 - Data use & sharing」》后,我们发现,苹果在14.5出来前,对于IDFA替代方案之数据收集的审核打击力度越来越大。 因5.1.2条款被拒,目前可以确认的原因有以下两大: 一、如果你…

spring笔记⑬——spring事务

事务的四个特征 CAID是事务的四个特征,所有事务都必须满足以下特性。 原子性(Atomicity):一个事务要么全部执行,要么不执行一致性(Consistency):事务的运行并不改变数据库中数据的一致性隔离性&#xff0…

SQL查询语句(内联,as,in,通配符)

最近在学习牛腩新闻发布系统,正如牛老师所说,作为一个优秀的.NET开发人员,对SQL语句不熟怎么能行呢,接下来就总结下牛老师写的存储过程中SQL语句,挺经典,举一反三 首先先展示出来适用于系统的三张表 新闻类…

【微信小程序 | 实战开发】配置微信小程序APPID并快速接入

写在前面: 你是否想要掌握人工智能的最新技术和应用?你是否想要成为未来社会的创新者和领导者?你是否想要和全球的优秀导师和同学一起学习和交流?如果你的答案是肯定的,那么欢迎来到床长人工智能教程网站,这里是你实现梦想的起点! 个人名片: 🐼作者简介:一名大一在校…

获取苹果收集设备ID的方法

目录 问题 解决 问题 如果我们想要通过工具获取苹果手机 iPhone 或者 iPad 的设备 ID,也就是 UDID。这个时候,很多人可能会问 UDID 是什么,UDID 是 iOS 设备的一个唯一识别码,每台 iOS 设备都有一个独一无二的编码,…

浅谈大数据广告下个人隐私保护,开发者视角的广告原理

本文已收录于 Github CodeClass 和 Gitee CodeClass 致力于打造高质量编程学习课堂,内含百篇原创技术文章,千本计算机开源电子书,谷歌、阿里大神开源 LeetCode 题解,各类编程学习资源,欢迎 star ,一起学习&…

简单理解MySQL的存储引擎

1、什么是存储引擎? 在说明存储引擎之前,首先你需要简单了解MqSQL的整体架构。 从上图可知,存储引擎位于整体架构的最底层。 存储引擎真正负责了MySQL中数据的存储和提取。 可以这样理解: 其实我们平时写的各种SQL语句相当于指…

iOS隐私新规如何破局?盗版SKAdnetwork可行吗?

背景:   在2020年的开发者大会上,苹果宣布iOS14设备将会在App首次打开时主动弹窗请求是否选择允许广告追踪,即被获取设备的IDFA。这也就意味着新系统需要用户手动选择允许,而旧系统是手动选择关闭,这一关键改变无异…

牛腩新闻发布--过程或函数 'news_selectByCaId' 需要参数 '@caid',但未提供该参数(一)

发现问题 今天敲击牛腩,在敲击Web页面的List.aspx之后,点击Ctrl+F5运行,发现运行不了,首先是数据库中调取数据有问题,因为这个数据是用存储过程调取的,所以需要修改存储过程,这时候只需要改成如下代码就行: 将这个更改完之后就可以在数据库中调取到应需要的数据了,但是…

【牛腩】DELETE 语句与 REFERENCE 约束“FK_news_category“冲突。该冲突发生于数据库“newssystem“,表“dbo.news“, column ‘caId‘

【前言】 牛腩中删除类别的时候会提示受到主外键的约束,导致无法删除这个类别。 【问题描述】 DELETE 语句与 REFERENCE 约束"FK_news_category"冲突。该冲突发生于数据库"newssystem",表"dbo.news", column ‘caId’。…

【牛腩】过程或函数 ‘news_selectByCaId‘ 需要参数 ‘@caid‘,但未提供该参数

【前言】 在运行牛腩的时候会有提示过程或者函数缺少参数。这个是因为存储过程中写的缺少参数,添加相应的参数就可以了。 【问题描述】 过程或函数 ‘news_selectByCaId’ 需要参数 ‘caid’,但未提供该参数 过程或函数 ‘news_selectByContent’ 需要…

关于IDFA、CAID和「5. 1.2 - Data use sharing」

今天,2021年3月18日,突然收到了之前从未遇到过的拒审邮件,邮件原文如下: 发件人 Apple 5. 1.2 - Data use & sharing Please review this information carefully as it impacts your app’s availability on the App Store a…

中国广告协会的CAID方案

前些时间看到一个消息,腾讯、百度和字节跳动测试工具绕开苹果的ATT(AppTrackingTransparency,简称 ATT,旨在保护用户隐私的应用追踪透明度框架),估计这个应该是在测试CAID。 过一两天又出现一个消息&#x…

微信H5链接包装

最近看到好多人问一个问题,就是在微信中发游戏链接给好友,让链接显示成一个抖音的样式,如下: 这种链接包装,做起来说难不难,说简单也不简单。网上很多服务商都可以做,不过靠谱程度就参差不齐了…

微信内 H5 页面自定义分享

起源: 最近公司在做一个活动的h5页面,在微信内打开时需要进行微信授权,然后后端会重定向到这个页面并且携带了一些参数(openid等)。问题是点击微信的原生分享时,会把携带的这些参数一起分享出去&#xff0…

H5容器技术方案

●●● Native开发原生应用是手机操作系统厂商(目前主要是苹果的iOS和google的Android)对外界提供的标准化的开发模式,他们对于native开发提供了一套标准化实现和优化方案。但是他们存在一些硬伤,比如App的发版周期偏长、有时无法…