<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Doug's Oracle Blog</title><link>http://oracledoug.com/serendipity/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/DougsOracleBlog" /><description></description><language>en</language><image><url>http://www.feedburner.com/fb/images/pub/fb_pwrd.gif</url></image><managingEditor>noemail@noemail.org (Doug Burns)</managingEditor><generator>Serendipity 1.5.2 - http://www.s9y.org/</generator><admin:errorReportsTo xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" rdf:resource="mailto:doug@oracledoug.com" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/DougsOracleBlog" /><feedburner:info uri="dougsoracleblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><item><title>10053 Trace Files - Different Plan in Different Environments</title><link>http://feedproxy.google.com/~r/DougsOracleBlog/~3/KcMRTW0dpjw/index.php</link><author>dougburns@yahoo.com (Doug Burns)</author><pubDate>Tue, 19 Mar 2013 16:22:00 PDT</pubDate><guid isPermaLink="false">http://oracledoug.com/serendipity/index.php?/archives/1700-guid.html</guid><description>&lt;p style="margin-right: 0px;" dir="ltr"&gt;Rather than just describing the contents of the trace file, I thought it might be a good idea to tie the various sections into how they might help you solve Real World&lt;sup&gt;TM&lt;/sup&gt; problems. Which might not be immediately obvious when the first example I use is the trace file for :-&amp;#160;&lt;br /&gt;&lt;br /&gt;SELECT * FROM DUAL;&lt;br /&gt;&lt;br /&gt;But &lt;a href="/10053.html" target="_blank"&gt;here it is&lt;/a&gt;. The first thing to note is that it's a 66KB file of over 2000 lines, even for something so trivial, which is just a taste of just how massive these files can be. It will also be environment and version-specific, as you'll see. Such is the nature of low-level trace files. &lt;br /&gt;&lt;br /&gt;Going through the initial sections at a very high level, we have ....&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;Lines 1-20&lt;/strong&gt; - The standard type of trace file pre-amble that you might have seen in other trace files including&lt;br /&gt;&lt;br /&gt;- The trace file name&lt;br /&gt;- Instance and version information&lt;br /&gt;- Host and O/S information&lt;br /&gt;- Session Instrumentation of the type set by calls to DBMS_APPLICATION_INFO&lt;br /&gt;&lt;br /&gt;Then we get to the first 10053-specific information (&lt;strong&gt;lines 22-27&lt;/strong&gt;) which registers the various Query Blocks in this query. Understandably there is only one entry here in the QUERY BLOCK SIGNATURE section, were Oracle automatically names the query block to SEL$1&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Line 28 &lt;/strong&gt;is a note from SQL Plan Management highlighting that this statement does not already exist in the SQL Management Base.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Lines 29-32 &lt;/strong&gt;contain a note that 11g Auto-DOP is disabled and at this point hopefully you'll start to see that if you already have a reasonable understanding of the CBO and related features, the trace file is actually pretty descriptive and verbose. From memory, I'm not sure it was always as easy to read.&lt;br /&gt;&lt;br /&gt;For more information on Predicate Move-Around (as mentioned in &lt;strong&gt;lines 33-35&lt;/strong&gt;), this &lt;a href="http://cs.brown.edu/courses/csci2270/archives/2012/papers/planning/10.1.1.102.835.pdf"&gt;1994 VLDB paper&lt;/a&gt; is worth a look. Of course, when your statement is SELECT * FROM DUAL, there aren't exactly a lot of predicates to move around! &lt;img src="http://oracledoug.com/serendipity/templates/default/img/emoticons/wink.png" alt=";-)" style="display: inline; vertical-align: bottom;" class="emoticon" /&gt;&lt;br /&gt;&lt;br /&gt;Next we go into a long section describing OPTIMIZER INFORMATION gathered from a variety of sources.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Line 40&lt;/strong&gt; shows the SQL statement and dont underestimate how important this is as further confirmation that you're looking at the right tracefile.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Lines 42-94 &lt;/strong&gt;are a very handy Legend that lists the abbreviations that are used in the trace file. Some of these might have been guessable but, with so many terms used, it's great that you don't have to guess any more.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Lines 95-419&lt;/strong&gt; are a section that I often find very handy in solving issues with bad plans in two different database environments. The classic case of a developer telling me that it runs fine in Test but not in Production. The developer might send along the two plans and, even with a couple of good SQL Monitoring reports or the output of DBMS_XPLAN, that doesn't really tell me why the two plans are different, just that they are different. Working in an environment with multiple Dev, Test and Prod environments, it's not unusual to find that there is some drift in the instance configurations or someone has different session parameters set. It's a quick job to just open up the two trace files in a visual diff tool and make absolutely &lt;em&gt;sure&lt;/em&gt; that the parameters the optimizer references (and you'll see just how many there are these days!) are truly identical.&lt;br /&gt;&lt;br /&gt;It's just a small tip, but you'd be surprised by the number of issues that's helped me identify!&lt;br /&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DougsOracleBlog/~4/KcMRTW0dpjw" height="1" width="1"/&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://oracledoug.com/serendipity/wfwcomment.php?cid=1700</wfw:comment><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">10</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://oracledoug.com/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=1700</wfw:commentRss><feedburner:origLink>http://oracledoug.com/serendipity/index.php?/archives/1700-10053-Trace-Files-Different-Plan-in-Different-Environments.html</feedburner:origLink></item><item><title>10053 Trace Files - Getting Started</title><link>http://feedproxy.google.com/~r/DougsOracleBlog/~3/MRXH79chND0/index.php</link><author>dougburns@yahoo.com (Doug Burns)</author><pubDate>Mon, 18 Mar 2013 00:00:00 PDT</pubDate><guid isPermaLink="false">http://oracledoug.com/serendipity/index.php?/archives/1701-guid.html</guid><description>Before getting into the contents of a 10053 trace file and looking at any useful stuff, you need to know what the files are for and how and where they are created. &lt;br /&gt;&lt;br /&gt;Essentially, setting event 10053 causes the Cost Based Optimizer to write information to a trace file describing the information it is using and the results of it's calculations whilst walking through the decision-making process  to determine the best execution plan. It includes the options that it has considered and discarded, those that it has accepted and options which are unavailable for various reasons. Because the decision making process is detailed and extensive, the files tend to be large for all but the most trivial statements and I'd challenge most people to read and understand an entire 10053 trace file! However, you are often looking for the reason for a particular bad decision, which helps to narrow the scope and, personally, I've found recent versions of 10053 trace files much more verbose and readable.&lt;br /&gt;&lt;br /&gt;The best and most detailed reference I've seen is Wolfgang Breitling's paper '&lt;a href="http://www.centrexcc.com/A%20Look%20under%20the%20Hood%20of%20CBO%20-%20the%2010053%20Event.pdf"&gt;A Look under the Hood of the CBO&lt;/a&gt;' although it was written many years ago and, as with all low-level undocumented Oracle information, things change frequently and without warning. At the start of the paper he describes how to set event 10053 to generate the related trace file in the instance's user dump destination. However, since Oracle 11g, there is a more flexible way to generate the trace file that Maria Colgan describes in a couple of posts on the Optimizer Development Groups blog &lt;a href="https://blogs.oracle.com/optimizer/entry/how_do_i_capture_a"&gt;here &lt;/a&gt;and &lt;a href="https://blogs.oracle.com/optimizer/entry/capturing_10053_trace_files_continued"&gt;here&lt;/a&gt;. The latter post is particularly interesting because that approach automatically triggers a hard parse of the statement in order to generate the trace file. &lt;br /&gt;&lt;br /&gt;Which solves what I suspect is one of the most confusing aspects of generating 10053 trace files when you're first getting used to it. The statement needs to be hard-parsed to ensure that the trace file will be generated. It might help you to remember what it is that is being traced - the CBO making it's decisions as it chooses an optimal execution plan. So, if the plan has already been generated then no trace file! One simple technique to get around this prior to 11g is to add a new comment to the statement to force a hard parse. Remember that if you find that the trace file is not being produced as expected, that might be the reason.&lt;br /&gt;&lt;br /&gt;In the next post, I'll start to look at the contents of a 10053 trace file.&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/DougsOracleBlog/~4/MRXH79chND0" height="1" width="1"/&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://oracledoug.com/serendipity/wfwcomment.php?cid=1701</wfw:comment><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://oracledoug.com/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=1701</wfw:commentRss><feedburner:origLink>http://oracledoug.com/serendipity/index.php?/archives/1701-10053-Trace-Files-Getting-Started.html</feedburner:origLink></item><item><title>10053 Trace Files</title><link>http://feedproxy.google.com/~r/DougsOracleBlog/~3/yOIGXg8C2bM/index.php</link><author>dougburns@yahoo.com (Doug Burns)</author><pubDate>Sun, 17 Mar 2013 15:52:00 PDT</pubDate><guid isPermaLink="false">http://oracledoug.com/serendipity/index.php?/archives/1699-guid.html</guid><description>Sometimes I'm really not sure whether a blog post is a good idea or not. This is one of those times.&lt;br /&gt;&lt;br /&gt;I remember a while ago that Neil Chandler wrote a blog post about why you probably don't need &lt;a href="http://chandlerdba.wordpress.com/2011/11/22/the-10046-trace-largely-useless-isnt-it/"&gt;10046 trace files&lt;/a&gt; that I didn't completely agree with and I kept thinking I must comment on it or write a post from a different perspective. Neil's a mate, a London Oracle Beers regular and I understood where he was coming from in that post. He makes some excellent points, so I recommend you read it. But I don't think it's so hard to get a trace enabled these days as people think. You don't necessarily need to change a line of code with the availability of the DBMS_MONITOR package and (although I accept this is unusual) the client I've worked for most recently makes trace file access very easy for developers. We also have ASH, AWR and SQL Monitoring though and I tend to agree with Neil that the times when 10046 trace files are truly required to solve problems are limited. Now I read this back, it sounds like I agree with him, but I know that I use 10046 trace files more regularly than the post suggests. I would say 10046 trace files are incredibly useful sometimes. In fact, when they are useful they are the only correct tool for the job.&lt;br /&gt;&lt;br /&gt;But the real reason for referencing Neil's post is this statement.&lt;br /&gt;&lt;br /&gt;&amp;quot;&lt;em&gt;I have never used a 10053 trace on a Production system. I have simply 
never needed to know the decisions taken by the optimizer in that much 
detail.&lt;/em&gt;&amp;quot;&lt;br /&gt;&lt;br /&gt;I've had this discussion with most well-known experts in the Oracle community at some point or other and there's general agreement that there's no need to bother with those pesky and ridiculously geeky 10053 trace files most of the time. Most SQL performance problems simply aren't that complicated. I've probably agreed whenever the argument has come up but the fact is that I increasingly find myself using them and it worries me a little that 'most of the time you don't need them - concentrate on the basics' is heard as - 'don't ever bother looking at them - they won't help' and I've been tempted to redress the balance for a while.&lt;br /&gt;&lt;br /&gt;But something stopped me. 10053 trace files &lt;em&gt;are&lt;/em&gt; exceptionally long and contain a lot of information that I wouldn't begin to pretend I understand and so if you can't cover a subject properly and it is quite a technical subject then, not only are you in danger of doing people a disservice but you are also opening yourself up to all sorts of challenges, corrections and debates. But, hey, that's what a community and what blogging is all about - people learning from each other. I'm also not a big fan of any technical writing which is about how clever the writer is above it actually being useful! The more I know, the more I find myself avoiding the wilfully geeky stuff.&lt;br /&gt;&lt;br /&gt;I still wasn't sure but at least one person at my current client has been badgering me about this for ages so I've decided, what the hell, I'm going to write a few blog posts about the things I find useful about 10053 trace files and hopefully give some very high level hints about how you might use them too.&lt;br /&gt;&lt;br /&gt;If it's not technical enough for some people then tough and if I go astray, there are plenty of people out there who probably know the subject much better who can keep me straight &lt;img src="http://oracledoug.com/serendipity/templates/default/img/emoticons/wink.png" alt=";-)" style="display: inline; vertical-align: bottom;" class="emoticon" /&gt; (Just off the top of my head, I can think of &lt;a href="https://blogs.oracle.com/optimizer/"&gt;Maria Colgan&lt;/a&gt;, &lt;a href="http://jonathanlewis.wordpress.com/"&gt;Jonathan Lewis&lt;/a&gt;, &lt;a href="http://www.centrexcc.com/"&gt;Wolfgang Breitling&lt;/a&gt;, &lt;a href="http://www.antognini.ch/"&gt;Christian Antognini&lt;/a&gt; .... well, it could be a long list).&lt;br /&gt;&lt;br /&gt;Enough of the intro, but let me finish by saying what I think is the most important reason to use 10053 trace files. There are many posts about inaccurate row source cardinalities leading to bad plans (&lt;a href="http://structureddata.org/2007/11/21/troubleshooting-bad-execution-plans/"&gt;This&lt;/a&gt; is one of my favourites). But I believe that it's actually only the experts who can compare E-ROWS and A-ROWS and make educated guesses about why the cardinalities are wrong. (To give you an example, many is the time that Jonathan Lewis has said to me - 'Oh, that looks like a classic Optimizer 5% guess' - or words to that effect, anyway.) But most of us can't just 'see' those things when we look at a plan. At best, a 10053 trace file offers the possibility of &lt;em&gt;knowing why &lt;/em&gt;the CBO picked the wrong plan.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/DougsOracleBlog/~4/yOIGXg8C2bM" height="1" width="1"/&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://oracledoug.com/serendipity/wfwcomment.php?cid=1699</wfw:comment><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://oracledoug.com/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=1699</wfw:commentRss><feedburner:origLink>http://oracledoug.com/serendipity/index.php?/archives/1699-10053-Trace-Files.html</feedburner:origLink></item><item><title>Not all Deadlocks are created the same</title><link>http://feedproxy.google.com/~r/DougsOracleBlog/~3/MxmKxIcO-Cw/index.php</link><author>dougburns@yahoo.com (Doug Burns)</author><pubDate>Sun, 10 Mar 2013 18:53:00 PDT</pubDate><guid isPermaLink="false">http://oracledoug.com/serendipity/index.php?/archives/1697-guid.html</guid><description>&lt;code&gt;&lt;/code&gt;I've &lt;a href="http://oracledoug.com/serendipity/index.php?/archives/1014-Being-Open-minded.html"&gt;blogged about deadlocks in Oracle&lt;/a&gt; at least once before. I said then that although the following message in deadlock trace files is usually true, it isn't always.

&lt;br /&gt;&lt;br /&gt; 
&lt;pre&gt;&lt;code&gt;The following deadlock is not an Oracle error. Deadlocks of&amp;#160; 
this type can be expected if certain SQL statements are&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 
issued. The following information may aid in determining the 
cause of the deadlock.
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;So when I came across another example recently, it seemed worth a quick blog post. Not least for the benefit of other souls who hit the same issue (and probably hit Google moments later).&lt;br /&gt;&lt;br /&gt;But while it's easy to say - &amp;quot;Hey! Look! I found an exception! Aren't I clever?&amp;quot; - it occurred to me that actually Oracle's capabilities in this area might be underrated by raising the occasional anomaly. Because the truth is&lt;br /&gt;&lt;br /&gt;1) In most cases, deadlock errors &lt;em&gt;are&lt;/em&gt; down to the way you've written your application or some documented restriction in Oracle. The type of restrictions that you're more likely to hit if you're handling high degrees of concurrency with lots of DDL, parallel query, partition management and the like. Such activities often have unusually restrictive locking requirements and most locking issues can be turned into deadlock issues quite easily if you have a few sessions running concurrently. 





&lt;p&gt;&lt;br /&gt;2) It's still the case that Oracle will handle the deadlock situation, at least to the extent of rolling back one of the statements causing the issue. (Although, whilst writing this post, I noticed that &lt;a href="http://jonathanlewis.wordpress.com/2013/02/22/deadlock-detection/"&gt;Jonathan Lewis raised the question&lt;/a&gt; of what exactly people mean when they suggest that Oracle resolves deadlock issues.&lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;3) Deadlock trace files are typically very useful and not the most difficult to read. Yes, they tend to use Oracle kernel terminology (not surprising) but I'd wager that most people could have a rough idea of the root cause with some initial analysis and could have a very detailed idea, given more time. Even if you can't decipher the things yourself, it gives Oracle Support detailed information to help root cause analysis.&lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;So, to the particular issue we hit. Towards the end of a data loading process that loads around a billion rows in a short period of time (30/60 minutes that also includes a bunch of surrounding activities), we would hit the occasional deadlock error. Fortunately, the site I'm working at just now has a very enlightened policy towards developer access to the alert log and trace files, so I can do my own initial investigation. On digging out the relevant deadlock trace file, it looked like this (some details changed)&lt;br /&gt;&lt;/p&gt; 
&lt;pre&gt;Trace file /app/ora/local/admin/PRD/diag/rdbms/PRD_prod_server/PRD/trace/PRD_dia0_1627682.trc 

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production 
With the Partitioning, Automatic Storage Management, OLAP, Data Mining 
and Real Application Testing options 
ORACLE_HOME = /app/ora/local/product/11.2.0.3/db_1 
System name:&amp;#160;&amp;#160;&amp;#160; Linux 
Node name:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; prod_server.ldn.orcldoug.com 
Release:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2.6.32-220.13.1.el6.x86_64 
Version:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; #1 SMP Thu Mar 29 11:46:40 EDT 2012 
Machine:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; x86_64 
Instance name: PRD 
Redo thread mounted by this instance: 1 
Oracle process number: 8 
Unix process pid: 1627682, image: &lt;a href="mailto:oracle@prod_server.ldn.orcldoug.com"&gt;oracle@prod_server.ldn.orcldoug.com&lt;/a&gt; (DIA0)
*** 2013-01-16 09:09:10.925 
*** SESSION ID:(201.1) 2013-01-16 09:09:10.925 
*** CLIENT ID:() 2013-01-16 09:09:10.925 
*** SERVICE NAME:(SYS$BACKGROUND) 2013-01-16 09:09:10.925 
*** MODULE NAME:() 2013-01-16 09:09:10.925 
*** ACTION NAME:() 2013-01-16 09:09:10.925 
&amp;#160; 
------------------------------------------------------------------------------- 
&amp;#160; 
DEADLOCK DETECTED (id=0xd0102292) 
&amp;#160; 
Chain Signature: 'library cache lock'&amp;lt;='row cache lock' (cycle) 
Chain Signature Hash: 0x52a8007d 
&amp;#160; 
The following deadlock is not an Oracle error. Deadlocks of&amp;#160; 
this type can be expected if certain SQL statements are&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 
issued. The following information may aid in determining the 
cause of the deadlock.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 
&amp;#160; 
Resolving deadlock by signaling ORA-00060 to 'instance: 1, os id: 3443329, session id: 161' 
&amp;#160; dump location: /app/ora/local/admin/PRD/diag/rdbms/PRD_prod_server/PRD/trace/PRD_ora_3443329.trc 
&amp;#160; 
Performing diagnostic dump on 'instance: 1, os id: 3443222, session id: 779' 
&amp;#160; dump location: /app/ora/local/admin/PRD/diag/rdbms/PRD_prod_server/PRD/trace/PRD_ora_3443222.trc 
&amp;#160; 
------------------------------------------------------------------------------- 
&amp;#160;&amp;#160;&amp;#160; Oracle session identified by: 
&amp;#160;&amp;#160;&amp;#160; { 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; instance: 1 (PRD_prod_server.PRD) 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; os id: 3443222 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; process id: 127, &lt;a href="mailto:oracle@prod_server.ldn.orcldoug.com"&gt;oracle@prod_server.ldn.orcldoug.com&lt;/a&gt; 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; session id: 779 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; session serial #: 605 
&amp;#160;&amp;#160;&amp;#160; } 
&amp;#160;&amp;#160;&amp;#160; is waiting for 'row cache lock' with wait info: 
&amp;#160;&amp;#160;&amp;#160; { 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p1: 'cache id'=0x8 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p2: 'mode'=0x0 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p3: 'request'=0x5 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; time in wait: 1 min 58 sec 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; timeout after: never 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; wait id: 1655 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; blocking: 1 session 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; current sql: Begin run_manager_pkg.finalize_all_values_prc(:v0); End; 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; wait history: 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * time between current wait and wait #1: 0.002176 sec 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; event: 'enq: PS - contention' 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; time waited: 0.000082 sec 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; wait id: 1654&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p1: 'name|mode'=0x50530006 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p2: 'instance'=0x1 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p3: 'slave ID'=0x2f 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * time between wait #1 and #2: 0.000013 sec 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; event: 'PX Deq: Slave Session Stats' 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; time waited: 0.000001 sec 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; wait id: 1653&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p1: 'sleeptime/senderid'=0x0 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p2: 'passes'=0x0 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * time between wait #2 and #3: 0.000001 sec 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 3.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; event: 'PX Deq: Slave Session Stats' 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; time waited: 0.000002 sec 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; wait id: 1652&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p1: 'sleeptime/senderid'=0x0 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p2: 'passes'=0x0 
&amp;#160;&amp;#160;&amp;#160; } 
&amp;#160;&amp;#160;&amp;#160; and is blocked by 
=&amp;gt; Oracle session identified by: 
&amp;#160;&amp;#160;&amp;#160; { 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; instance: 1 (PRD_prod_server.PRD) 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; os id: 3443329 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; process id: 134, &lt;a href="mailto:oracle@prod_server.ldn.orcldoug.com"&gt;oracle@prod_server.ldn.orcldoug.com&lt;/a&gt; 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; session id: 161 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; session serial #: 247 
&amp;#160;&amp;#160;&amp;#160; } 
&amp;#160;&amp;#160;&amp;#160; which is waiting for 'library cache lock' with wait info: 
&amp;#160;&amp;#160;&amp;#160; { 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p1: 'handle address'=0x101f8eac98 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p2: 'lock address'=0xfdef83738 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p3: '100*mode+namespace'=0x10f2000010003 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; time in wait: 1.739719 sec 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; timeout after: never 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; wait id: 508 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; blocking: 1 session 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; current sql: ALTER INDEX "DOUG"."VALUE_PK" REBUILD PARTITION "SYS_P4089"&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; wait history: 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * time between current wait and wait #1: 0.000973 sec 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; event: 'enq: CR - block range reuse ckpt' 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; time waited: 0.003220 sec 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; wait id: 507&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p1: 'name|mode'=0x43520006 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p2: '2'=0x10086 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p3: '0'=0x1 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * time between wait #1 and #2: 0.000008 sec 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; event: 'reliable message' 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; time waited: 0.000107 sec 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; wait id: 506&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p1: 'channel context'=0x101c5afa98 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p2: 'channel handle'=0x101c0f2260 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p3: 'broadcast message'=0x101b5cfd58 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * time between wait #2 and #3: 0.003791 sec 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 3.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; event: 'db file sequential read' 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; time waited: 0.000321 sec 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; wait id: 505&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p1: 'file#'=0x5e 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p2: 'block#'=0x118784 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p3: 'blocks'=0x1 
&amp;#160;&amp;#160;&amp;#160; } 
&amp;#160;&amp;#160;&amp;#160; and is blocked by the session at the start of the chain. 
&lt;/code&gt;&lt;/p&gt;&lt;/pre&gt; 
&lt;p&gt; &lt;br /&gt;I would hope that a few things would be immediately obvious, particularly if it's 'your' application that generated this issue 


&lt;br /&gt;&lt;br /&gt;1) The two sessions are running the following parts of the application.&lt;br /&gt;&lt;br /&gt;Session 1: Begin run_manager_pkg.finalize_all_values_prc(:v0); End; &lt;br /&gt;Session 2: ALTER INDEX &amp;quot;DOUG&amp;quot;.&amp;quot;VALUE_PK&amp;quot; REBUILD PARTITION &amp;quot;SYS_P4089&amp;quot;&lt;br /&gt;&lt;br /&gt;Which happened to fit in with what we were seeing. We have two concurrent runs which perform similar actions using different input files that load into different partitions.&lt;br /&gt;&lt;br /&gt;2) The first session is using Parallel Query (note the enq: PS - contention and different PX Deq wait events)&lt;br /&gt;&lt;br /&gt;3) The deadlock is a little unusual because it's not between two transactions trying to lock database objects or rows being locked by the other session but between in-memory structures. One session is waiting on 'row cache lock' and the other is waiting on 
'library cache lock', as opposed to waiting for specific row or 
table-level locks. This is also visible from the chain signature at the start of the trace file.&lt;br /&gt;&lt;br /&gt;Chain Signature: 'library cache lock'&amp;lt;='row cache lock' (cycle) &lt;br /&gt;&lt;br /&gt;Armed with 2) and 3) in particular, my next step was to go to My Oracle Support, as usual. I find that Google isn't too great with issues like this because some of them are quite specific and might not be affecting too many others. Sure enough, a search turned up :-&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Bug 14356507&amp;#160; Deadlock between partition maintenance and parallel query operations&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Which is confirmed as affecting versions 11.2.0.2 and 11.2.0.3. The fix is in Bundle Patch 12 for Exadata, in Oracle 12.1 and is also available as one-off patch that we're in the process of applying to different environments. &lt;br /&gt;&lt;br /&gt;The issue is that &amp;quot;When a parallel query is hard parsed, first QC hard parses the query and then all the slaves.&amp;#160; When a partition maintenance operation (DDL) comes in between the hard parses of QC and Slaves.&amp;quot;, then you can hit the deadlock. There's more detail in the bug notes, but it's worth noting this phrase &amp;quot;This is basically a timing issue, in high concurrency environments.&amp;quot;, which means it only affects us very intermittently and is a nightmare to prove we've eliminated without a lot of testing.&lt;br /&gt;&lt;br /&gt;What I find a little disconcerting is that there seem to be quite a few of these library cache deadlock issues kicking around in recent versions that I haven't been used to seeing in prior versions. Given some of the library cache madness I've seen in my few years with 11g, I do wonder what on earth they've done to it!&lt;br /&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DougsOracleBlog/~4/MxmKxIcO-Cw" height="1" width="1"/&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://oracledoug.com/serendipity/wfwcomment.php?cid=1697</wfw:comment><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://oracledoug.com/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=1697</wfw:commentRss><feedburner:origLink>http://oracledoug.com/serendipity/index.php?/archives/1697-Not-all-Deadlocks-are-created-the-same.html</feedburner:origLink></item><item><title>TOAD Ambulance Button (and a little Google)</title><link>http://feedproxy.google.com/~r/DougsOracleBlog/~3/KYQykN3rNXw/index.php</link><author>dougburns@yahoo.com (Doug Burns)</author><pubDate>Mon, 04 Mar 2013 23:00:44 PST</pubDate><guid isPermaLink="false">http://oracledoug.com/serendipity/index.php?/archives/1698-guid.html</guid><description>&lt;p style="MARGIN-RIGHT: 0px" dir="ltr"&gt;I've recently spent quite a while&amp;#160;working in a performance team&amp;#160;that supported Production performance incidents and worked with developers on application performance before the code hit Production. Whenever a developer asked me to look at the execution plan for their poorly performing statement, they would send over some evidence of the poor plan and in the majority of cases I found myself saying - "You didn't produce this using that damn Ambulance Button in TOAD, did you?" &lt;br /&gt;&lt;br /&gt;Even since I've moved on to a new role, the last time I found myself saying&amp;#160;that was only last week to an experienced Development Lead who knows Oracle pretty well for a Java lady. I then went on to show her DBMS_XPLAN and SQL Monitoring.&lt;br /&gt;&lt;br /&gt;So when I was &lt;a href="http://www.red-gate.com/products/oracle-development/deployment-suite-for-oracle/education/webinars/webinar-oracle-sql-monitoring-doug-burns"&gt;presenting on SQL Monitoring&lt;/a&gt; last week, I gave my usual minor rant about the Ambulance Button but I didn't realise until the end of the presentation and was looking over the online questions, that I appear to have upset one of the webinar attendees, who had subsequently left so I was unable to answer directly. That's why I've decided to blog about just exactly what it is I hate about that damn button, or at least the way people use it.&amp;#160;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;(Immediately after the presentation, a friend and colleague who knows TOAD inside out pointed out that TOAD doesn't even have an Ambulance Button any more! In version 11.6, there's been a major visual redesign and Explain Plan is now accessed using a button that looks like it has a little tree-like execution plan on it. Clearly my knowledge is out of date, but I need to balance that against the fact that at my current site, the vast majority of users are still using version 10.something.)&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;The webinar questioner raised a more important question though. Apparently you can configure the Ambulance Button so that it shows that actual plan used when the statement was executed, rather than using EXPLAIN PLAN to generate a projected plan. Because therein lies my main issue with the button. It effectively runs EXPLAIN PLAN and shows you the output. Experienced people probably understand that &lt;a href="http://kerryosborne.oracle-guy.com/2008/10/explain-plan-lies/"&gt;EXPLAIN PLAN can lie sometimes&lt;/a&gt; (sometimes is enough, though) and realise the limitations of not being able to &lt;a href="https://blogs.oracle.com/optimizer/entry/how_do_i_know_if"&gt;compare Expected and Actual Cardinalities for the different row sources&lt;/a&gt;. If you use it and are aware of the limitations, then fair enough, I suppose (although it still wouldn't be my preference). But a lot of TOAD users are not necessarily Oracle experts and the Ambulance Button gives them easy access to enough information to start making assumptions, without the background knowledge to question those assumptions. In the end, I have spent far too much of my time having to explain to people why what they think they're seeing is not what is actually happening and that frustrates the hell out of me.&lt;br /&gt;&lt;br /&gt;Maybe it's unfair for me to criticise a tool when it's really the way that people use it? Well, in the end, whether it's the tool or the people, the &lt;em&gt;combination&lt;/em&gt; of the two is what sucks up time and if I can show people a better tool and get them to use that instead, then everyone's a winner, right?&lt;br /&gt;&lt;br /&gt;In a similar vein, I often level the accusation at Google (the search engine) that it is the enemy of good software development. Why? Because it feels like the world is increasingly populated with people who think you can learn &lt;em&gt;anything&lt;/em&gt; from Google and that seems to be the sum total of their training as a programmer - being a bright person and then being let lose on systems with Google at hand to help them when they get stuck. Am I really the only person who doesn't&amp;#160;think of&amp;#160;this as a good thing? Am I being a complete dinosaur to think that occasionally people might want to have a little formal training and mentoring first? Why should you be able to learn PL/SQL from Google any more than you could learn brain surgery or flying an aeroplane or ... You get my drift.&lt;br /&gt;&lt;br /&gt;I should be clear on one important thing. &lt;em&gt;I use TOAD every single day&lt;/em&gt; and have relatively few issues with it as a development tool, and have stuck with it, despite trying many others. I was a &lt;em&gt;very &lt;/em&gt;early adopter! It does what I need it to do and it does it well. But when it comes to performance analysis, I hardly ever use it (other than to run queries against ASH data and the like). There is already an excellent execution plan generation tool in DBMS_XPLAN and, if you're lucky enough to have Diagnostics and Tuning Pack, then you have the OEM Performance Pages, Real-Time SQL Monitoring and lots of other cool graphical goodness. Even if you don't, you always have Extended Tracing and the like.&lt;br /&gt;&lt;br /&gt;I just think they're superior tools and the people I've met who use them or who I've shown how to use them tend to make fewer inaccurate assertions about performance issues.&lt;br /&gt;&lt;br /&gt;However, I was troubled that I'd made an inaccurate statement about TOAD (at the bare minimum) because that is a bad thing to do during a presentation, so I went to track down how I configure the Ambulance Button to show me the actual plan used, as the questioner suggested you can. I'm damned if I can work out how to, though, so if someone knows, I would appreciate an explanation in the comments below. Please don't tell me it's an 11 feature though because that isn't what most of the people who hassle me are using! Then again, I suppose I should tell them to upgrade to 11. In the meantime, the degree of annoyance that the questioner showed suggests to me that I have completely missed something really valuable that I should know about!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DougsOracleBlog/~4/KYQykN3rNXw" height="1" width="1"/&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://oracledoug.com/serendipity/wfwcomment.php?cid=1698</wfw:comment><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://oracledoug.com/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=1698</wfw:commentRss><feedburner:origLink>http://oracledoug.com/serendipity/index.php?/archives/1698-TOAD-Ambulance-Button-and-a-little-Google.html</feedburner:origLink></item></channel></rss>
