OCI8 et le suivi dynamique DTrace
OCI8 2.0 introduit DTrace qui peut être utilisé sur les systèmes qui
supporte DTrace. Voir le suivi dynamique
DTrace pour un aperçu de PHP et DTrace.
Installation d'OCI8 avec le support DTrace
Pour activer le support DTrace en PHP OCI8, vous devez compiler
OCI8 comme extension partagée, après avoir configuré
PHP_DTRACE.
Editez php.ini, définissez l'option
extension_dir pour correspondre
au dossier contenant le fichier oci8.so créé,
et activez l'extension en ajoutant :
Si vous installez PHP OCI8 depuis PECL en utilisant
phpize et
configure (au lieu de pecl),
vous devez définir PHP_DTRACE=yes. Ceci en raison
du fait que l'option --enable-dtrace sera ignoré par
une limitation du script configure du paquet PECL.
Voir l'installation d'une extension PECL
pour les instructions générales d'installation PECL.
Découverte statique DTrace en PHP OCI8
Les découvertes statiques suivantes sont disponibles en PHP OCI8Nom de la découverteDescription de la découverteArguments de la découverteoci8-connect-entryInitialisé par oci_connect(), oci_pconnect() et oci_new_connect().
Lancé avant que la connexion à la base de données ne soit établie.char *username, char *dbname,
char *charset, long session_mode,
int persistent, int exclusiveoci8-connect-returnLancé à la fin de la connexion.void *connectionoci8-check-connectionLancé si une erreur Oracle a fait que la connexion est devenue invalide.void *connection, char *client_id, int is_open, long errcode, unsigned long server_statusoci8-sqltextLancé lorsque oci_parse() est exécuté.void *connection, char *client_id, void *statement, char *sqloci8-connection-closeLancé lorsque la connexion à la base de données est totalement détruite.void *connectionoci8-errorLancé si une erreur Oracle survient.int status, long errcodeoci8-execute-modeLancé lors d'un appel à oci_execute pour afficher le mode d'exécution.void *connection, char *client_id, void *statement, unsigned int mode
Ces découvertes sont utiles pour suivre les scripts OCI8.
Les variables connection et statement
sont des pointeurs vers les structures internes utilisées pour suivre les connexions
PHP et les requêtes exécutées.
La variable client_id est la valeur définie par
oci_set_client_identifier.
Le cœur de PHP a aussi des découvertes statiques.
Voir les découvertes statiques DTrace
dans le cœur PHP.
Découvertes DTrace pour le débogage interne en OCI8Nom de la découverteoci8-connect-expiryoci8-connect-lookupoci8-connect-p-dtor-closeoci8-connect-p-dtor-releaseoci8-connect-typeoci8-sesspool-createoci8-sesspool-statsoci8-sesspool-type
Ces découvertes sont utiles pour les mainteneurs OCI8. Référez-vous
au code source d'OCI8 pour les arguments et pour voir quand elles sont
lancées.
Liste des découvertes statiques DTraceen PHP OCI8
Pour lister toutes les découvertes disponibles, démarrez un processus PHP et exécutez :
L'affiche sera similaire à :
Les valeurs de la colonne "Provider" affichent phpoci
suivi de l'identifiant du processus actuellement exécuté par PHP.
La colonne "Function" affiche les noms des fonctions C interne à PHP
où chaque fournisseur est situé.
Si un processus PHP n'est pas en cours d'exécution, alors aucune
découverte PHP ne sera affichée.
Exemple de DTrace avec PHP OCI8
Cet exemple montre les bases du langue de script DTrace D.
user_oci8_probes.d pour suivre toutes les découvertes statiques
au niveau utilisation PHP OCI8 avec DTrace
Ce script utilise l'option -Z de dtrace,
lui permettant d'être exécutée lorsqu'il n'y a aucun processus
PHP en cours d'exécution. Si cette option est omis, le script
va vouloir se terminer immédiatement lorsqu'aucun exécutable PHP
n'est en cours de fonctionnement.
Sur les machines avec plusieurs CPU, l'ordre des découvertes semble
ne pas être séquentiel. Ceci dépend du CPU qui exécute les découvertes,
et le nombre de threads qui migrent des CPUs. L'affichage des
timestamps des découvertes peut aider à éviter toute confusion.
Le script suit tous les points de découvertes statiques niveau utilisateur
PHP OCI8 pendant la durée de l'exécution du script PHP. Exécution du script D :
Exécutez un script PHP ou une application. Le script de surveillance D
affiche chaque argument de découvertes lancé. Par exemple, un simple
script PHP qui requête une table va produire les traces suivantes :
Lorsque la surveillance se termine, le script D peut s'arrêter avec la
combinaison ^C.
Voir aussiLe suivi dynamique DTrace