Comment optimiser SQL dans Oracle 12c

Le plus grand coup que vous allez obtenir en termes de réglage des performances pour vos bases de données Oracle 12c est d'avoir une bonne Structured Query Language (SQL). SQL mal écrit est principalement la cause de la plupart des problèmes de performances dans une base de données.

Sommaire

Rédaction bonne SQL dès le départ quand une nouvelle application est en cours d'élaboration peut vous faire économiser des seaux d'argent et de temps plus tard. Malheureusement, en tant qu'administrateur de base de données, la plupart des situations, vous vous trouvez dans sont sur les systèmes préexistants où le SQL est déjà en place.

Comment expliquer générer un plan Oracle 12c

Dites que vous avez réduit un problème de performance vers le bas pour une instruction SQL spécifique dans la base de données. Grâce à interroger l'utilisateur et de tester le problème vous-même, vous avez été en mesure de reproduire le problème avec une instruction SQL spécifique.

Un des outils fournis avec la base de données que vous voulez d'abord se familiariser avec est Expliquez plan. Expliquez plan fait exactement ce qu'il dit. Il vous montre l'exécution de l'instruction SQL et explique ce que chaque étape du plan est fait.

Le Plan Expliquez est générée en utilisant la commande SQL EXPLAIN PLAN POUR. Comme un exemple simple, que vous avez l'instruction SQL suivante, qui prend beaucoup de temps pour exécuter:

Prenom SELECT, last_nameFROM empWHERE last_name = 'Hopkins'-

Voici comment vous générez un Expliquez Plan pour la déclaration précédente:

EXPLIQUER PLAN FORSELECT prenom, last_nameFROM empWHERE last_name = 'Hopkins'-



Vous voyez cette sortie après avoir généré le Plan Expliquer:

Expliqué.

Après l'instruction SQL est expliqué, par défaut, le plan est stocké dans la table du dictionnaire de données appelée plan_table $. Il est un synonyme public, plan_table, qui permet à tous les utilisateurs d'avoir accès à ce tableau interne.

Comment afficher et lire le résultat de l'instruction SQL dans Oracle 12c

Vous pouvez retirer les informations dans le plan_table dans un certain nombre de façons. Il existe un grand nombre d'informations à afficher. Affichage de tous, il est pas toujours utile. Une méthode simple consiste à exécuter un script fourni par Oracle à lire et à formater l'information.

Cette méthode affiche seulement la plus récente Expliquez plan. Le script est stocké dans le répertoire $ ORACLE_HOME / SGBDR / admin. Le script est nommé utlxpls. De SQL dans la même session où vous avez exécuté l'EXPLIQUER, tapez ceci:

SQL> @? Rdbms admin utlxpls

Un raccourci vers précisant ORACLE_HOME est le “? ” comme indiqué dans la déclaration précédente.

La sortie expliqué de votre instruction SQL ressemble à ceci:

PLAN_TABLE_OUTPUT ------------------------------------------------- ------------------------- Régime valeur de hachage: 3956160932 -------------------- -------------------------------------------------- ---- | Id | Opération | Nom | Lignes | Octets | Coût (% CPU) | Durée | ------------------------------------------------ -------------------------- | 0 | Instruction SELECT | | 1 | 15 | 40 335 (2) | 00:00:02 || * 1 | TABLE ACCES TOUT | EMP | 1 | 15 | 40 335 (2) | 00:00:02 | -------------------------------------------- ------------------------------ information prédicat (identifié par Opération carte d'identité): ----------- ---------------------------------------- 1 - filtre ("LAST_NAME" = 'Hopkins ')

Même si cela prend un peu d'expérience pour lire les détails fins dans la sortie de PLAN EXPLIQUER, quelques choses sautent:

  • L'utilisation d'un scan de table complet (TABLEAU ACCES TOUT EMP)

  • L'information prédicat (1 -. Filtre ("LAST_NAME" = 'Hopkins') Ceci est votre clause where.

  • Le numéro 1 correspondant à l'information prédicat revenir à l'opération. Le numéro index ce retour à l'étape dans la section ci-dessus. Dans cet exemple, il semble simple, mais, si vous avez un plan Expliquer avec des dizaines de lignes, cela peut être très utile.

Un autre bit d'information vous pouvez noter est la valeur pour la COST. Dans le cas précédent, le coût est de 40335. Bien que le coût en soi ne signifie pas nécessairement quoi que ce soit à leur valeur nominale, vous pouvez l'utiliser pour comparer les modifications que vous apportez au plan d'exécution. En règle générale, plus le coût est élevé, meilleure est votre plan.

États avec de nombreuses opérations différentes ont des coûts associés à chaque étape. En regardant le coût de chaque étape, vous pouvez déterminer à quel stade de l'exécution est la plus chère (ressources sage, pas d'argent-sage). Ensuite, vous pouvez concentrer votre accord sur cette scène. La plupart du temps, que vous faites des changements et réduire le coût, vous faites se déplace dans la bonne direction.

Voici un exemple plus complexe d'un plan d'exécution:

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.09SQL> @?rdbmsadminutlxplsPLAN_TABLE_OUTPUT----------------------------------------------------------------------------------Plan la valeur de hachage: 3338584009 ---------------------------------------------- ------------------------------------------ | Id | Opération | Nom | Lignes | Octets | Coût (% CPU) | Durée | ------------------------------------------------ ---------------------------------------- | 0 | Instruction SELECT | | 1 | 34 | 40 336 (2) | 00:00:02 || 1 | Boucles imbriquées | ||| | || 2 | Boucles imbriquées | | 1 | 34 | 40 336 (2) | 00:00:02 || * 3 | TABLE ACCES TOUT | EMP | 1 | 18 | 40 335 (2) | 00:00:02 || * 4 | UNIQUE INDEX SCAN | DEPT_ID_PK | 1 || 0 (0) | 00:00:01 || 5 | TABLE ACCES PAR INDEX ROWID | SERVICES | 1 | 16 | 1 (0) | 00:00:01 | -------------------------------------------- -------------------------------------- information prédicat (identifié par Opération carte d'identité): --- ------------------------------------------------ 3 - filtre ("EMP" "LAST_NAME" = 'Hopkins.) 4 - l'accès (.. "EMP" "DEPARTMENT_ID" = "Les départements" "DEPARTMENT_ID")

Dans cet exemple, vous voyez cinq opérations. En regardant le fonctionnement de la hauteur (étape 5) et en remontant, vous pouvez voir que le coût ressemble à ceci:

Étape 5 = 1
Etape 4 = 0
Etape 3 = 40 335
Étape 2 = 40336
Étape 1 = 40336
Total = 40336

Remarquez comment le coût de toutes les étapes ajoute. Notez également comment le coût de l'étape 3 est de loin le plus cher. Cela dit, un administrateur de base de données (DBA) voudrait concentrer ses efforts de réglage à l'étape 3.


» » » Comment optimiser SQL dans Oracle 12c