recherche
Maisonbase de donnéesOracleComment afficher le plan d'exécution Oracle

Comment afficher le plan d'exécution Oracle

Qu'est-ce qu'un plan d'exécution ?

SQL est un langage idiot. Chaque condition est une exigence. Différents ordres d'accès forment différents plans d'exécution. Oracle doit faire un choix et ne peut disposer que d'un seul chemin d'accès à la fois. Le plan d'exécution est une description du processus d'exécution ou du chemin d'accès d'une instruction de requête dans Oracle.

Sélection du plan d'exécution :

Habituellement, un SQL a plusieurs plans d'exécution, alors comment choisir ? Celui avec une surcharge d'exécution inférieure signifie de meilleures performances et une vitesse plus rapide. Nous choisirons lequel est appelé processus d'analyse d'Oracle, puis Oracle mettra le meilleur plan d'exécution dans le pool partagé de SGA pour exécuter le même SQL plus tard. il vous suffit de l'obtenir à partir du pool partagé et il n'est pas nécessaire de l'analyser à nouveau.

Base de sélection du plan d'exécution :

Sélectionnez un plan d'exécution basé sur des informations statistiques.

Informations statistiques :

Qu'est-ce que les informations statistiques : nombre d'enregistrements, nombre de blocs, etc., voir dba_tables/dba_indexes pour plus de détails

Dynamique échantillonnage :

Oracle collecte normalement des informations statistiques à une certaine heure chaque jour. Comment Oracle collecte-t-il des informations statistiques pour les tables nouvellement créées ? Utilisez l'échantillonnage dynamique.

définir la trace automatique sur
définir la taille de ligne 1000
--exécuter l'instruction SQL
--l'échantillonnage dynamique utilisé pour cette clé d'instruction (niveau=2)

Six plans d'exécution

Oracle propose 6 méthodes d'acquisition de plans d'exécution, chacune avec une emphase différente :

Suivez généralement les règles suivantes lors de la sélection :

1. Si l'exécution de SQL prend beaucoup de temps pour produire des résultats ou ne peut pas renvoyer de résultats, utilisez la méthode 1 : expliquer le plan pour

2 Le moyen le plus simple de suivre un certain SQL est la méthode 1 : expliquer le plan pour. , suivi de la méthode 2 : définir l'autotrace sur

3 Si vous souhaitez vérifier plusieurs plans d'exécution d'un certain SQL, vous ne pouvez utiliser que la méthode 4 : dbms_xplan.display_cursor ou la méthode 6 : awrsqlrpt.sql

.

4. Si le SQL contient une fonction et que la fonction contient du SQL, c'est-à-dire qu'il existe plusieurs couches d'appels. Si vous souhaitez analyser avec précision, vous ne pouvez utiliser que la méthode 5 : 10046 suivi

5. . Idée pour voir le plan d'exécution réel, vous ne pouvez pas utiliser la méthode 1 : expliquer le plan et la méthode 2 : définir l'autotrace sur

6. Si vous souhaitez obtenir le nombre de fois où la table a été consultée, vous pouvez. utilisez uniquement la méthode 3 : Statistics_level = all

Comment afficher le plan dexécution Oracle

Comment Oracle collecte les statistiques :

1. Oracle choisira de collecter la table et l'index. statistiques sur une période spécifique (par défaut du lundi au vendredi : 22h00, samedi et dimanche : 06h00), les utilisateurs peuvent s'ajuster eux-mêmes, principalement pour éviter les périodes de pointe

2. Les index ont un seuil et l'analyse sera automatiquement effectuée uniquement lorsque le seuil est dépassé. Si les modifications des données ne sont pas importantes, Oracle ne les analysera pas

3. La méthode de collecte est flexible ; Cela peut être fait pour une certaine partition de la table de partition, et un mécanisme parallèle peut être utilisé pour collecter des informations sur la table et l'index

Comment collecter des informations statistiques :

--Collecter les statistiques de la table ; informations

exec dbms_stats.gather_table_stats(ownname => 'AAA', tabname => 'TEST02',estimate_percent =>
10,method_opt => 'for all indexed columns');

--Collecter les statistiques d'index

exec dbms_stats.gather_index_stats(ownname => 'AAA',indname => 'ID_IDX',estimate_percent =>
10,degree => '4');

--Collecter les statistiques de table et d'index

exec dbms_stats.gather_table_stats(ownname => 'AAA',tabname => 'TEST02',estimate_percent =>
10,method_opt => 'for all indexed columns',cascade => true);

(1) expliquer le plan pour

SQL> show user
     USER 为 "HR"
SQL> set linesize 1000
SQL> set pagesize 2000
SQL> explain plan for
2 select *
3 from employees,jobs
4 where employees.job_id=jobs.job_id
5 and employees.department_id=50;
已解释。
 
SQL> select * from table(dbms_xplan.display());
 
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------
Plan hash value: 303035560
------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 45 | 4590 | 6 (17)| 00:00:01 |
| 1 | MERGE JOIN | | 45 | 4590 | 6 (17)| 00:00:01 |
| 2 | TABLE ACCESS BY INDEX ROWID| JOBS | 19 | 627 | 2 (0)| 00:00:01 |
| 3 | INDEX FULL SCAN | JOB_ID_PK | 19 | | 1 (0)| 00:00:01 |
|* 4 | SORT JOIN | | 45 | 3105 | 4 (25)| 00:00:01 |
|* 5 | TABLE ACCESS FULL | EMPLOYEES | 45 | 3105 | 3 (0)| 00:00:01 |
------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
4 - access("EMPLOYEES"."JOB_ID"="JOBS"."JOB_ID")
filter("EMPLOYEES"."JOB_ID"="JOBS"."JOB_ID")
5 - filter("EMPLOYEES"."DEPARTMENT_ID"=50)
已选择19行。

Avantages : Non besoin d'exécuter réellement, rapide et pratique ;

Inconvénients :

1. Aucune information statistique pertinente n'est générée, telle que le nombre de lectures logiques, le nombre de lectures physiques et le nombre d'appels récursifs. généré;

2. Il est impossible de juger combien de lignes ont été traitées

3. Il est impossible de juger combien de fois la table a été exécutée

( 2) activer l'autotrace

Utilisation :

Fonction de commande :

SET AUTOT[RACE] OFF pour arrêter AutoTrace

SET AUTOT[RACE] ON pour activez AutoTrace et affichez les informations AUTOTRACE et les résultats de l'exécution SQL
SET AUTOT[RACE] TRACEONLY pour activer AutoTrace, affichez uniquement les informations AUTOTRACE
SET AUTOT[RACE] ON EXPLAIN Activez AutoTrace, affichez uniquement les informations EXPLAIN de AUTOTRACE
SET AUTOT[RACE] ON STATISTICS Activez AutoTrace, affichez uniquement les informations sur les STATISTIQUES AUTOTRACE

SQL> set autotrace on
SQL> select * from employees,jobs where employees.job_id=jobs.job_id and employees.department_id=50;
--输出结果(略)
-- ...
已选择45行。
 
执行计划
----------------------------------------------------------
Plan hash value: 303035560
------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 45 | 4590 | 6 (17)| 00:00:01 |
| 1 | MERGE JOIN | | 45 | 4590 | 6 (17)| 00:00:01 |
| 2 | TABLE ACCESS BY INDEX ROWID| JOBS | 19 | 627 | 2 (0)| 00:00:01 |
| 3 | INDEX FULL SCAN | JOB_ID_PK | 19 | | 1 (0)| 00:00:01 |
|* 4 | SORT JOIN | | 45 | 3105 | 4 (25)| 00:00:01 |
|* 5 | TABLE ACCESS FULL | EMPLOYEES | 45 | 3105 | 3 (0)| 00:00:01 |
------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
4 - access("EMPLOYEES"."JOB_ID"="JOBS"."JOB_ID")
filter("EMPLOYEES"."JOB_ID"="JOBS"."JOB_ID")
5 - filter("EMPLOYEES"."DEPARTMENT_ID"=50)
统计信息
----------------------------------------------------------
0 recursive calls
0 db block gets
13 consistent gets
0 physical reads
0 redo size
5040 bytes sent via SQL*Net to client
433 bytes received via SQL*Net from client
4 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
45 rows processed
Avantages :

1. Les informations statistiques pertinentes pendant l'exécution peuvent être générées (combien de logiques). les lectures sont générées, combien d'appels récursifs, combien de lectures physiques, etc.);

2 Bien qu'il doive attendre, le plan d'exécution ne peut être généré qu'après l'exécution de l'instruction, mais le commutateur traceonly peut être généré. utilisé pour contrôler que les résultats renvoyés ne soient pas affichés à l'écran

Inconvénients :

1 Vous devez attendre que l'instruction SQL soit exécutée avant que les résultats ne soient affichés ; 🎜>2. Il est impossible de voir combien de fois la table a été consultée

(3) Statistics_level=all

Étape 1 : ALTER SESSION SET STATISTICS_LEVEL=ALL;

Étape 2 : Exécutez le SQL à analyser

Étape 3 : sélectionnez * from table(dbms_xplan.display_cursor('sql_id/hash_value',null,'allstats last'));

SQL> alter session set statistics_level=all;
SQL> select * from employees,jobs where employees.job_id=jobs.job_id and employees.department_id=50;
--输出结果
--...
已选择45行。
 
SQL> set linesize 1000
SQL> select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));
 
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------
-----------
SQL_ID d8jzhcdwmd9ut, child number 0
-------------------------------------
select * from employees,jobs where employees.job_id=jobs.job_id and
employees.department_id=50
Plan hash value: 303035560
------------------------------------------------------------------------------------------------------------------------
----------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads | OMem |
1Mem | Used-Mem |
------------------------------------------------------------------------------------------------------------------------
----------------
| 0 | SELECT STATEMENT | | 1 | | 45 |00:00:00.01 | 13 | 8 | |
| |
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------
-------------
| 1 | MERGE JOIN | | 1 | 45 | 45 |00:00:00.01 | 13 | 8 | |
| |
| 2 | TABLE ACCESS BY INDEX ROWID| JOBS | 1 | 19 | 19 |00:00:00.01 | 6 | 2 | |
| |
| 3 | INDEX FULL SCAN | JOB_ID_PK | 1 | 19 | 19 |00:00:00.01 | 3 | 1 | |
| |
|* 4 | SORT JOIN | | 19 | 45 | 45 |00:00:00.01 | 7 | 6 | 6144 |
6144 | 6144 (0)|
|* 5 | TABLE ACCESS FULL | EMPLOYEES | 1 | 45 | 45 |00:00:00.01 | 7 | 6 | |
| |
------------------------------------------------------------------------------------------------------------------------
----------------
Predicate Information (identified by operation id):
---------------------------------------------------
4 - access("EMPLOYEES"."JOB_ID"="JOBS"."JOB_ID")
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------
-----
filter("EMPLOYEES"."JOB_ID"="JOBS"."JOB_ID")
5 - filter("EMPLOYEES"."DEPARTMENT_ID"=50)
已选择25行。

Interprétation des mots clés :

1. start : le nombre d'exécutions SQL

2. E-Rows : le nombre de lignes attendues par le plan d'exécution ; >3. R-Rows : Le nombre réel de lignes renvoyées par le plan d'exécution

4 A-Time : Le temps d'exécution de chaque étape (HH:MM:SS.FF). , vous pouvez savoir où est passé le temps SQL ;

5. Buffers : lecture logique ou lecture cohérente effectivement exécutée à chaque étape

6. Lectures : lecture physique ; >Avantages :

1. Peut être clair Obtenez combien de fois la table a été consultée depuis les démarrages

2、可以从E-Rows和A-Rows得到预测的行数和真实的行数,从而可以准确判断Oracle评估是否准确;

3、虽然没有准确的输出运行时的相关统计信息,但是执行计划中的Buffers就是真实的逻辑读的数值;

缺点:

1、必须要等执行完后才能输出结果;

2、无法控制结果打屏输出,不像autotrace可以设置traceonly保证不输出结果;

3、看不出递归调用,看不出物理读的数值

(4)dbms_xplan.display_cursor获取

步骤1:select * from table( dbms_xplan.display_cursor('&sql_id') ); --该方法是从共享池得到

注释:

1、还有1种方法,select * from table( dbms_xplan.display_awr('&sql_id') ); --该方法是从awr性能视图里面获取

2、如果有多个执行计划,可用以下方法查出:

select * from table(dbms_xplan.display_cursor('&sql_id',0));
select * from table(dbms_xplan.display_cursor('&sql_id',1));
*/
SQL> select * from table(dbms_xplan.display_cursor('5hkd01f03y43d'));
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID 5hkd01f03y43d, child number 0
-------------------------------------
select * from test where table_name = 'LOG$'
Plan hash value: 2408911181
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 2 (100)|
| 1 | TABLE ACCESS BY INDEX ROWID| TEST | 1 | 241 | 2 (0)|
|* 2 | INDEX RANGE SCAN | IDX_TEST_1 | 1 | | 1 (0)|
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("TABLE_NAME"='LOG$')
19 rows selected

注释:如何查看1个sql语句的sql_id,可直接查看v$sql

优点:

1、知道sql_id即可得到执行计划,与explain plan for一样无需执行;

2、可得到真实的执行计划

缺点:

1、没有输出运行的统计相关信息;

2、无法判断处理了多少行;

3、无法判断表被访问了多少次;

(5)事件10046 trace跟踪

步骤1:alter session set events '10046 trace name context forever,level 12'; --开启追踪

步骤2:执行sql语句;

步骤3:alter session set events '10046 trace name context off'; --关闭追踪

步骤4:找到跟踪后产生的文件(开启10046前先用‘ls -lrt’看一下文件,执行结束后再看哪个是多出来的文件即可)

步骤5:tkprof trc文件 目标文件 sys=no sort=prsela,exeela,fchela --格式化命令

优点:

1、可以看出sql语句对应的等待事件;

2、如果函数中有sql调用,函数中有包含sql,将会被列出,无处遁形;

3、可以方便的看处理的行数,产生的逻辑物理读;

4、可以方便的看解析时间和执行时间;

5、可以跟踪整个程序包

缺点:

1、步骤繁琐;

2、无法判断表被访问了多少次;

3、执行计划中的谓词部分不能清晰的展现出来

推荐:Oracle数据库学习教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer
Objectif d'Oracle: Solutions commerciales et gestion des donnéesObjectif d'Oracle: Solutions commerciales et gestion des donnéesApr 13, 2025 am 12:02 AM

Oracle aide les entreprises à réaliser la transformation numérique et la gestion des données grâce à ses produits et services. 1) Oracle fournit un portefeuille complet de produits, y compris les systèmes de gestion de base de données, les systèmes ERP et CRM, aidant les entreprises à automatiser et à optimiser les processus métier. 2) Les systèmes ERP d'Oracle tels que E-BusinessSuite et FusionApplications réalisent l'automatisation des processus métier de bout en bout, améliorent l'efficacité et réduisent les coûts, mais ont des coûts de mise en œuvre et de maintenance élevés. 3) Oracedatabase offre un traitement élevé de données de concurrence et de haute disponibilité, mais a des coûts de licence élevés. 4) L'optimisation des performances et les meilleures pratiques incluent l'utilisation rationnelle de la technologie d'indexation et de partitionnement, la maintenance régulière de la base de données et la conformité aux spécifications de codage.

Comment supprimer l'échec de la bibliothèque OracleComment supprimer l'échec de la bibliothèque OracleApr 12, 2025 am 06:21 AM

Étapes pour supprimer la base de données ratée après que Oracle a échoué à créer une bibliothèque: utilisez le nom d'utilisateur SYS pour se connecter à l'instance cible. Utilisez la base de données Drop pour supprimer la base de données. Base de données de requête V $ pour confirmer que la base de données a été supprimée.

Comment créer des curseurs dans Oracle LoopComment créer des curseurs dans Oracle LoopApr 12, 2025 am 06:18 AM

Dans Oracle, la boucle pour la boucle pour créer des curseurs dynamiquement. Les étapes sont: 1. Définissez le type de curseur; 2. Créez la boucle; 3. Créez le curseur dynamiquement; 4. Exécuter le curseur; 5. Fermez le curseur. Exemple: un curseur peut être créé de cycle par circuit pour afficher les noms et salaires des 10 meilleurs employés.

Comment exporter la vue OracleComment exporter la vue OracleApr 12, 2025 am 06:15 AM

Oracle Views peut être exporté via l'utilitaire EXP: Connectez-vous à la base de données Oracle. Démarrez l'utilitaire EXP, spécifiant le nom de vue et le répertoire d'exportation. Entrez les paramètres d'exportation, y compris le mode cible, le format de fichier et l'espace de table. Commencez à exporter. Vérifiez l'exportation à l'aide de l'utilitaire IMPDP.

Comment arrêter Oracle DatabaseComment arrêter Oracle DatabaseApr 12, 2025 am 06:12 AM

Pour arrêter une base de données Oracle, effectuez les étapes suivantes: 1. Connectez-vous à la base de données; 2. Arrêt immédiatement; 3. Arrêt About complètement.

Que faire si le journal Oracle est pleinQue faire si le journal Oracle est pleinApr 12, 2025 am 06:09 AM

Lorsque les fichiers journaux Oracle sont complets, les solutions suivantes peuvent être adoptées: 1) nettoyer les anciens fichiers journaux; 2) augmenter la taille du fichier journal; 3) augmenter le groupe de fichiers journaux; 4) Configurer la gestion automatique des journaux; 5) Renidialiser la base de données. Avant d'implémenter une solution, il est recommandé de sauvegarder la base de données pour éviter la perte de données.

Comment créer Oracle Dynamic SQLComment créer Oracle Dynamic SQLApr 12, 2025 am 06:06 AM

Les instructions SQL peuvent être créées et exécutées en fonction de l'entrée d'exécution en utilisant Dynamic SQL d'Oracle. Les étapes comprennent: la préparation d'une variable de chaîne vide pour stocker des instructions SQL générées dynamiquement. Utilisez l'instruction EXECUTER IMMÉDIATE OU PRÉPEPART pour compiler et exécuter les instructions SQL dynamiques. Utilisez la variable Bind pour passer l'entrée utilisateur ou d'autres valeurs dynamiques à Dynamic SQL. Utilisez EXECUTER immédiat ou exécuter pour exécuter des instructions SQL dynamiques.

Que faire si Oracle est imprégnéQue faire si Oracle est imprégnéApr 12, 2025 am 06:03 AM

Guide de manutention d'imprécision d'Oracle: Identifiez les impasses: vérifiez les erreurs de "blocage détectées" dans les fichiers journaux. Afficher les informations sur l'impasse: utilisez le package get_deadlock ou la vue V $ Lock pour obtenir des informations sur la session et les ressources de blocage. Analyser le diagramme de blocage: générer un diagramme de blocage pour visualiser la situation de maintien et d'attente de serrure et déterminer la cause profonde de l'impasse. Rollback Sessions de blocage: utilisez la commande Kill Session pour faire reculer la session, mais cela peut entraîner une perte de données. Interrompre le cycle de blocage: utilisez la commande de session de déconnexion pour déconnecter la session et libérer le verrou de maintien. Empêcher les impasses: optimiser les requêtes, utiliser le verrouillage optimiste, effectuer la gestion des transactions et régulièrement

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

MantisBT

MantisBT

Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

MinGW - GNU minimaliste pour Windows

MinGW - GNU minimaliste pour Windows

Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.

PhpStorm version Mac

PhpStorm version Mac

Le dernier (2018.2.1) outil de développement intégré PHP professionnel

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser