Comment faire pour exécuter SQL Tuning conseiller d'Oracle 12c

Oracle 12c propose un utilitaire utile appelé SQL Tuning Advisor. Vous pouvez utiliser cet outil intégré pour fournir des suggestions ou des recommandations au sujet de certaines instructions SQL. Bien qu'il ne peut pas donner des conseils toujours parfait, comme tout le reste, l'avoir dans votre boîte à outils de techniques d'optimisation est bénéfique.

  1. Utilisez PL / SQL et le paquet DBMS_SQL_TUNE interne pour créer une tâche de tuning. Tapez ceci:

    DECLAREl_sqlVARCHAR2 (500) -l_sql_tune_task_id VARCHAR2 (100) -BEGINl_sql: = 'prenom SELECT, last_name, department_name' || 'FROM emp JOIN départements utilisez (department_id)' || 'WHERE last_name =' '' de 'Hopkins - l_sql_tune_task_id: = DBMS_SQLTUNE.create_tuning_task (sql_text => l_sql, user_name => 'HR', scope => DBMS_SQLTUNE.scope_comprehensive, = time_limit> 60, = nom_de_la_tâche> 'emp_dept_tuning_task », description =>' tâche de Tuning pour un PGE à DÉPARTEMENT requête de jointure. ) -DBMS_OUTPUT.put_line ('l_sql_tune_task_id:' || l_sql_tune_task_id) -END- /

    Vous devriez voir ce qui suit:

    Procédure PL / SQL terminée avec succès.

    Dans la commande précédente, notez le time_limit de 60. Cela limite le temps de traitement de 60 secondes. Vous ne pouvez pas toujours envie de courir quelque chose comme ça pendant de longues périodes dans votre base de données, car il encourt la surcharge du système.

  2. Exécuter le conseiller d'accord avec votre tâche en tapant:

    EXEC DBMS_SQLTUNE.execute_tuning_task (nom_de_la_tâche => 'emp_dept_tuning_task') -

    En raison de la limite de 60 secondes prévues dans la création de la tâche, cette étape peut prendre jusqu'à 60 secondes pour terminer. Pendant ce temps, l'invite ne reviendra pas.

    Quand il est terminé, vous devriez voir ceci:

    Procédure PL / SQL terminée avec succès.

    Si vous avez mis un temps plus long et obtenez impatient, vous pouvez ouvrir une autre fenêtre de SQL pour vous assurer que la tâche est encore en cours d'exécution en tapant

    Nom_de_la_tâche SELECT, le statut, execution_startFROM dba_advisor_log où le propriétaire = 'HR'-



    Vous voyez quelque chose comme ce qui suit:

    TASK_NAME STATUT EXECUTION_START ------------------------------ --------------- - ------------------ emp_dept_tuning_task EXECUTING19-JUL 2013 15:35:42
  3. Lorsque l'exécution est terminée, vous pouvez visualiser les résultats en exécutant la procédure BMS_SQLTUNE.report_tuning_task. Tapez la commande suivante:

    SELECTDBMS_SQLTUNE.report_tuning_task ('emp_dept_tuning_task') AS recommendationsFROM dual

    Pour des raisons d'espace, nous avons coupé certaines sections de la sortie qui suit, mais vous voyez quelque chose comme ceci:

    RECOMMENDATIONS---------------------------------------------------------------------------------GENERAL INFORMATIONS SECTION ------------------------------------------------ --------------------------------- Tuning Nom de la tâche: emp_dept_tuning_taskTuning Tâche Propriétaire: Type de HRWorkload: Simple SQL StatementScope: Limite COMPREHENSIVETime (secondes): 60Completion Statut: INTERRUPTEDStarted au: 19/07/2013 15: 21: 39Completed au: 19/07/2013 15:22:43 ------------------ -------------------------------------------------- ------------- erreur: ORA-13639: L'opération en cours a été interrompu parce qu'il chronométré out.------------------------------------------------------------------------------------------------------------------------------------------------------------------Schema Nom: HRSQL ID: 47uvvzcuu5mdgSQL texte: SELECT first_name, last_name, department_name DE JOINdepartments de PEM en utilisant (department_id) OÙ last_name = 'Hopkins'RECOMMENDATIONS------------------------------------------------------------------------------------------------------------------------------------------------------------------FINDINGS SECTION (1 résultat) --------------------------------------------- ------------------------------------ Indice 1- Finding (voir expliquer section plans ci-dessous) --- ----------------------------------------------- Le plan d'exécution de cette déclaration peut être améliorée par la création d'un ou moreindices.Recommendation (bénéfice estimé: 99,98%) ------------------------------ ------------- songez à exécuter les conseiller accès pour améliorer le schéma physique Designor création de l'index HR.IDX index.create recommandé $$ _ 03170001 sur HR.EMP ("LAST_NAME") - Rationale-- ------- Créer les indices recommandés améliore de manière significative l'exécution planof cette déclaration. Toutefois, il pourrait être préférable d'exécuter «conseiller accès" à l'aide d'une charge de travail de SQL représentant par opposition à une simple déclaration. Thiswill permettre d'obtenir des recommandations d'index complets qui prend intoRECOMMENDATIONS--------------------------------------------------------------------------------account frais de maintenance de l'index et de la consommation de l'espace supplémentaire .... sortie ciselée ...

    La dernière partie du rapport montre la avant et après les plans d'exécution. Dans ce cas, vous avez vu l'avant lorsque vous étiez générer des plans d'exécution. Allez-y et ajoutez l'indice, régénérer le plan d'exécution, et de voir si vous avez fait une amélioration.

    Avant d'ajouter l'indice, noter que les recommandations donnent le SQL pour ajouter l'index:

     Recommandation (bénéfice estimé: 99,98%) ------------------------------------------ - Envisagez de le lancer le conseiller d'accès pour améliorer le schéma physique Designor création de l'index HR.IDX index.create recommandé $$ _ 03170001 sur HR.EMP ("LAST_NAME") -

    A noter également que Oracle donne un avertissement:

    RECOMMENDATIONS--------------------------------------------------------------------------------account frais de maintenance de l'index et de la consommation de l'espace supplémentaire.
  4. Ajouter l'indice avec votre propre nom en tapant:

    CREATE INDEX ON emp_last_name_idx emp (nom_famille) -

    Vous devriez voir quelque chose comme ce qui suit:

    Indice créé.
  5. Jetez un oeil à le plan d'exécution. Tapez la commande suivante:

    expliquer le plan forSELECT first_name, last_name, department_nameFROM emp rejoindre départements utilisant (department_id) OÙ last_name = 'Hopkins-Explained.Elapsed: 00: 00: 00.09

    Et puis tapez

    @? rdbms admin utlxpls

    Vous devriez voir la sortie comme ceci:

PLAN_TABLE_OUTPUT---------------------------------------------------------------------------------Plan la valeur de hachage: 1505300146 ---------------------------------------------- ----------------------------------- | Id | Opération | Nom | Lignes | Octets | Coût (% CPU) | Durée | ------------------------------------------------ --------------------------------- | 0 | Instruction SELECT | | 1 | 34 | 5 (0) | 00:00:01 || 1 | Boucles imbriquées | ||| ||| 2 | Boucles imbriquées | | 1 | 34 | 5 (0) | 00:00:01 || 3 | TABLE ACCES PAR INDEX ROWID en lots | EMP | 1 | 18 | 4 (0) | 00:00:01 || * 4 | INDEX SCAN RANGE | EMP_LAST_NAME_IDX | 1 || 3 (0) | 00:00:01 || * 5 | UNIQUE INDEX SCAN | DEPT_ID_PK | 1 || 0 (0) | 00:00:01 || 6 | TABLE ACCES PAR INDEX ROWID | SERVICES | 1 | 16 | 1 (0) | 00:00:01 | -------------------------------------------- ------------------------------------- information prédicat (identifié par Opération carte d'identité): ---- ----------------------------------------------- 4 - Accès (. "EMP" "LAST_NAME" = 'Hopkins) 5 - accès ("EMP" "DEPARTMENT_ID" = "départements" "DEPARTMENT_ID"..)

Maintenant que vous avez ajouté l'indice, quelques choses sont évidentes:

  • Le coût du plan a chuté 40336-5.

  • Il ya maintenant six étapes.

  • Le scan de table complet est parti. Au lieu de vous voyez l'utilisation de votre nouvel indice.

Souvent, l'une des parties difficiles sur le réglage de la base de données est d'avoir une solide compréhension de l'application et les données. La question peut ne pas toujours être évident. Parfois engager d'autres experts de l'application et de données aide.

Expliquez-leur vos conclusions et ce que vous proposez. Ils peuvent être en mesure de vous aider à venir à une conclusion. En outre, si les données fait partie d'une application tierce emballé, tantôt ouvrant un ticket avec le vendeur est le chemin à parcourir.


» » » Comment faire pour exécuter SQL Tuning conseiller d'Oracle 12c