4. Autres Conseils

Avant de regarder les conseils suivants, Oracle (ou un autre BD) doit être bien installé, la taille de cache bien calculée et les disques correctement structurés pour éviter les bourrages.

  • si le trafic vers le disque est élevé pendant une recherche, cela signifie alors normalement une indexation médiocre des tables de BD. Dans ce cas, le temps réel est beaucoup plus important que le temps de CPU, en raison de l’attente du disque. Parfois, l'exécution peut être améliorée en réorganisant le SQL pour employer d'autres index.
  • si le temps réel est plus important que le temps de CPU mais que le trafic vers le disque est bas, cela signifie alors des contentions pour une ressource autre que le disque, par exemple un lock. C’est souvent le cas avec les commandes SQL type : update/insert/delete.
  • si le temps de CPU est proche du temps réel mais le trafic vers le disque est bas, cela signifie alors que la commande SQL a pris une voie d’exécution étrange dans la BD. Il faut restructurer le SQL.
    Un autre bon conseil est de placer des commandes SQL dans des queues différentes selon les temps d’exécution. Ceci n’est pas toujours praticable avec les serveurs d’application. Mais un SQL utilisé pour générer un rapport a pu être placé dans une file d'attente spéciale pour éviter de bloquer des demandes interactives des EJBs et des Servlets.

Appendix 1 : TKProf

Procédure pour permettre la trace de SQL pour des utilisateurs sur votre base de données:

  • Obtenir le SID et la SERIAL# pour le processus que vous voulez tracer.

    SQL> select sid, serial# from sys.v_$session where ...
    SID SERIAL#
    8 13607
  • Permettre le tracé du processus que vous avez choisi:

    SQL> ALTER SYSTEM SET TIMED_STATISTICS = TRUE;
    SQL> execute dbms_system.set_sql_trace_in_session(8, 13607, true);
  • Executer les commandes nécessaires pour démontrer le problème
  •  Arrêter de tracer pour le processus choisi:

    SQL> execute dbms_system.set_sql_trace_in_session(8,13607, false);
    SQL> ALTER SYSTEM SET TIMED_STATISTICS = FALSE;
  • Rechercher pour le fichier de trace dans USER_dump_dest

    $ cd /app/oracle/admin/oradba/udump
    $ ls –ltr
    total 8
    -rw-r----- 1 oracle dba 2764 Mar 30 12:37 ora_9294.trc
  • Lancer TKPROF pour analyser la trace

    $ tkprof ora_9294.trc x EXPLAIN=monitor/oramon SYS=NO
  • Regarder ou imprimer le dossier de rendement x.prf.