{"id":5862,"date":"2019-07-10T21:51:53","date_gmt":"2019-07-11T03:51:53","guid":{"rendered":"http:\/\/www.designandexecute.com\/designs\/?p=5862"},"modified":"2022-09-14T16:02:45","modified_gmt":"2022-09-14T22:02:45","slug":"13-oracle-queries-that-can-help-accelerate-report-run-times-from-3-hours-to-3-seconds","status":"publish","type":"post","link":"https:\/\/www.designandexecute.com\/designs\/13-oracle-queries-that-can-help-accelerate-report-run-times-from-3-hours-to-3-seconds\/","title":{"rendered":"14 Oracle Hunting Queries that ever Developer should know to Root Out Performance Issues"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">Summary of List of Oracle queries that every Analytics Developer should know.<\/h3>\n\n\n\n<p><strong>Current Login Sessions<br>Where are my logins coming from    <br>Currently executing SQL    <br>Session Resource Consumption<br>Statements consuming the most resources<br>Statements performing full table scans<br>Displaying an execution plan<br>Index Usage<br>Hard Parsing Statistics<br>Queries Using Literal Values<br>Table Information<br>Column Information<br>Index Information<br>Stale Stats or Missing Stats<\/strong><\/p>\n\n\n\n<p>Contributors: David Berry, David Stoll.<\/p>\n\n\n\n<p>Size matters and these hunting queries can provide insight to getting light weight and fast data sets when your SQL performance matters.  It is detailed work but it is worth it to Pay the PRICE for PERFORMANCE<\/p>\n\n\n\n<p class=\"has-medium-font-size\">The hardest thing about performance is knowing what you need to measure, that must be tied back to your mission statement &#8212; Peter Drucker<\/p>\n\n\n\n<p>&#8212; Current Login Sessions<br>\nSELECT <br>\n        username, osuser, program, module,<br>\n        machine, terminal, process, <br>\n        to_char(logon_time, &#8216;YYYY-MM-DD HH24:MI:SS&#8217;) <br>\n            AS logon_time,<br>\n        status,<br>\n        CASE status<br>\n            WHEN &#8216;ACTIVE&#8217; THEN NULL<br>\n            ELSE last_call_et<br>\n        END as idle_time<br>\n    FROM v$session<br>\n    WHERE type = &#8216;USER&#8217;;<\/p>\n\n\n\n<p>&#8212; Where are my logins coming from    <br>\nSELECT <br>\n        username, osuser, program, module,<br>\n        machine, process, <br>\n        count(1) as login_count<br>\n    FROM v$session<br>\n    WHERE type = &#8216;USER&#8217;<br>\n    GROUP BY <br>\n        username, osuser, program, module,<br>\n        machine, process;<\/p>\n\n\n\n<p>&#8212; Currently executing SQL    <br>\nSELECT<br>\n        s.sid, s.username, s.osuser, <br>\n        s.machine, s.process, s.program, s.module, <br>\n        q.sql_text, q.optimizer_cost, <br>\n        s.blocking_session, bs.username as blocking_user, <br>\n        bs.machine as blocking_machine, bs.module as blocking_module,<br>\n        bq.sql_text AS blocking_sql, s.event AS wait_event,<br>\n        q.sql_fulltext<br>\n    FROM v$session s<br>\n    INNER JOIN v$sql q<br>\n        ON s.sql_id = q.sql_id<br>\n    LEFT OUTER JOIN v$session bs  &#8212; blocking sessions<br>\n        ON s.blocking_session = bs.sid<br>\n    LEFT OUTER JOIN v$sql bq  &#8212; blocking queries<br>\n        ON bs.sql_id = bq.sql_id<br>\n    WHERE s.type = &#8216;USER&#8217;;<\/p>\n\n\n\n<p>&#8212; Session Resource Consumption<br>\nSELECT <br>\n        s.sid, s.username, s.osuser, <br>\n        to_char(sm.begin_time, &#8216;HH24:MI:ss&#8217;) AS interval_start,<br>\n        to_char(sm.end_time, &#8216;HH24:MI:ss&#8217;) AS interval_end,<br>\n        s.machine, s.process, s.program, s.module, <br>\n        sm.cpu, sm.pga_memory, sm.logical_reads, sm.physical_reads, <br>\n        sm.hard_parses, sm.soft_parses,<br>\n        s.logon_time        <br>\n    FROM v$session s<br>\n    INNER JOIN v$sessmetric sm<br>\n        ON sm.session_id = s.sid<br>\n    WHERE s.type = &#8216;USER&#8217;<br>\n    ORDER BY sm.cpu DESC;<\/p>\n\n\n\n<p>&#8212; Statements consuming the most resources<br>\nSELECT * FROM<br>\n(<br>\n    SELECT sql_id, sql_text, executions, <br>\n        elapsed_time, cpu_time, buffer_gets, disk_reads,<br>\n        elapsed_time \/ executions AS avg_elapsed_time,<br>\n        cpu_time \/ executions AS avg_cpu_time,<br>\n        buffer_gets \/ executions as avg_buffer_gets,<br>\n        disk_reads \/ executions as avg_disk_reads<br>\n    FROM v$sqlstats<br>\n    WHERE executions &gt; 0<br>\n    ORDER BY elapsed_time \/ executions DESC<br>\n)<br>\nWHERE rownum &lt;= 25;<\/p>\n\n\n\n<p>&#8212; Statements performing full table scans<br>\nSELECT <br>\n        pl.object_owner, pl.object_name, <br>\n        pl.sql_id, q.sql_text, q.module, <br>\n        pl.operation, pl.options, pl.cost, pl.cpu_cost, pl.io_cost, <br>\n        q.executions          <br>\n    FROM v$sql_plan pl<br>\n    INNER JOIN v$sql q<br>\n        ON pl.sql_id = q.sql_id   <br>\n    WHERE <br>\n        (pl.operation = &#8216;TABLE ACCESS&#8217; AND pl.options = &#8216;FULL&#8217;)<br>\n        OR (pl.operation = &#8216;INDEX&#8217; AND pl.options = &#8216;FAST FULL SCAN&#8217;)<br>\n        OR (pl.operation = &#8216;INDEX&#8217; AND pl.options = &#8216;FULL SCAN (MIN\/MAX)&#8217;)<br>\n        OR (pl.operation = &#8216;INDEX&#8217; AND pl.options = &#8216;FULL SCAN&#8217;)<br>\n    ORDER BY pl.object_owner, pl.object_name;<\/p>\n\n\n\n<p>&#8212; Displaying an execution plan<br>\nSELECT plan_table_output <br>\n    FROM<br>\n    table(dbms_xplan.display_cursor(\u2018&lt;&gt;&#8217;,<br>\n        null,&#8217;typical&#8217;));<\/p>\n\n\n\n<p>&#8212; Index Usage<br>\nWITH index_usage AS<br>\n(<br>\n    SELECT pl.sql_id, pl.object_owner, pl.object_name, pl.operation, <br>\n            pl.options, count(1) as use_count<br>\n        FROM v$sql_plan pl<br>\n        WHERE pl.operation = &#8216;INDEX&#8217;<br>\n        GROUP BY pl.sql_id, pl.object_owner, pl.object_name, pl.operation, <br>\n            pl.options<br>\n)<br>\nSELECT<br>\n        ix.table_owner, ix.table_name, ix.index_name, iu.operation,<br>\n        iu.options, ss.sql_text, ss.executions<br>\n    FROM all_indexes ix<br>\n    LEFT OUTER JOIN index_usage iu<br>\n             ON ix.owner = iu.object_owner<br>\n             AND ix.index_name = iu.object_name   <br>\n    LEFT OUTER JOIN v$sqlstats ss<br>\n        ON iu.sql_id = ss.sql_id<br>\n    WHERE ix.owner = &#8216;&lt;&gt;&#8217;<br>\n    ORDER BY ix.table_name, ix.index_name;<\/p>\n\n\n\n<p>&#8212; Hard Parsing Statistics<br>\nSELECT sn.statistic#, sn.name, s.value<br>\n    FROM v$sysstat s<br>\n    INNER JOIN v$statname sn<br>\n        ON s.statistic# = sn.statistic#<br>\n    WHERE sn.name in (<br>\n        &#8216;parse time cpu&#8217;, <br>\n        &#8216;parse count (hard)&#8217;)<\/p>\n\n\n\n<p>&#8212; Queries Using Literal Values<br> WITH statements AS<br> (<br>     SELECT force_matching_signature,<br>         count(1) OVER (PARTITION BY force_matching_signature) AS statement_count,<br>         row_number() OVER (PARTITION BY force_matching_signature <br>             ORDER BY last_load_time DESC) AS row_index,<br>         parsing_schema_name,<br>         sql_text<br>     FROM v$sql<br>     WHERE force_matching_signature &gt; 0<br>         AND force_matching_signature &lt;&gt; exact_matching_signature<br> )<br> SELECT <br>         force_matching_signature, parsing_schema_name, <br>         sql_text, statement_count<br>     FROM statements<br>     WHERE row_index = 1<br>         AND statement_count &gt;= 5;<\/p>\n\n\n\n<p>&#8212; Table Information<br>\nSELECT <br>\n        t.owner, t.table_name, t.num_rows, t.avg_row_len,<br>\n        t.blocks AS blocks_below_hwm, t.empty_blocks, <br>\n        s.blocks AS segment_blocks, <br>\n        s.bytes \/ 1048576 AS size_in_mb, <br>\n        to_char(t.last_analyzed, &#8216;YYYY-MM-DD HH24:MI&#8217;) <br>\n            AS last_analyzed<br>\n    FROM all_tables t<br>\n    INNER JOIN dba_segments s<br>\n        ON t.owner = s.OWNER AND t.table_name = s.segment_name<br>\n    WHERE t.owner = \u2018&lt;&gt;&#8217;;<\/p>\n\n\n\n<p>&#8212; Column Information<br>\nSELECT column_name, avg_col_len, <br>\n        num_distinct, num_nulls, <br>\n    FROM all_tab_columns <br>\n    WHERE table_name = &#8216;&lt;&gt;&#8217;<br>\n    ORDER BY column_id DESC<\/p>\n\n\n\n<p>&#8212; Index Information<br> SELECT ix.owner, ix.index_name, ix.table_name, <br>         ix.distinct_keys, ix.leaf_blocks, <br>         s.blocks AS segment_blocks, <br>         s.bytes \/ 1048576 AS size_in_mb, <br>         to_char(ix.last_analyzed, &#8216;YYYY-MM-DD HH24:MI&#8217;) <br>             AS last_analyzed<br>     FROM all_indexes ix<br>     INNER JOIN dba_segments s<br>         ON ix.owner = s.OWNER <br>             AND ix.index_name = s.segment_name<br>     ORDER BY ix.table_name, ix.index_name<\/p>\n\n\n\n<p> &#8212; if statistics are stale (haven&#8217;t been refreshed in a long time). <br>SELECT table_name, sysdate, last_analyzed, sysdate &#8211; last_analyzed <br>FROM sys.all_tables <br>ORDER by 4 desc;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Summary of List of Oracle queries that every Analytics Developer should know. Current Login SessionsWhere are my logins coming from Currently executing SQL Session Resource ConsumptionStatements consuming the most resourcesStatements performing full table scansDisplaying an execution planIndex UsageHard Parsing StatisticsQueries Using Literal ValuesTable InformationColumn InformationIndex InformationStale Stats or Missing Stats Contributors: David Berry, David Stoll. [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":5865,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[32,31],"tags":[],"class_list":["post-5862","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bi-dashboards-analytics","category-bi-data-warehouse"],"jetpack_featured_media_url":"https:\/\/www.designandexecute.com\/designs\/wp-content\/uploads\/2019\/07\/cheetah-hunting-springbok-Etosha.jpg","_links":{"self":[{"href":"https:\/\/www.designandexecute.com\/designs\/wp-json\/wp\/v2\/posts\/5862","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.designandexecute.com\/designs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.designandexecute.com\/designs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.designandexecute.com\/designs\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.designandexecute.com\/designs\/wp-json\/wp\/v2\/comments?post=5862"}],"version-history":[{"count":5,"href":"https:\/\/www.designandexecute.com\/designs\/wp-json\/wp\/v2\/posts\/5862\/revisions"}],"predecessor-version":[{"id":15704,"href":"https:\/\/www.designandexecute.com\/designs\/wp-json\/wp\/v2\/posts\/5862\/revisions\/15704"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.designandexecute.com\/designs\/wp-json\/wp\/v2\/media\/5865"}],"wp:attachment":[{"href":"https:\/\/www.designandexecute.com\/designs\/wp-json\/wp\/v2\/media?parent=5862"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.designandexecute.com\/designs\/wp-json\/wp\/v2\/categories?post=5862"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.designandexecute.com\/designs\/wp-json\/wp\/v2\/tags?post=5862"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}