`
kiddwyl
  • 浏览: 403498 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

PX Deq: Execute Reply 案例说明

阅读更多

1 背景:
Oracle 数据库在执行sql时,会自动的选择较优的执行计划。但有时oracle自动选择的执行计划不是最佳的执行计划,在执行的时候可能会造成效率问题,甚至会hang住。
2 问题提出:
A省近期20多天来在进行boss同步日志的生成时,经常出现程序长时间的运行没有相应,初步怀疑程序中的sql:

SQL_TEXT
------------------------------------------------------------------------------
--
SELECT a.column01,

      
a.column02,
      
a.column03,
      
a.column04,
      
b.column05,
      
to_char(a.column06, 'yyyymmddhh24miss'),
      
a.column07,
      
b.column08,
      
c.column09,
      
a.column10,
      
a.column11,
      
b.column12,
      
b.column13,
      
a.column14,
      
a.column15
 
FROM big_table01 a, small_table01 b, small_table02 b
 
WHERE ((((a.myid > :b0 AND a.myid < :b1) AND a.servid = b.servid) AND
      
a.icpid = c.icpid) AND a.icpid = b.icpid)
 
ORDER BY a.myid

中涉及的表有锁表现象。

3 问题分析:
2007年5月18号登录A省业务数据库检查,没有发现sql中的表有锁表现象,而且由于程序仅仅是将查询的结果输出到日志文件,就算是锁表也不会影响到select的过程。
在进一步的检查中发现,数据库中挂死程序对应的等待事件为:

EVENT                 
--------------------
--
PX Deq: Execute Reply

该等待事件是oracle在执行并发执行(PARALLEL EXECUTE)时,分成多个子进程进行操作,必须等待所有的子进程完成后才返回执行结果。
查询该sql的执行计划:

Execution Plan
--------------------------------------------------------
--
……(略正常部分执行计划)

 
 
  
1 PARALLEL_TO_SERIAL            SELECT A1.C0 C0,A1.C1 C1,A1.C2 C2,A1.C3 C3,A
                                  
1.C4 C4,A1.C5 C5,A1.C6 C6,A1.C7 C7,A
 
  
2 PARALLEL_TO_PARALLEL          SELECT /*+ ORDERED NO_EXPAND USE_NL(A2) INDE
                                   X(A2 "PK_ICP") */
A1.C1 C0,A1.C11 C1
 
  
3 PARALLEL_COMBINED_WITH_PARENT
  
4 PARALLEL_COMBINED_WITH_PARENT
  
5 PARALLEL_COMBINED_WITH_PARENT
  
6 PARALLEL_COMBINED_WITH_PARENT
  
7 PARALLEL_COMBINED_WITH_PARENT
  
8 PARALLEL_COMBINED_WITH_PARENT
  
9 PARALLEL_FROM_SERIAL
 
11 PARALLEL_FROM_SERIAL
 
13 PARALLEL_COMBINED_WITH_PARENT
 
14 PARALLEL_COMBINED_WITH_PARENT

从上面的执行计划可以看到,以上的sql确实走了并发执行。由于BIG_TABLE01是分区表,oracle认为同时的对各个分区做并发执行是最优的执行计划,由于A省misc数据库是RAC机制,执行的时候,相关的子进程也被分发到另一个节点上,可能在长时间执行的过程中(执行频率比较高,每分钟执行一次),某些分发到另一节点的子进程找不到对应的上级进程,而上级进程需等待子进程的返回结果,于是就出现了长时间的等待,造成了程序长期的挂住——这也就是我们一开始看到的PX Deq: Execute Reply等待事件。
4 问题解决:
由于oracle采用了不恰当的执行计划,所以才导致执行的时候长时间的等待。因此,在这里我们用alter table big_table01 noparallel;/ alter index IDX_SUBNHISTORY_HISTORYID noparallel命令取消表和索引的并发执行属性。通过观察其执行计划,发现其已经不再走并发执行了:
重启应用后,运行15小时以上没有发现挂死现象了。

5 改进与预防措施:
该问题可能是A省的特殊问题,同样的sql在B省业务数据库中(也是rac)执行,观察其执行计划,看到其sql没有走并发执行。因此作为个案处理

分享到:
评论

相关推荐

    Springer - Introducing Monte Carlo Methods with R (Januar 2010)

    ### 《Springer - Introducing Monte Carlo Methods with R》知识点概览 #### 一、书籍基本信息 - **书名**:Introducing Monte Carlo Methods with R - **作者**:Christian P....- **出版社**:Springer ...

    deq:[NeurIPS'19]深度均衡模型

    深度均衡模型消息2020/12:对于那些想从玩具版本的DEQ开始(实现比此回购要简单得多)的人,关于“ Deep Implicit Layers”的NeurIPS 2020教程详细介绍了如何如何建立,训练和使用DEQ模型:。 2020/10:提供DEQ的...

    anime-inpainting-deq:使用深度均衡模型进行动漫图像修复

    工作正在进行中修复DEQ 使用深度均衡模型修复动漫图像(希望如此)当前模型目前,我们采用作为模型。引文@article{uddin2020global, title={Global and Local Attention-Based Free-Form Image Inpainting}, author=...

    pso.zip_DEQ_优化算法_粒子群

    《DEQ优化算法与粒子群:深度解析及应用》 粒子群优化算法(Particle Swarm Optimization, PSO)是一种源于自然界的群体智能优化方法,由Eberhart和Kennedy于1995年提出,受到鸟群觅食行为的启发。在计算机科学和...

    TBProAudio.dEQ6.v1.1.5.CE

    TBProAudio.dEQ6.v1.1.5.CE 非常好的音频效果器,动态六频段调节

    deq.zip_in

    本篇文章将基于标题“deq.zip_in”和描述“this is the source code for de-queue in datastructures in c”,深入解析C语言实现的双端队列。 双端队列的基本操作包括: 1. 初始化:创建一个空的双端队列。 2. 插入...

    BioMon_R:BioMon与DEQ Lab员工相关的所有事宜

    【标题】"BioMon_R:BioMon与DEQ Lab员工相关的所有事宜"涉及到的是一个使用R语言开发的项目,主要用于处理与BioMon(可能是一个生物监测或环境监测系统)和DEQ Lab(可能是环境质量实验室)员工工作相关的数据和分析...

    安全攻防技术文档DEQ

    安全攻防技术文档

    linux作业调度C程序

    在这个实验中,`enq`、`deq`和`stat`可能是实现调度程序的核心函数。`enq`可能代表“enqueue”,用于将新进程添加到调度队列中;`deq`可能对应“dequeue”,即从队列中取出下一个要执行的进程;`stat`则可能用于显示...

    Vpp epoll实现的代码解析.pdf

    VPP端在下行发包时,如果发现want_deq_ntf被打了这样的标记,或者has_deq_ntf为0且tx_fifo由满变不满,或者tx_fifo为空且has_deq_ntf为0,那么它会将tx事件添加到app的app_event_queue中,通知app端有新的数据包需要...

    Python实现队列的方法

    本文实例讲述了Python实现队列的方法。分享给大家供大家参考。具体实现方法如下: ...def deQ(): if len(queue) == 0: print 'Cannot pop from an empty queue!' else: print 'Removed [', queue.pop(0) ,

    3D-EQ_Visualisation.zip

    《3D音效可视化:深度探索3D建模在音乐体验中的应用》 3D-EQ_Visualisation.zip是一个专为音乐爱好者和视觉设计师打造的3D音乐可视化工具,它将音频频率的变化以三维图形的形式生动展现出来,提供了一种全新的音乐...

    Job-Scheduling:OS实验2, 作业调度

    Job-Scheduling需求说明基本要求和提高要求基本要求:学习源代码,并完成十个调试任务。提高要求:实现多级反馈轮转调度算法多级——多个队列。反馈——优先级会根据等待时间变化轮转——同优先级的作业轮流进行具体...

    b码对时调试规范附deq中控代码资料(适用于USB转RS232或者RS485接口).pdf

    标题“b码对时调试规范附deq中控代码资料(适用于USB转RS232或者RS485接口)”指出了文档的主题内容和应用场景。文档描述了一个特定的调试规范,它适用于使用IRIG-B码进行时间同步的系统,并且提供了对应的中控代码...

    MyEclipse2016Stable1.0破解工具

    本来想免费的,但现在csnd...说重点破解有说明文件,自己看看,对了,有些破解不了,是因为你版本没选对,我这个要选blue的哦! 如有侵权,请告知,我立刻删除,谢谢! http://pan.baidu.com/s/1dEQ2vlB 提取码:pyd5

    cpp代码-stl_deque容器用法

    本文将深入探讨`std::deque`容器的使用方法,并通过一个简单的`main.cpp`程序示例来说明。 **1. deque的定义和特性** `std::deque`(发音deck)是一个动态数组,可以视为具有高效前插和后插操作的向量。与`std::...

    北大青鸟体检套餐双列集合

    这个模块利用数据结构中的双列集合(Double-Ended Queue, 简称DEQ)来实现高效的数据操作。双列集合是一种特殊的线性数据结构,允许在两端进行插入和删除操作,类似于队列和栈的结合体,具有很高的灵活性。 首先,...

    ctl:C模板库

    deq.h = std::deque lst.h = std::list pqu.h = std::priority_queue que.h = std::queue set.h = std::set stk.h = std::stack str.h = std::string ust.h = std::unordered_set vec.h = std::vector 使用 使用...

    C_Data_Structure

    文档最后提到了案例研究的部分,虽然具体内容未给出,但可以推测该部分旨在通过实际例子来加深对双向链表的理解与应用。通过分析具体的编程任务或问题,读者可以更好地掌握双向链表的实现细节及应用场景。 以上是对...

Global site tag (gtag.js) - Google Analytics