Orcle怎么增强并行语句队列

66次阅读
没有评论

共计 3653 个字符,预计需要花费 10 分钟才能阅读完成。

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

1 说明

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
 FROM employees e, departments d
 WHERE 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
 FROM employees e, departments d
 WHERE 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

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 big integer 1G
SQL  show parameter SGA_TARGET
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
sga_target big integer 0
SQL  show parameter PGA_AGGREGATE_TARGET
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
pga_aggregate_target big integer 0
SQL  show parameter PARALLEL_SERVERS_TARGET
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
parallel_servers_target integer 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 怎么增强并行语句队列”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注丸趣 TV 行业资讯频道,丸趣 TV 小编每天都会为大家更新不同的知识点。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-13发表,共计3653字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)