Oracle并行查询介绍以及测试效果

发布时间:2021-07-16 00:35:13 作者:chen
来源:亿速云 阅读:4944

这篇文章主要讲解了“Oracle并行查询介绍以及测试效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Oracle并行查询介绍以及测试效果”吧!

并行概念

所谓并行执行,是指能够将一个大型串行任务(任何DML,一般的DDL)物理的划分为叫多个小的部分,这些较小的部分可以同时得到处理。

何时使用并行执行:
1、必须有一个非常大的任务

2、必须有充足的资源(CPU,I/O,MEMORY)

并行查询

并行查询允许将一个SQL SELECT 语句划分为多个较小的查询,每个查询并发的运行。最后将每个较小查询得到的结果组合起来,得到最终结果。

启动并行查询几种方式:
1、在查询中使用一个hint提示:

select /*+ parallel(4)  */  count(*)  from test_a ;---指定一个并行度为4的并行查询。
2、利用alter table修改表:

alter table test_a parallel 4;--告诉oracle,在创建这个表的执行计划时,使用并行度4。

数据测试

昨天自己在PL/SQL里面自己做了一下测试,我们先看看,我的数据库表里tskuplu表有24548条记录。

首先我先用正常查询的方法,查询所有的出来后发现是103秒,如图:

Oracle并行查询介绍以及测试效果

然后我再用并行查询的方法,设置为3进程后查询,耗时85秒。如图:

Oracle并行查询介绍以及测试效果

到这时我瞬间觉得一下子节省了接近18秒的时候,觉得真不错,不过我后来又用普通查询再查一次的时候,也是80多秒,瞬间心情不好了。为了再验证一下并行查询,今天我又开始进行了一下测试。

我们今天先运行并行查询看看效果,79秒。

Oracle并行查询介绍以及测试效果

然后再执行了一下普通的查询,结果时间也差不多,这里我就没放图,在想这个并行查询是不是没有执行的原因 ,于是我们就改了下另一种方式,把表结构修改了下,

Oracle并行查询介绍以及测试效果

通过上面修改了表的自动并行查询方法,我们直接用普通查询看看查询的效果,结果是97秒

Oracle并行查询介绍以及测试效果

通过v$px_process查询后发现并行也已经执行了,但是结果并不令人满意。

Oracle并行查询介绍以及测试效果

结论

通过上面的测试,我觉得可能我的测试机器也有一定的问题,所以来说并行查询并没有对查询有实质性的提高,本来我觉得如果有实质性的提高,那样我接下来要做的程序中可以考虑用并行查询提出所有,再通过缓存处理,现在来看,还是用自己写的分页查询来实现比较合适。

总结一下并行查询的常见问题(摘自网上)

1、看看并行选件是否安装
Select * FROM V$OPTION
where parameter like 'Parallel%';
看看
Parallel execution是不是TRUE


2、如果是TRUE,执行语句后查看
select * from V$pq_sesstat;
where name 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并行查询介绍以及测试效果”的内容了,经过本文的学习后,相信大家对Oracle并行查询介绍以及测试效果这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. oracle parallel 并行 设置 理解
  2. Oracle 并行案例解析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

oracle

上一篇:Oracle分页查询方法是什么

下一篇:Web开发中客户端跳转与服务器端跳转有什么区别

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》