Ez az "oracle" hirdetesi felulet pillanatnyilag INGYEN kiado! Miert? Mert ha a google.hu-ba beirod hogy "oracle dba" eleg elokelo helyen vagyok! altalaban 1. :P kuldj mailt ide: orclblog [at] gmail.com

Naptár

május 2024
Hét Ked Sze Csü Pén Szo Vas
<<  < Archív
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

Friss topikok

2011.09.02. 13:47 tbago

DBMS_SQLTUNE használata SELECT optimalizációhoz / Using DBMS_SQLTUNE for optimizing SELECT statement

Van egy select, ami sehogy nem akart leftuni, egy tizenmilliós táblán szalad végig, plusz néhány kisebb lookup táblából vesz még adatokat. Tettem indexeket a join mezőkre, de az sem segített. Hívjuk segítségül a tuning advisort!

There is a select that never happened to finish running. It scans through a 10M record table, and uses some other lookup tables to fetch additional data. I have created indexes on the join fields, but they didn't help. Let's call the tuning advisor.

DECLARE
 ret_val VARCHAR2(4000);
 SqlStr  CLOB := 'create TABLE bt_tesztusp2 AS (
SELECT ... <select statement goes here>  )';

BEGIN
  ret_val := dbms_sqltune.create_tuning_task(SqlStr);
  dbms_output.put_line(ret_val);
END;

Megvan az tuning task / we have the tuning task:
TASK_25827

Futtassuk le / let's run it:

SQL> exec dbms_sqltune.execute_tuning_task('TASK_25827');

PL/SQL procedure successfully completed
Miután lefutott, megnézhetjük az eredményét, ami egy CLOB-ban látható / After it has finished running, we can check the results coming in a CLOB:

SELECT dbms_sqltune.report_tuning_task('TASK_25827') FROM dual;

GENERAL INFORMATION SECTION
-------------------------------------------------------------------------------
Tuning Task Name                  : TASK_25827
Tuning Task Owner                 : BAGOT
Scope                             : COMPREHENSIVE
Time Limit(seconds)               : 1800
Completion Status                 : COMPLETED
Started at                        : 09/02/2011 11:40:13
Completed at                      : 09/02/2011 12:08:02
Number of SQL Profile Findings    : 1

-------------------------------------------------------------------------------
Schema Name: BAGOT
SQL ID     : bgv2s20aqq8b2
SQL Text   : create TABLE bt_tesztusp2 AS (
             SELECT <my select statement>
               )

-------------------------------------------------------------------------------
FINDINGS SECTION (1 finding)
-------------------------------------------------------------------------------

1- SQL Profile Finding (see explain plans section below)
--------------------------------------------------------
  A potentially better execution plan was found for this statement.

  Recommendation (estimated benefit: 98,51%)
  ------------------------------------------
  - Consider accepting the recommended SQL profile.
    execute dbms_sqltune.accept_sql_profile(task_name => 'TASK_25827',
            replace => TRUE);


-------------------------------------------------------------------------------
EXPLAIN PLANS SECTION
-------------------------------------------------------------------------------

1- Original With Adjusted Cost
------------------------------
Plan hash value: 2282809337

---------------------------------------------------------------------------------------------------------------
| Id  | Operation                           | Name            | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------------------------
|   0 | CREATE TABLE STATEMENT              |                 | 96528 |    38M|       |   790K  (1)| 01:11:30 |
|   1 |  LOAD AS SELECT                     | BT_TESZTUSP2    |       |       |       |            |          |
|   2 |   TABLE ACCESS BY INDEX ROWID       | L_1INST_MUSP001 |     1 |    28 |       |     2   (0)| 00:00:01 |
|   3 |    NESTED LOOPS                     |                 | 96528 |    38M|       |   790K  (1)| 01:11:29 |
|*  4 |     HASH JOIN                       |                 | 73151 |    27M|    21M|   668K  (1)| 01:00:27 |
|   5 |      TABLE ACCESS BY INDEX ROWID    | L_1INST_MEPF00  |     1 |    75 |       |     2   (0)| 00:00:01 |
|   6 |       NESTED LOOPS                  |                 | 73541 |    20M|       |   668K  (1)| 01:00:25 |
|   7 |        NESTED LOOPS                 |                 | 73367 |    15M|       |   594K  (1)| 00:53:46 |
|   8 |         NESTED LOOPS                |                 |   133K|    18M|       |   460K  (1)| 00:41:42 |
|*  9 |          TABLE ACCESS BY INDEX ROWID| L_1INST_PCPF00  |   153K|    13M|       |    52   (2)| 00:00:01 |
|* 10 |           INDEX RANGE SCAN          | PCPF00_IX1      |  1386 |       |       |     4   (0)| 00:00:01 |
|  11 |          TABLE ACCESS BY INDEX ROWID| L_1INST_SOPF00  |     1 |    53 |       |     3   (0)| 00:00:01 |
|* 12 |           INDEX RANGE SCAN          | SOPF00_IX1      |     1 |       |       |     2   (0)| 00:00:01 |
|  13 |         TABLE ACCESS BY INDEX ROWID | L_1INST_SVPF00  |     1 |    81 |       |     2   (0)| 00:00:01 |
|* 14 |          INDEX RANGE SCAN           | SVPF00_IX1      |     1 |       |       |     1   (0)| 00:00:01 |
|* 15 |        INDEX RANGE SCAN             | MEPF00_IX1      |     1 |       |       |     1   (0)| 00:00:01 |
|* 16 |      TABLE ACCESS FULL              | L_1INST_MUSP00  | 15643 |  1405K|       |     7  (43)| 00:00:01 |
|* 17 |     INDEX RANGE SCAN                | MUSP001_IX1     |     1 |       |       |     1   (0)| 00:00:01 |
---------------------------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   4 - access <masked>
   9 - filter <masked>
  10 - access <masked>
  12 - access <masked>
  14 - access <masked>
  15 - access <masked>
  16 - filter <masked>
  17 - access <masked>

2- Using SQL Profile
--------------------
Plan hash value: 1624737859

----------------------------------------------------------------------------------------------------------
| Id  | Operation                      | Name            | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------------------
|   0 | CREATE TABLE STATEMENT         |                 | 96528 |    38M|       | 11737  (14)| 00:01:04 |
|   1 |  LOAD AS SELECT                | BT_TESZTUSP2    |       |       |       |            |          |
|*  2 |   HASH JOIN                    |                 | 96528 |    38M|       | 11490  (14)| 00:01:03 |
|*  3 |    TABLE ACCESS FULL           | L_1INST_MUSP001 | 20648 |   564K|       |     5  (60)| 00:00:01 |
|*  4 |    HASH JOIN                   |                 | 73151 |    27M|       | 11482  (14)| 00:01:03 |
|   5 |     TABLE ACCESS BY INDEX ROWID| L_1INST_MEPF00  | 14825 |  1085K|       |     4   (0)| 00:00:01 |
|*  6 |      INDEX RANGE SCAN          | MEPF00_IX1      |    60 |       |       |     2   (0)| 00:00:01 |
|*  7 |     HASH JOIN                  |                 | 72978 |    21M|       | 11476  (14)| 00:01:03 |
|*  8 |      TABLE ACCESS FULL         | L_1INST_MUSP00  | 15643 |  1405K|       |     7  (43)| 00:00:01 |
|*  9 |      HASH JOIN                 |                 | 73367 |    15M|       | 11467  (14)| 00:01:03 |
|* 10 |       TABLE ACCESS FULL        | L_1INST_SVPF00  |  1937 |   153K|       |     2   (0)| 00:00:01 |
|* 11 |       HASH JOIN                |                 |   133K|    18M|    14M| 11462  (14)| 00:01:03 |
|* 12 |        TABLE ACCESS FULL       | L_1INST_PCPF00  |   153K|    13M|       |    50  (76)| 00:00:01 |
|* 13 |        TABLE ACCESS FULL       | L_1INST_SOPF00  |    10M|   534M|       |  2419  (45)| 00:00:14 |
----------------------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   2 - access <masked>
   3 - filter <masked>
   4 - access <masked>
   6 - access <masked>
   7 - access <masked>
   8 - filter <masked>
   9 - access <masked>
  10 - filter <masked>
  11 - access <masked>
  12 - filter <masked>
  13 - filter <masked>

-------------------------------------------------------------------------------

OK, fogadjuk el a javaslatot / Let's accept the recommendation:

SQL> execute dbms_sqltune.accept_sql_profile(task_name => 'TASK_25827', replace => TRUE);

PL/SQL procedure successfully completed

Az explain plan valóban frissült, a SELECT szövegének betűre egyeznie kell a tuning advisornak paraméterként megadottal, és végül 41 perc alatt lefutott. Ez az adott helyzetben már elfogadható / The explain plan really has been refreshed, the text of the SELECT statement has to be exactly the same as the one given to the tuning advisor as a parameter, and eventually it has completed in 41 minutes. This is acceptable in this situation.

Takarítsunk / let's do a clean-up:

SQL> exec dbms_sqltune.drop_tuning_task('TASK_25827');
 
PL/SQL procedure successfully completed

Szólj hozzá!


Ez az "oracle" hirdetesi felulet pillanatnyilag INGYEN kiado :)Miert? Mert ha a google.hu-ba beirod hogy "oracle dba" eleg elokelo helyen vagyok! altalaban 1. :P kuldj mailt ide: orclblog [at] gmail.com

A bejegyzés trackback címe:

https://oracle.blog.hu/api/trackback/id/tr793197711

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása