{"id":1699,"date":"2018-02-11T16:05:07","date_gmt":"2018-02-11T16:05:07","guid":{"rendered":"http:\/\/nenadnoveljic.com\/blog\/?p=1699"},"modified":"2022-02-17T15:36:22","modified_gmt":"2022-02-17T15:36:22","slug":"pl-sql-exception-handling-performance-degradation-oracle-12-2","status":"publish","type":"post","link":"https:\/\/nenadnoveljic.com\/blog\/pl-sql-exception-handling-performance-degradation-oracle-12-2\/","title":{"rendered":"PL\/SQL Exception Handling Performance Degradation in Oracle 12.2"},"content":{"rendered":"<p>The aim of this blog post is to warn about a potential performance issue in Oracle 12.2 related to PL\/SQL exceptions.<\/p>\n<p>The test case is rather simple. First, I&#8217;ll create an empty table.<\/p>\n<pre><code>create table t (a number) ;<\/code><\/pre>\n<p>Secondly, I&#8217;ll run the following anonymous block which executes a simple query on an empty table in a loop.<\/p>\n<pre><code>declare\n  l_c number ;\n  i number ;\nbegin\n  for i in 1..10000\n  loop\n    begin\n      select a into l_c from t ;\n    <span style=\"color: #ff0000;\">exception when no_data_found then\n      null ;<\/span>\n    end ;\n  end loop ;\nend ;  \n\/<\/code><\/pre>\n<p>The key point here is that the no_data_found exception handler will run with each loop iteration. Of course, null is a lousy exception handler, but I&#8217;m using it here just for demonstration purposes.<\/p>\n<p>In my case, the PL\/SQL block completed instantly on a 12.1 database, whereas on 12.2 the execution took 12.49 seconds. That&#8217;s way too long.<\/p>\n<p>Interestingly, the executed Oracle code is not instrumented. What I mean by that is, the CPU and the total wait time don&#8217;t account for the elapsed time.<\/p>\n<pre><code>\ncall     count       cpu    elapsed       disk      query    current        rows\n------- ------  -------- ---------- ---------- ---------- ----------  ----------\nParse        1      0.00       0.00          0          0          0           0\nExecute      1      <span style=\"color: #ff0000;\">2.25<\/span>      <span style=\"color: #ff0000;\">12.49<\/span>          0          0          0           1\nFetch        0      0.00       0.00          0          0          0           0\n------- ------  -------- ---------- ---------- ---------- ----------  ----------\ntotal        2      2.25      12.49          0          0          0           1\n\n...\n\nElapsed times include waiting on following events:\n  Event waited on                             Times   Max. Wait  Total Waited\n  ----------------------------------------   Waited  ----------  ------------\n  Disk file operations I\/O                        1        0.00          <span style=\"color: #ff0000;\">0.00<\/span>\n  SQL*Net message to client                       1        0.00          0.00\n  SQL*Net message from client                     1        0.00          0.00\n<\/code><\/pre>\n<p>Therefore, we need to use some OS diagnostics for further analysis. First of all, I executed pstack on the long running process on an Oracle 12.2 instance to get a rough idea which Oracle functions were being executed. This is what I got:<\/p>\n<pre><code> ffff80ffbcf9298a __read () + a\n 000000000a1f32b3 slmsrd () + 83\n 0000000017ec5f6b lmsaprb () + 5b\n 0000000009cc7c8e lmsagb1 () + 11e\n 0000000009cc7b1e lmsagbf () + 4e\n 0000000009cc7240 kgebse () + 180\n 0000000009cc704c kgebem () + 4c\n 0000000009cc6f19 ksemgm () + 69\n 0000000009714f85 opiodr () + 455\n...<\/code><\/pre>\n<p>According to <a href=\"https:\/\/fritshoogland.wordpress.com\/2017\/10\/16\/oracle-c-functions-annotations\/\" target=\"_blank\" rel=\"noopener\">Frits Hoogland&#8217;s sf.sh<\/a>   , kge functions are some kernel generic error functions. In fact, it is easy to verify that those functions are called when the PL\/SQL exception handling code is being executed. In addition, we can inspect the arguments of the functions above with the following DTrace script:<\/p>\n<pre><code>pid$target::kge*:entry,\npid$target::lms*:entry\n{\n  printf(\"%x %x %x %x %x %x %x %x \\n\",arg0,arg1,arg2,arg3,arg4,arg5,arg6,arg7);\n}\n\n...\nlmsapsc ffff80ffbd5b02c8 <span style=\"color: #ff0000;\">57b<\/span> ffff80ffbfff62db 1f5 2 203a 0 3aad71e4 \nlmsapbn ffff80ffbd5b02c8 2 <span style=\"color: #ff0000;\">57b<\/span> ffff80ffbfff62db 1f5 0 0 0 \n...<\/code><\/pre>\n<p>As you can see, <span style=\"color: #ff0000;\">0x57b<\/span> is being passed as an argument to some of the functions. 0x57b is 1403 in decimal notation which, in turn, is nothing else but the error code for the &#8220;no data found&#8221; condition.<\/p>\n<p>As for the next step, I&#8217;m going to compare the number of function calls in both Oracle versions.<\/p>\n<p>12.2:<\/p>\n<pre><code>  kgecss                                                            2\n  kge_is_oserr                                                  20000\n  kge_is_resig_mandatory                                        20000\n  kgeade                                                        20000\n  kgebem                                                        20000\n  kgebse                                                        20000\n  kgefrp                                                        20000\n  kgekeep                                                       20000\n  kgepop                                                        20000\n  kgeselv                                                       20000\n  kgespf                                                        20000\n  kgespo                                                        20000\n  kgetop                                                        20000\n  lmsagb1                                                       20000\n  lmsagbf                                                       20000\n  lmsapbn                                                       20000\n  lmsaprb                                                       20000\n  lmsapsb                                                       20000\n  lmsapsc                                                       20000\n  lmsapts                                                       20000\n  <span style=\"color: #ff0000;\">slmsrd<\/span>                                                        20000\n  kge_is_resig_mandatory_errframe                               40000\n  kgeresl                                                       40000\n  kgegec                                                        80000<\/code><\/pre>\n<p>12.1:<\/p>\n<pre><code>  kgecss                                                            1\n  kge_is_oserr                                                  10000\n  kge_is_resig_mandatory                                        10000\n  kgeade                                                        10000\n  kgebem                                                        10000\n  kgebse                                                        10000\n  kgefrp                                                        10000\n  kgegbc                                                        10000\n  kgekeep                                                       10000\n  kgepop                                                        10000\n  kgeselv                                                       10000\n  kgespf                                                        10000\n  kgespo                                                        10000\n  lmsagb1                                                       10000\n  lmsagbf                                                       10000\n  lmsapsb                                                       10000\n  lmsapsc                                                       10000\n  kge_is_resig_mandatory_errframe                               20000\n  kgeresl                                                       20000\n  kgetop                                                        20000\n  kgegec                                                        50000<\/code><\/pre>\n<p>Although the most obvious difference is twice as much calls for almost every function in 12.2 compared to 12.1, this is not the main reason for the severe performance decrease. As a matter of fact, an attentive reader might notice that the slmsrd calls are entirely missing in the 12.1 output.<\/p>\n<p>Again, I&#8217;ll use <a href=\"https:\/\/fritshoogland.wordpress.com\/2017\/10\/16\/oracle-c-functions-annotations\/\" target=\"_blank\" rel=\"noopener\">Frits&#8217; sf.sh<\/a> to figure out the purpose of the Oracle kernel function slmsrd:<\/p>\n<pre><code>.\/sf.sh slmsrd\nslmsrd -- system specific call<\/code><\/pre>\n<p>slms stands for &#8220;system specific call&#8221;.  And if &#8220;rd&#8221; stands for read, the question is, what is being read during exception handling? Knowing that every read operation results in a system call, we can truss the Oracle dedicated process to answer this question:<\/p>\n<pre><code>truss -f -tread -p 5522\n...\n5222:   read(9, \"\\f\\0 x05\\0\\0 P\\0 y05\\0\\0\".., 512)      = 512\n5522:   read(9, \"\\f\\0 x05\\0\\0 P\\0 y05\\0\\0\".., 512)      = 512\n5522:   read(9, \"\\f\\0 x05\\0\\0 P\\0 y05\\0\\0\".., 512)      = 512\n5522:   read(9, \"\\f\\0 x05\\0\\0 P\\0 y05\\0\\0\".., 512)      = 512\n5522:   read(9, \"\\f\\0 x05\\0\\0 P\\0 y05\\0\\0\".., 512)      = 512\n5522:   read(9, \"\\f\\0 x05\\0\\0 P\\0 y05\\0\\0\".., 512)      = 512\n5522:   read(9, \"\\f\\0 x05\\0\\0 P\\0 y05\\0\\0\".., 512)      = 512\n5522:   read(9, \"\\f\\0 x05\\0\\0 P\\0 y05\\0\\0\".., 512)      = 512\n5522:   read(9, \"\\f\\0 x05\\0\\0 P\\0 y05\\0\\0\".., 512)      = 512\n...<\/code><\/pre>\n<p>As you can see, not only are there thousands of reads on the file behind the descriptor 9, but also the same piece of information is read 20000 times for 10000 raised exceptions.<\/p>\n<p>Next, with pfiles we can find out which file is being read:<\/p>\n<pre><code>pfiles 5522\n5522:   oracleAVAR19 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))\n...\n   9: S_IFREG mode:0755 dev:286,65600 ino:4840002 uid:1000 gid:1000 size:1344512\n      O_RDONLY|O_LARGEFILE FD_CLOEXEC\n      ...\/rdbms\/mesg\/<span style=\"color: #ff0000;\">oraus.msb<\/span>\n...<\/code><\/pre>\n<p>Finally, the culprit is revealed. It&#8217;s <span style=\"color: #ff0000;\">oraus.msb<\/span> that contains all of the error messages. Not only is the error message text completely unnecessary in this case, but also Oracle database doesn&#8217;t bother with caching it.<\/p>\n<p>Just imagine a mess which might arise on a highly consolidated platform with applications frequently executing exception handling code and by doing so, heavily reading from oraus.msb at the same time. In addition, a session trace wouldn&#8217;t provide any clue that the the application is waiting on a completely irrelevant piece of information to be read from the filesystem.<\/p>\n<h1>Workarounds<\/h1>\n<p>Unfortunately, I couldn&#8217;t find any documents on Metalink about the problem. However, I&#8217;d like to suggest some possible mitigation countermeasures. Before doing that, it&#8217;s worth noting that the Oracle home in this case was placed on a separate ZFS file system which was not configured for caching data, i.e. primarycache was set to metadata (only). The reason for doing this is to avoid cache thrashing by loading Oracle homes into the cache during OS backups. Frankly, it&#8217;s the first time I&#8217;ve ever seen that the query elapsed time is depending on the Oracle home file access latency. Anyway, after setting primarycache to all, the code started to run fast in 12.2 as well.<\/p>\n<p>In case you don&#8217;t have a possibility of either caching Oracle home or putting it on an SSD drive, there are also couple of things you could do on the application side to reduce the number of message file reads.<\/p>\n<p>First of all, check if you can create conditions in the environment which would lead to less exceptions in total. For instance, if you insert a row into the table above, no_data_found won&#8217;t fire any more and the code will execute fast.<\/p>\n<p>Secondly, you could increase the exception handler&#8217;s scope if feasible. For example, you can take it out of the loop:<\/p>\n<pre><code>declare\n  l_c number ;\n  i number ;\nbegin\n  for i in 1..10000\n  loop\n    select a into l_c from t ;\n  end loop ;\nexception when no_data_found then\n  null ;\nend ;  \n\/<\/code><\/pre>\n<p>Lastly, you could replace the entire exception handler with an explicit cursor like this:<\/p>\n<pre><code>declare\n  l_c number ;\n  i number ;\n  cursor c is select a from t ;\nbegin\n  open c ;\n  for i in 1..10000\n  loop\n    fetch c into l_c ;\n    <span style=\"color: #ff0000;\">if c%notfound then <\/span>\n\t  null;\n\tend if ;\n  end loop ;\nend ;  \n\/<\/code><\/pre>\n<h1>Summary<\/h1>\n<p>In conclusion, a performance issue has been introduced in Oracle 12.2. The message file is repeatedly being read by dedicated processes, even in cases when no error has to be thrown. In particular, applications which frequently raise PL\/SQL exceptions could be affected. To make the problem worse, the trace file doesn&#8217;t provide any clues to the root-cause. Currently, there doesn&#8217;t seem to be any information on Metalink about it. Nevertheless, I highlighted different possibilities of mitigating the issue.<\/p>\n<h1>Update February 17, 2022<\/h1>\n<p>The problem is fixed in recent Oracle releases. I tested it on 19.14 and 21.4 PDB. There&#8217;s only one read per execution:<\/p>\n<pre><code>sudo \/bin\/strace  -p 3924265 -c\n\n% time     seconds  usecs\/call     calls    errors syscall\n------ ----------- ----------- --------- --------- ----------------\n 83.81    0.000088           0       284           getrusage\n 14.29    0.000015          15         1           read\n  1.90    0.000002           2         1           write\n------ ----------- ----------- --------- --------- ----------------\n100.00    0.000105           0       286           total<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Potentially a huge performance issue with PL\/SQL exception handling in 12.2  <a href=\"https:\/\/nenadnoveljic.com\/blog\/pl-sql-exception-handling-performance-degradation-oracle-12-2\/\" class=\"more-link\">Continue Reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[22,5,52],"tags":[],"class_list":["post-1699","post","type-post","status-publish","format-standard","hentry","category-12-2","category-oracle","category-pl-sql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>PL\/SQL Exception Handling Performance Degradation in Oracle 12.2 - All-round Database Topics<\/title>\n<meta name=\"description\" content=\"Potentially a huge performance issue with PL\/SQL exception handling in 12.2\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/nenadnoveljic.com\/blog\/pl-sql-exception-handling-performance-degradation-oracle-12-2\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PL\/SQL Exception Handling Performance Degradation in Oracle 12.2 - All-round Database Topics\" \/>\n<meta property=\"og:description\" content=\"Potentially a huge performance issue with PL\/SQL exception handling in 12.2\" \/>\n<meta property=\"og:url\" content=\"https:\/\/nenadnoveljic.com\/blog\/pl-sql-exception-handling-performance-degradation-oracle-12-2\/\" \/>\n<meta property=\"og:site_name\" content=\"All-round Database Topics\" \/>\n<meta property=\"article:published_time\" content=\"2018-02-11T16:05:07+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-02-17T15:36:22+00:00\" \/>\n<meta name=\"author\" content=\"Nenad Noveljic\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@NenadNoveljic\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nenad Noveljic\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/pl-sql-exception-handling-performance-degradation-oracle-12-2\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/pl-sql-exception-handling-performance-degradation-oracle-12-2\\\/\"},\"author\":{\"name\":\"Nenad Noveljic\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/#\\\/schema\\\/person\\\/51458d9dd86dbbdd19f5add451d44efa\"},\"headline\":\"PL\\\/SQL Exception Handling Performance Degradation in Oracle 12.2\",\"datePublished\":\"2018-02-11T16:05:07+00:00\",\"dateModified\":\"2022-02-17T15:36:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/pl-sql-exception-handling-performance-degradation-oracle-12-2\\\/\"},\"wordCount\":896,\"commentCount\":4,\"articleSection\":[\"12.2\",\"Oracle\",\"PL\\\/SQL\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/pl-sql-exception-handling-performance-degradation-oracle-12-2\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/pl-sql-exception-handling-performance-degradation-oracle-12-2\\\/\",\"url\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/pl-sql-exception-handling-performance-degradation-oracle-12-2\\\/\",\"name\":\"PL\\\/SQL Exception Handling Performance Degradation in Oracle 12.2 - All-round Database Topics\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/#website\"},\"datePublished\":\"2018-02-11T16:05:07+00:00\",\"dateModified\":\"2022-02-17T15:36:22+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/#\\\/schema\\\/person\\\/51458d9dd86dbbdd19f5add451d44efa\"},\"description\":\"Potentially a huge performance issue with PL\\\/SQL exception handling in 12.2\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/pl-sql-exception-handling-performance-degradation-oracle-12-2\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/pl-sql-exception-handling-performance-degradation-oracle-12-2\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/pl-sql-exception-handling-performance-degradation-oracle-12-2\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PL\\\/SQL Exception Handling Performance Degradation in Oracle 12.2\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/\",\"name\":\"All-round Database Topics\",\"description\":\"Nenad Noveljic\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/#\\\/schema\\\/person\\\/51458d9dd86dbbdd19f5add451d44efa\",\"name\":\"Nenad Noveljic\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a97b796613ea48ec8a7b79c8ffe1c685dcffc920c68121f6238d5caab5070670?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a97b796613ea48ec8a7b79c8ffe1c685dcffc920c68121f6238d5caab5070670?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a97b796613ea48ec8a7b79c8ffe1c685dcffc920c68121f6238d5caab5070670?s=96&d=mm&r=g\",\"caption\":\"Nenad Noveljic\"},\"sameAs\":[\"nenad-noveljic-9b746a6\",\"https:\\\/\\\/x.com\\\/NenadNoveljic\"],\"url\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/author\\\/nenad\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"PL\/SQL Exception Handling Performance Degradation in Oracle 12.2 - All-round Database Topics","description":"Potentially a huge performance issue with PL\/SQL exception handling in 12.2","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/nenadnoveljic.com\/blog\/pl-sql-exception-handling-performance-degradation-oracle-12-2\/","og_locale":"en_US","og_type":"article","og_title":"PL\/SQL Exception Handling Performance Degradation in Oracle 12.2 - All-round Database Topics","og_description":"Potentially a huge performance issue with PL\/SQL exception handling in 12.2","og_url":"https:\/\/nenadnoveljic.com\/blog\/pl-sql-exception-handling-performance-degradation-oracle-12-2\/","og_site_name":"All-round Database Topics","article_published_time":"2018-02-11T16:05:07+00:00","article_modified_time":"2022-02-17T15:36:22+00:00","author":"Nenad Noveljic","twitter_card":"summary_large_image","twitter_creator":"@NenadNoveljic","twitter_misc":{"Written by":"Nenad Noveljic","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/nenadnoveljic.com\/blog\/pl-sql-exception-handling-performance-degradation-oracle-12-2\/#article","isPartOf":{"@id":"https:\/\/nenadnoveljic.com\/blog\/pl-sql-exception-handling-performance-degradation-oracle-12-2\/"},"author":{"name":"Nenad Noveljic","@id":"https:\/\/nenadnoveljic.com\/blog\/#\/schema\/person\/51458d9dd86dbbdd19f5add451d44efa"},"headline":"PL\/SQL Exception Handling Performance Degradation in Oracle 12.2","datePublished":"2018-02-11T16:05:07+00:00","dateModified":"2022-02-17T15:36:22+00:00","mainEntityOfPage":{"@id":"https:\/\/nenadnoveljic.com\/blog\/pl-sql-exception-handling-performance-degradation-oracle-12-2\/"},"wordCount":896,"commentCount":4,"articleSection":["12.2","Oracle","PL\/SQL"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/nenadnoveljic.com\/blog\/pl-sql-exception-handling-performance-degradation-oracle-12-2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/nenadnoveljic.com\/blog\/pl-sql-exception-handling-performance-degradation-oracle-12-2\/","url":"https:\/\/nenadnoveljic.com\/blog\/pl-sql-exception-handling-performance-degradation-oracle-12-2\/","name":"PL\/SQL Exception Handling Performance Degradation in Oracle 12.2 - All-round Database Topics","isPartOf":{"@id":"https:\/\/nenadnoveljic.com\/blog\/#website"},"datePublished":"2018-02-11T16:05:07+00:00","dateModified":"2022-02-17T15:36:22+00:00","author":{"@id":"https:\/\/nenadnoveljic.com\/blog\/#\/schema\/person\/51458d9dd86dbbdd19f5add451d44efa"},"description":"Potentially a huge performance issue with PL\/SQL exception handling in 12.2","breadcrumb":{"@id":"https:\/\/nenadnoveljic.com\/blog\/pl-sql-exception-handling-performance-degradation-oracle-12-2\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/nenadnoveljic.com\/blog\/pl-sql-exception-handling-performance-degradation-oracle-12-2\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/nenadnoveljic.com\/blog\/pl-sql-exception-handling-performance-degradation-oracle-12-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/nenadnoveljic.com\/blog\/"},{"@type":"ListItem","position":2,"name":"PL\/SQL Exception Handling Performance Degradation in Oracle 12.2"}]},{"@type":"WebSite","@id":"https:\/\/nenadnoveljic.com\/blog\/#website","url":"https:\/\/nenadnoveljic.com\/blog\/","name":"All-round Database Topics","description":"Nenad Noveljic","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/nenadnoveljic.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/nenadnoveljic.com\/blog\/#\/schema\/person\/51458d9dd86dbbdd19f5add451d44efa","name":"Nenad Noveljic","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/a97b796613ea48ec8a7b79c8ffe1c685dcffc920c68121f6238d5caab5070670?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/a97b796613ea48ec8a7b79c8ffe1c685dcffc920c68121f6238d5caab5070670?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a97b796613ea48ec8a7b79c8ffe1c685dcffc920c68121f6238d5caab5070670?s=96&d=mm&r=g","caption":"Nenad Noveljic"},"sameAs":["nenad-noveljic-9b746a6","https:\/\/x.com\/NenadNoveljic"],"url":"https:\/\/nenadnoveljic.com\/blog\/author\/nenad\/"}]}},"_links":{"self":[{"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/posts\/1699","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/comments?post=1699"}],"version-history":[{"count":1,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/posts\/1699\/revisions"}],"predecessor-version":[{"id":4170,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/posts\/1699\/revisions\/4170"}],"wp:attachment":[{"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/media?parent=1699"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/categories?post=1699"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/tags?post=1699"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}