oracle并行查询session设置,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 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 Parallel Server时候,尽量设置Parallel_min_percent为非0值,原因是因为,Parallel_min_percent=0的情况下,当slaves不足时,查询会串行化的进行,这样使得了查询的速度更慢;Parallel_min_percent<>0情况下,当slaves不足时Oracle会报出错误,这样比较容易清楚我们需要的slaves不足。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
协同过滤算法(Collaborative Filtering)是一种经典的推荐算法,其基本原理是“协同大家的反馈、评价和意见,一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”。它主要依赖于用户和物品之间的行为关系进行推荐。 协同过滤算法主要分为两类: 基于物品的协同过滤算法:给用户推荐与他之前喜欢的物品相似的物品。 基于用户的协同过滤算法:给用户推荐与他兴趣相似的用户喜欢的物品。 协同过滤算法的优点包括: 无需事先对商品或用户进行分类或标注,适用于各种类型的数据。 算法简单易懂,容易实现和部署。 推荐结果准确性较高,能够为用户提供个性化的推荐服务。 然而,协同过滤算法也存在一些缺点: 对数据量和数据质量要求较高,需要大量的历史数据和较高的数据质量。 容易受到“冷启动”问题的影响,即对新用户或新商品的推荐效果较差。 存在“同质化”问题,即推荐结果容易出现重复或相似的情况。 协同过滤算法在多个场景中有广泛的应用,如电商推荐系统、社交网络推荐和视频推荐系统等。在这些场景中,协同过滤算法可以根据用户的历史行为数据,推荐与用户兴趣相似的商品、用户或内容,从而提高用户的购买转化率、活跃度和社交体验。 未来,协同过滤算法的发展方向可能是结合其他推荐算法形成混合推荐系统,以充分发挥各算法的优势。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值