SQL TUNING di una istruzione sql

 Il tuning task su una istruzione sql si chiama anche "SQL Tuning Advisor (STA)" ed  analizza solo una singola sql statement e fornisce raccomandazioni come migliorare le performance.

************************************
1) Creare il tuning task
************************************

SET SERVEROUTPUT ON
DECLARE
l_sql_tune_task_id VARCHAR2(100);
BEGIN
l_sql_tune_task_id := DBMS_SQLTUNE.create_tuning_task (
begin_snap => 8901,
end_snap => 8902,
sql_id => 'af9kfdyxuj6aj',
scope => DBMS_SQLTUNE.scope_comprehensive,
time_limit => 1200,
task_name => 'MY_tuning_af9kfdyxuj6aj',
description => 'Tuning per lo statement af9kfdyxuj6aj');
DBMS_OUTPUT.put_line('l_sql_tune_task_id: ' || l_sql_tune_task_id);
END;
/

Usare "snap_id" degli AWR che puoi estarre lanciando lo script awrrpt.sql negli snapid corrispondenti al lasso di tempo in cui quella istruzione è stato eseguita.

Per estrarre gli snap_id
fai 
SQL> exec dbms_workload_repository.create_snapshot;

SQL> lanciare la query da analizzare 

e rifai

SQL> exec dbms_workload_repository.create_snapshot;

e poi devi lanciare awrrpt e vedere gli snap_id.

cd $ORACLE_HOME/rdbms/admin
SQL> sqlplus system/password@$ORACLE_SID @awrrpt.sql


Ricavare anche sql_id dal AWR prodotto prima
oppure ad esempio dalla query 
SQL> select *--sql_id,sql_fulltext
from v$sql where sql_text like '% "GAPA_RESPINTIKO"%';


In "task_name" metti un nome a tuo piacimento tipo MY_tuning_af9kfdyxuj6aj

Dalla seguente query verifichiamo che il task e' stato creato ed e' in stato INITIAL
SQL> SELECT task_name, status 
FROM dba_advisor_log 
where task_name='MY_tuning_af9kfdyxuj6aj';

********************************
2) Eseguire il tuning task
********************************

EXEC DBMS_SQLTUNE.execute_tuning_task(task_name => 'MY_tuning_af9kfdyxuj6aj');

Dalla seguente query verifichiamo lo stato del task.

SQL> SELECT task_name, status 
FROM dba_advisor_log 
where task_name='MY_tuning_af9kfdyxuj6aj';


*******************************
3) Creare il Report
*******************************

Quando ti dà status COMPLETED puoi creare il report contenente le raccomandazioni.

SET LONG 100000000;
SET PAGESIZE 1000
SET LINESIZE 200
SET PAGESIZE 24
SELECT DBMS_SQLTUNE.report_tuning_task('MY_tuning_af9kfdyxuj6aj') AS recommendations FROM dual;


Il file prodotto ha l'indicazione dei valori della BIND VARIABLE.

GENERAL INFORMATION SECTION
---------------------------------------------------------------------
Tuning Task Name   : PROS_tuning_96qmpqqjaf2d4
Tuning Task Owner  : SYS
Workload Type      : Single SQL Statement
Scope              : COMPREHENSIVE
Time Limit(seconds): 1200
Completion Status  : COMPLETED
Started at         : 06/18/2021 14:19:50
Completed at       : 06/18/2021 14:20:32

---------------------------------------------------------------------
Schema Name: PROLLO
SQL ID     : 96qmpqqjaf2d4
SQL Text   : INSERT into UPINT_PRO  (utente, prog_doc, prog_movi) (  
                 SELECT 162400492756016,   PROG_DOC, PROG_MOVI   FROM
             UP0_MOVI  WHERE DATA_MOVI >= TRUNC(DECODE(TO_CHAR(SYSDATE - 3,
             'D'), '7', SYSDATE - 3 - 1, '1', SYSDATE - 3 - 2, SYSDATE - 3)).......................
................................

Bind Variables :
 1 -  (VARCHAR2(32)):MIKE
 2 -  (VARCHAR2(32)):FRANK
 3 -  (VARCHAR2(32)):287455
 4 -  (VARCHAR2(32)):287455
......................

Post popolari in questo blog

Create e Drop Pluggable Database

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione