Oracle
 sql >> Base de données >  >> RDS >> Oracle

Top 5 des requêtes SQL chronophages dans Oracle

J'ai trouvé cette instruction SQL utile pour commencer (désolé, je ne peux pas l'attribuer à l'auteur original ; je l'ai trouvée quelque part sur Internet) :

SELECT * FROM
(SELECT
    sql_fulltext,
    sql_id,
    elapsed_time,
    child_number,
    disk_reads,
    executions,
    first_load_time,
    last_load_time
FROM    v$sql
ORDER BY elapsed_time DESC)
WHERE ROWNUM < 10
/

Cela trouve les principales instructions SQL actuellement stockées dans le cache SQL, classées par temps écoulé. Les instructions disparaîtront du cache au fil du temps, il peut donc être inutile d'essayer de diagnostiquer le travail par lots de la nuit dernière lorsque vous arrivez au travail à midi.

Vous pouvez également essayer de trier par disk_reads et exécutions. Les exécutions sont utiles car certaines applications médiocres envoient trop souvent la même instruction SQL. Ce SQL suppose que vous utilisez correctement les variables de liaison.

Ensuite, vous pouvez prendre le sql_id et child_number d'une déclaration et donnez-les à ce bébé :-

SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR('&sql_id', &child));

Cela montre le plan réel du cache SQL et le texte intégral du SQL.