转:http://www.cnblogs.com/daduxiong/archive/2010/08/24/1807427.html
oracle并行查询常见问题
在OLAP环境,以利用多的CPU和内存资源来加速处理数据,也即oracle的并行查询。单个CPU同一时刻只能服务一个进程,如果有多个CPU,提高CPU利用律,就可以同时运行多个进程。也就是原来单个进程处理的变成多个进程并行处理加速执行时间。并行执行只是在全表处理或者分区及在分区表中执行本地索引时用到。下面情况会用到并行查询:
全表扫描、 rebuild index、update (全表或分区表)、insert的并行子查询、本地索引使用、批量插入,象SQLLDR、创建临时表
比如我们执行
select /*+ parallel(c1 ,2) */
...
from customers c1
order by ...process a process b
fetch rows from fetch rows from
customers customers
|| ||
|| ||
^^ ^^
process c process d
sort rows(a-k) sort rows(l-z)
combine rows
||
return result set
这里我们看到这个进程分散成4个进程,排序中各负责a-k和l-z,这样就可以并行处理
我们在分区表中,也可以用一个并行从进程对应一个分区表如果你的并行度是3,那么你可能就比普通的执行速度提高3倍
注意在单CPU下,如果使用并行,那么就可能造成性能下降,而且也要设置合适的并行度
并行适合对于长时间运行的语句
在oltp可能并不适合使用并行处理,因为事务并发比较多,每个用户都要使用CPU,CPU的负载本来就比较高
所以并行处理还是比较适合olap中的批量导入,sqlldr,mis report和oltp中rebuild index。
1、看看并行选件是否安装
Select * FROM V$OPTION
where parameter like 'Parallel%';
看看
Parallel execution是不是TRUE
2、如果是TRUE,执行语句后查看
select * from V$pq_sesstat;
where statistic like '%Parallelized';
如果Queries Parallelized>>0就说明是执行了并行
3、可以强制使用PARALLEL,和CPU数量无关,不过在单个CPU下使用并行没有什么好处
alter session force parallel query;
4、你是怎么知道语句没有使用PARALLEL?
如果你用EXPLAIN ,那么有两个脚本看执行计划
UTLXPLS.UTLXPLP前一个是看串行计划的,后一个才能看到并行计划,
如果你使用SET AUTOTRACE,那么你如果看到P->S,那么说明计划已经是并行的了。1.与并行查询有关的参数有哪些?
parallel_adaptive_multi_user boolean
启用或禁用一个自适应算法,旨在提高使用并行执行方式的多用户环境的性能。通过按系统负荷自
动降低请求的并行度,在启动查询时实现此功能。当 PARALLEL_AUTOMATIC_TUNING = TRUE 时,其效果最佳。
TRUE | FALSE 如果 PARALLEL_AUTOMATIC_TUNING = TRUE,则该值为 TRUE;否则为 FALSE
parallel_automatic_tuning boolean
如果设置为 TRUE,Oracle 将为控制并行执行的参数确定默认值。除了设置该参数外,你还必须为
系统中的表设置并行性。
TRUE | FALSE FALSE
parallel_execution_message_size integer
指定并行执行 (并行查询、PDML、并行恢复和复制) 消息的大小。如果值大于 2048 或 4096,就需
要更大的共享池。如果 PARALLEL_AUTOMATIC_TUNING =TRUE,将在大存储池之外指定消息缓冲区。
2148 - 无穷大。 如果 PARALLEL_AUTOMATIC_TUNING 为 FALSE,通常值为 2148;如果
PARALLEL_AUTOMATIC_TUNING 为 TRUE ,则值为 4096 (根据操作系统而定)。
parallel_max_servers integer
指定一个例程的并行执行服务器或并行恢复进程的最大数量。如果需要,例程启动时分配的查询服
务器的数量将增加到该数量。
0 -256 由 CPU_COUNT, PARALLEL_AUTOMATIC_TUNING 和 PARALLEL_ADAPTIVE_MULTI_USER 确定
parallel_min_percent integer
指定并行执行要求的线程的最小百分比。设置该参数,可以确保并行执行在没有可用的恰当查询从
属时,会显示一个错误消息,并且该查询会因此而不予执行。
parallel_min_servers integer
指定为并行执行启动例程后,Oracle 创建的查询服务器进程的最小数量。
0 - PARALLEL_MAX_SERVERS。
parallel_threads_per_cpu integer
说明一个 CPU 在并行执行过程中可处理的进程或线程的数量,并优化并行自适应算法和负载均衡算
法。如果计算机在执行一个典型查询时有超负荷的迹象,应减小该数值
任何非零值。 根据操作系统而定 (通常为 2)
2.当前时刻有那些并行查询在跑?
14:13:46 SQL> desc v$px_session
名称 是否为空? 类型
----------------------------------------- -------- ------------------
SADDR RAW(4)
SID NUMBER
SERIAL# NUMBER
QCSID NUMBER
QCSERIAL# NUMBER
QCINST_ID NUMBER
SERVER_GROUP NUMBER
SERVER_SET NUMBER
SERVER# NUMBER
DEGREE NUMBER
REQ_DEGREE NUMBER
3.怎么才能让查询有并行执行?
如果建表时指定了并行度,例:
Create TABLE LI2.PAR_T
(
a VARCHAR2 (5)
)
PARALLEL 5;
那么对该表做全表扫描时就会并行
14:26:05 SQL> set autot on
14:26:11 SQL> select * from par_t;
未选定行
已用时间: 00: 00: 00.02
Execution Plan
----------------------------------------------------------
0 Select STATEMENT Optimizer=CHOOSE (Cost=1 Card=82 Bytes=328)
1 0 TABLE ACCESS* (FULL) OF 'PAR_T' (Cost=1 Card=82 Bytes=328) :Q6000
1 PARALLEL_TO_SERIAL Select /*+ NO_EXPAND ROWID(A1) */ A1."A" FRO
M "PAR_T" PX_GRANULE(0, BLOCK_RANGE,
如果该表没有指定并行度,可以在查询时用hint 实现,例:
select /*+ full(t) parallel(t,5) */ * from your_table t where ...;
4.为什么本该并行执行的查询没有并行执行呢?
系统的并行度由parallel_max_servers 决定,如果它的并行度为5.如果有一个并行度为5的查询在跑,那么系统在这条查询运行完成前是不能再跑并行查询的,该并行查询将会以非并行方式运行.
5如果有并行度低于系统最大并行数的查询在跑,那接下来的并行查询会怎么跑呢?
When you specify parallel degree 4 oracle tries to allocate 4 producer slaves and 4 consumer slaves. The producers can feed any of the consumers.
If there are only 2 slaves available then we use these.
If there is only 1 slave available then we go serial
If there are none available then we use serial.
If parallel_min_percent is set then we error ora 12827 instead of using a lower number of slaves or going serial
6.设定parallel_max_servers 多大为好?
在多CPU的环境中,一般把CPU-1或CPU的数量做个最大并行数,因为并行查询运行时还需要一个进程协调各并行进程.对于单CPU没什么好说的.
7.并行查询能提高系统的性能吗?
并行查询运行时,很容易会使机器运行在高负荷下,令系统对其它事务的处理时间大大加长.并行查询一般适合在非业务高峰值人工执行,并不适合在程序中指定运行并行查询.
PINNER:
并行不等于快速,仅仅是适合在数据仓库环境,低业务请求与低并发操作的时候
典型的OLTP系统,如果我们的系统,是绝对不允许并行查询出现的。
个人倾向:
在使用Oracle Parallel Server时候,尽量设置Parallel_min_percent为非0值,原因是因为,Parallel_min_percent=0的情况下,当slaves不足时,查询会串行化的进行,这样使得了查询的速度更慢;Parallel_min_percent<>0情况下,当slaves不足时Oracle会报出错误,这样比较容易清楚我们需要的slaves不足。
相关推荐
文学翻译的文化传递、语言风格保持与读者接受度提升
,,Phase_Shift_T:基于MATLAB Simulink的移相变压器仿真模型,可实现-25°、-15°……25°的移相。 变压器副边实现36脉波不控整流,变压器网侧电压、阈侧电压以及移相角度可直接设置。 仿真条件:MATLAB Simulink R2015b ,核心关键词: 1. 移相变压器仿真模型 2. MATLAB Simulink 3. 移相 4. 36脉波不控整流 5. 网侧电压 6. 阈侧电压 7. 设置 8. MATLAB Simulink R2015b,MATLAB Simulink中实现宽范围移相与多脉波整流的变压器仿真模型
管理员主要负责填充图书和其类别信息,并对已填充的数据进行维护,包括修改与删除,管理员也需要审核老师注册信息,发布公告信息,管理自助租房信息等。用户信息管理页面,此页面提供给管理员的功能有:用户信息的查询管理,可以删除用户信息、修改用户信息、新增用户信息。商品分类管理页面,此页面提供给管理员的功能有:查看已发布的商品分类数据,修改商品分类,商品分类作废,即可删除。商品信息管理页面,此页面提供给管理员的功能有:根据商品名称进行条件查询,还可以对商品数据进行新增、修改、查询操作等等。商品资讯管理页面,此页面提供给管理员的功能有:查看已发布的商品资讯数据,修改商品资讯,商品资讯作废,即可删除。2 相关技术 3 2.1 SSM框架介绍 3 2.2 B/S结构介绍 3 2.3 Mysql数据库介绍 4 3 系统分析 6 3.1 系统可行性分析 6 3.1.1 技术可行性分析 6 3.1.2 经济可行性分析 6 3.1.3 运行可行性分析 6 3.2 系统性能分析 7 3.2.1 易用性指标 7 3.2.2 可扩展性指标 7 3.2.3 健壮性指标 7 3.2.4 安全性指标 8 3.3 系统流程分
当前资源包含初中高级闯关习题
,,欧姆龙PLC螺丝机程序(含触摸屏程序) 此程序已经实际设备上批量应用,程序成熟可靠,借鉴价值高,程序有注释、非常适合用来欧姆龙plc新手学习,包括欧姆龙plc程序和威纶触摸屏程序。 是新手入门级欧姆龙PLC电气爱好从业人员借鉴和参考经典案列。 ,欧姆龙PLC; 螺丝机程序; 触摸屏程序; 程序成熟可靠; 注释详尽; 新手学习; 经典案例。,欧姆龙PLC螺丝机程序详解:成熟可靠的新手学习经典案例
,,c# mqtt高性能服务器端源代码。 你还在使用第三方服务软件吗?不如试试这个开发框架,助你一臂之力,无限制,无全开源,无版权约束,全是自主开发。 开源框架包括服务器和客户端,支持mqtt3.0及5.0。 可嵌入到自己的服务系统及软件客户端中,不受第三方约束。 你要问我稳定性如何?我能回答的是已经运行了三年有余无任何问题。 如果你要问能接入多少终端,我可以明确回答,不敢往多的说,单节点支持100万并发量无压力。 这是一个关于C# MQTT高性能服务器端源代码的描述。如果我重新表述一下,可以这样说:你是否还在使用第三方服务软件?为什么不尝试一下这个开发框架呢?它可以为你提供强大的支持,没有任何限制,完全开源,没有版权约束,全部都是自主开发的。 这个开源框架包括服务器和客户端,支持MQTT 3.0和5.0协议。你可以将它嵌入到自己的服务系统和软件客户端中,不受第三方的限制。 你可能会问它的稳定性如何。我可以很自信地告诉你,它已经运行了三年多,没有出现任何问题。 如果你想知道它可以接入多少终端,我可以明确地回答,单节点支持100万并发连接,毫不费力。 从这段话中,我们可以提取出以
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
,,matlab程序,复现,基于改进粒子群算法的混合储能系统容量优化,关键词,超级电容,混合储能,粒子群算法。 拿之前问清楚 可以运行看结果,出不 不 ,MATLAB程序; 复现; 改进粒子群算法; 混合储能系统容量优化; 超级电容; 粒子群算法。,MATLAB复现:混合储能系统优化策略研究,基于改进粒子群算法的超级电容容量配置
,,k—medoids 聚类方法的MATLAB源代码,导入数据部分和画图部分已经用中文给出了注释。 这儿选取一个对象叫做mediod来代替上面的中心 的作用,这样的一个medoid就标识了这个类。 ,k-medoids聚类方法; MATLAB源代码; 导入数据部分; 画图部分; 对象; medoid; 类标识。,基于K-Medoids聚类方法的MATLAB源代码及中文注释解析
自驾游中如何保护自然环境
qt 一个基于Qt Creator(qt,C++)实现中国象棋人机对战.
项目资源包含:可运行源码+sql文件+文档; python3.7+django+mysql5.7+vue 适用人群:学习不同技术领域的小白或进阶学习者;可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 项目具有较高的学习借鉴价值,也可拿来修改、二次开发。 有任何使用上的问题,欢迎随时与博主沟通,博主看到后会第一时间及时解答。 系统是一个很好的项目,结合了后端服务(django)和前端用户界面(Vue.js)技术,实现了前后端分离。 当人们打开系统的网址后,首先看到的就是首页界面。在这里,人们能够看到系统的导航条,通过导航条导航进入各功能展示页面进行操作。在个人中心页面可以输入个人信息进行更新信息操作,还可以对我的订单、我的地址和我的收藏进行详细操作。 管理员进入主页面,主要功能包括对首页、个人中心、用户管理、商品类别管理、热卖商品管理、投诉建议、系统管理、订单管理等进行操作。用户进入系统后台,主要功能包括对个人中心和我的收藏管理进行操作。
漫画作品与节日庆典结合
自驾游中的手机APP推荐
,,该套程序是电芯上料机,空料仓和满料仓都是步进电机,搬运模组是松下A6脉冲控制伺服电机,该套程序是已经在量产程序,图四是上料机设备全局图,标准程序框架,其他设备也可套用。 ,电芯上料机; 步进电机; 满料仓; 松下A6脉冲控制伺服电机; 标准程序框架; 设备全局图; 其他设备通用,电芯上料机程序:松下A6伺服电机驱动的步进式料仓管理系统
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
,,Matlab代码-基于拉格朗日电力系统参数辨识 对电力系统中存在多个不良参数进行辨识,以IEEE14节点系统进行仿真验证。 ,基于拉格朗日; 电力系统参数辨识; 不良参数辨识; IEEE14节点系统仿真验证。,基于拉格朗日算法的电力系统多参数辨识及IEEE14节点仿真验证
它利用图像预处理、车牌字符分割、字符识别等相关处理技术,对小型车辆的蓝底白字车牌进行车牌号识别。车牌定位是利用HSV色彩定位法,这种方法可大大缩短后续处理时间,字符分割采用阈值限定分割,字符识别则采用模板匹配法。在拍摄角度不过度倾斜情况下识别精度较高,白天照片预处理、分割效果较晚间好。
该文档围绕 DeepSeek 和 AIGC 展开,介绍了 DeepSeek-R1 模型的技术特性、AIGC 的概念、应用及相关工具的选择。 适用人群:对人工智能、AIGC 技术感兴趣的初学者,想要了解行业动态的专业人士,以及寻求提升工作效率、探索创新应用的企业和个人。包括但不限于 AI 从业者、内容创作者、教育工作者、科研人员、电商从业者、传媒工作者、游戏开发者等。 使用场景:在科研领域,DeepSeek-R1 可用于复杂问题求解、实验设计和论文撰写;教育场景中,能辅助知识理解、解答问题,还可作为教学工具锻炼学生逻辑思维。内容创作方面,AIGC 工具能生成文本、图像、音频和视频,满足不同创作需求。电商行业利用 AIGC 制作商品 3D 模型、虚拟主播,提升购物体验和直播带货效率。新闻传媒行业借助 AIGC 提高采编效率、打造 AI 主播。影视和游戏行业,AIGC 可用于剧本创作、角色生成、场景拓展等。
,,MATLAB用yalmip+cplex解决电动汽车有序充放电问题,目标函数为总负荷峰谷差最小,代码可运行且有注释。 ,关键词: 1. MATLAB 2. yalmip 3. cplex 4. 电动汽车有序充放电 5. 目标函数 6. 总负荷峰谷差最小 7. 代码可运行 8. 注释,MATLAB中YALMIP+CPLEX实现电动汽车有序充放电优化,降低负荷峰谷差