暂无图片
Oracle并行有有哪些触发的方式
我来答
分享
西瓜你个吧啦
2024-05-28
Oracle并行有有哪些触发的方式
出题:活动会话突然彪高243,然后持续一分钟不到就下来了。查看历史会分析,发起者是一个查询服务,显示P1TEXT sleeptime/senderid,程序说自己没开并行,sql显示没有加hint。


select SAMPLE_ID,count(*) from v$active_session_history group by SAMPLE_ID order by 2 desc
select * from v$active_session_history where SAMPLE_ID='268266729';
select * from v$active_session_history where SESSION_ID=177 and SESSION_SERIAL#=24875;
select * from v$sql where sql_id='80qjf2m04utnr';


分析原因并给出相应语句,你对Oracle并行的理解,什么情况触发

我来答
添加附件
收藏
分享
问题补充
4条回答
默认
最新
周伟

查看查询表的  degree 参数是多少,这个大多都是由于创建索引的时候用了并发,然后创建完成之后没有设置noparallel,那么以后涉及到这个表的查询,就会自动开启并发执行。

另外看看服务器上面的parallel 相关的参数是什么,比如 parallel_degree_policy,这个默认是manual 的,如果是设置成了auto,就会开启自动DOP特性。

暂无图片 评论
暂无图片 有用 0
打赏 0
暂无图片
徐孝亮

先看下执行计划,不一定和并行有关

暂无图片 评论
暂无图片 有用 0
打赏 0
lianR

这是一组Oracle数据库的查询语句,用于分析数据库的活动会话历史。以下是每个查询语句的解释:

1.  `select  SAMPLE_ID,count(*)  from  v$active_session_history  group  by  SAMPLE_ID  order  by  2  desc`:这个查询语句用于查看活动会话历史中每个样本ID的数量,并按数量降序排列。

2.  `select  *  from  v$active_session_history  where  SAMPLE_ID='268266729'`:这个查询语句用于查看样本ID为'268266729'的活动会话历史的所有信息。

3.  `select  *  from  v$active_session_history  where  SESSION_ID=177  and  SESSION_SERIAL#=24875`:这个查询语句用于查看会话ID为177且会话序列号为24875的活动会话历史的所有信息。

4.  `select  *  from  v$sql  where  sql_id='80qjf2m04utnr'`:这个查询语句用于查看sql_id为'80qjf2m04utnr'的SQL语句的所有信息。

通过这组查询语句,可以分析出活动会话突然增高的原因,以及这个现象持续的时间。同时,也可以查看发起这个现象的查询服务的信息,以及相关的SQL语句。

暂无图片 评论
暂无图片 有用 0
打赏 0
lianR

从你的描述来看,这个问题可能是由于Oracle的并行处理机制导致的。虽然你的程序没有开启并行处理,但是Oracle在某些情况下会自动启用并行处理,以提高查询性能。这种情况通常发生在处理大量数据的查询中。

Oracle并行处理是指Oracle数据库在执行查询时,会将查询任务分解为多个子任务,然后并行执行这些子任务,以提高查询性能。并行处理可以显著提高处理大量数据的查询的性能,但是也会增加系统的负载,可能导致系统资源的短时间内的高度使用。

在你的情况中,可能是由于查询服务处理的数据量较大,触发了Oracle的并行处理机制,导致活动会话数突然增加。但是由于并行处理可以提高查询性能,所以活动会话数在一分钟内就下来了。

解决方案:
你可以通过设置参数parallel_degree_policy来控制Oracle的并行处理机制。如果你不希望Oracle自动启用并行处理,可以将此参数设置为MANUAL。例如:

ALTER  SYSTEM  SET  parallel_degree_policy=MANUAL;

对于已经存在的SQL,你可以使用no_parallel  hint来禁用并行处理。例如:

SELECT  /*+  no_parallel(t)  */  *  FROM  t;

触发情况:
Oracle的并行处理机制通常在以下情况下触发:

1.  查询处理的数据量较大。
2.  查询涉及到的表或索引的大小超过了参数parallel_min_threshold的值。
3.  执行计划中包含了并行操作,例如全表扫描或者索引快速全扫描。

停止输出

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
昨天备份失败了,那么,老板要恢复昨天的数据,怎么办
回答 6
已采纳
用前天的成功备份备份后的归档日志可以恢复的,别慌
Oracle 导入dmp文件 其中一张表特别大,四千万行数据 导入失败 IMP-00009: 导出文件异常结束,怎么解决?
回答 2
根据实际情况,调整undoretention参数大小,直到能够正常导出数据为止。修改参数undoretention不重启altersystemsetundoretention36000scopebot
19c rac 节点与DB节点不符合
回答 1
可能性1、创建数据库时,addinstance的时候,节点名称和实例名称反了;可能性2、数据库安装的时候模式选择错误,db安装Oracle支持策略或者池的概念,数据库实例可以在不同的RAC节点,需要铲
oracle安装过程缺少的包在哪下载?
回答 1
请参考:https://rpm.pbone.net/resultssrodzaj1searchcompatlibstdc%2B%2B33
Oracle truncate之后水位线没有下降,怎么处理?
回答 3
shrink、expdp/impdp、move、rename复制表都可以尝试一下。
Oracle有没有发行过arm的版本?
回答 3
Oracle有arm的客户端,arm的性能堆积起来是比x86要好的,并不是arm的就差。
oracle11g单库 rman备份还原到rac 数据库报错
回答 2
好的,谢谢。我说怎么弄过几次都是报错。
oracle数据库11.2.0.4版本,已经打过181016的补丁,现在想打201020的补丁,要不要先回滚181016的补丁?
回答 1
在Oracle数据库中,不需要先回滚已经安装的补丁才能安装新的补丁。您可以直接在已经打过181016的版本上安装201020补丁。通常情况下,Oracle的每一个补丁都是独立的,不依赖于之前安装的补丁
Oracle服务器端sqlplus在表里插入中文,sqlplus里能正常显示,客户端plsql显示乱码。客户端plsql插入中文,plsql里能正常显示,服务端sqlplus乱码
回答 1
已采纳
你用sqlplus插入中文的时候,是用的手敲命令还是用的sql文件?有没有检查一下sql文件的编码是utf8还是gbk?
oracle 19c 的auto_stats_advisor_task 怎么关闭?
回答 1
已采纳
execdbmsautotaskadmin.disable(clientname>'sqltuningadvisor',operation>NULL,windowname>NULL)