Orcle怎么增强并行语句队列

网友投稿 566 2023-11-21

Orcle怎么增强并行语句队列

这篇文章主要介绍“Orcle怎么增强并行语句队列”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Orcle怎么增强并行语句队列”文章能帮助大家解决问题。

1 说明

Orcle怎么增强并行语句队列

Enhancing parallel statement queuing provides more flexibility to address business requirements for mission-critical environments.

增强并行语句队列提供了更多的灵活性,以满足任务关键环境的业务需求。

When the parameter PARALLEL_DEGREE_POLICY is set to AUTO, Oracle Database queues SQL statements that require parallel execution if the necessary number of parallel execution server processes are not available. After the necessary resources become available, the SQL statement is dequeued and allowed to execute. The default dequeue order is a simple first in, first out queue based on the time a statement was issued.

1.解析SQL并自动决定DOP(degree of parallelism)

2.检查是否有足够的并行资源(PARALLEL_SERVERS_TARGET当前环境默认值16)–不能超过PARALLEL_MAX_SERVERS大小

a.如果有(可用并行资源大于当前SQL所需的),并且前面没有正在执行的SQL,那么就会执行该SQL

b.如果没有(可用并行资源小于当前SQL所需的),则会排队等待有足够的资源来执行该SQL。

如果发生语句排队等待现象,那么会以等待事件:resmgr:pq queued表现出来。

2 使用hint管理Parallel Statement Queuing

在PARALLEL_DEGREE_POLICY 为AUTO情况下,使用NO_STATEMENT_QUEUING 和STATEMENT_QUEUING来影响语句是否使用Parallel Statement Queuing队列。

2.1 NO_STATEMENT_QUEUING

使用NO_STATEMENT_QUEUING会使语句绕过parallel statement queue。但是这可能会超过PARALLEL_SERVERS_TARGET指定的最大并行执行数。

如:

SELECT /*+ NO_STATEMENT_QUEUING */ last_name, department_name   FROMemployees e, departments dWHERE e.department_id = d.department_id;2.2 STATEMENT_QUEUING

STATEMENT_QUEUING HINT让SQL语句使用parallel statement queue,但是只有在可以在并行进程足够的时才运行。在启用队列之前,可用的并行执行服务器的数量等于在使用的并行执行服务器数量和系统中允许的最大数量之间的差,是有PARALLEL_SERVERS_TARGET参数定义的。

如:

SELECT /*+ STATEMENT_QUEUING */ last_name, department_name   FROMemployees e, departments dWHERE e.department_id = d.department_id;

3 PARALLEL_SERVERS_TARGET设置

PARALLEL_SERVERS_TARGET参数默认值不是固定不变的,而是有公式计算而来的。

公式:PARALLEL_THREADS_PER_CPU * CPU_COUNT * concurrent_parallel_users * 2

如:当前我的环境

PARALLEL_THREADS_PER_CPU = 2 SQL> show parameter PARALLEL_THREADS_PER_CPU NAME       TYPE VALUE ------------------------------------ ---------------------- parallel_threads_per_cpu       integer  2 CPU_COUNT = 1 SQL> show parameter CPU_COUNT NAME       TYPE VALUE ------------------------------------ ---------------------- cpu_count      integer  1

concurrent_parallel_users参数值分为三种情况:

1.如果设置了MEMORY_TARGET或SGA_TARGET,那么concurrent_parallel_users=4

2.如果没有设置MEMORY_TARGET或SGA_TARGET,并且也设置了PGA_AGGREGATE_TARGE的大小,那么concurrent_parallel_users=2

3.如果没有设置PGA_AGGREGATE_TARGE的大小,那么concurrent_parallel_users=1

当前环境:属于第一种情况,设置了MEMORY_TARGET,因为没有设置PGA_AGGREGATE_TARGET。所以不满足第二章情况

SQL> show parameter MEMORY_TARGET NAME       TYPE     VALUE ------------------------------------ ---------------------- ------------------------------ memory_target      biginteger1G SQL> show parameter SGA_TARGET NAME       TYPE     VALUE ------------------------------------ ---------------------- ------------------------------ sga_target       biginteger0 SQL> show parameter PGA_AGGREGATE_TARGET NAME       TYPE     VALUE ------------------------------------ ---------------------- ------------------------------ pga_aggregate_target       biginteger0 SQL> show parameter PARALLEL_SERVERS_TARGET NAME       TYPE     VALUE ------------------------------------ ---------------------- ------------------------------ parallel_servers_targetinteger      16

所以,PARALLEL_SERVERS_TARGET= 2 * 1 *4 * 2 = 16,和查询出来的结果一致。

3.1 修改参数值

只能在CDB中的system级别修改,大小0到PARALLEL_MAX_SERVERS之间,重启生效

SQL> alter system set parallel_servers_target = 17 scope = spfile; System altered. SQL> startup force ORACLE instance started. Total System Global Area 1073741824 bytes Fixed Size      8801008 bytes Variable Size  1023411472 bytes Database Buffers     37748736 bytes Redo Buffers      3780608 bytes Database mounted. Database opened. SQL> show parameter PARALLEL_SERVERS_TARGET NAME       TYPE     VALUE ------------------------------------ ---------------------- ------------------------------ parallel_servers_target      integer      17

关于“Orcle怎么增强并行语句队列”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Oracle自动锁住不经常使用的用户指的是什么
下一篇:如何利用sqlprofile固定执行计划并将执行计划导入到新库
相关文章

 发表评论

暂时没有评论,来抢沙发吧~