Rechercher une fonction PHP

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.

$ export PHP_DTRACE=yes
$ pecl install oci8

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 :

extension=oci8.so

Si vous installez PHP OCI8 2.0 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.

Retour à la première page de Manuel PHP  Table des matières Haut

Découverte statique DTrace en PHP OCI8

Les découvertes statiques suivantes sont disponibles en PHP OCI8
Nom de la découverte Description de la découverte Arguments de la découverte
oci8-connect-entry Initialisé 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 exclusive
oci8-connect-return Lancé à la fin de la connexion. void *connection
oci8-check-connection Lancé 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_status
oci8-sqltext Lancé lorsque oci_parse() est exécuté. void *connection, char *client_id, void *statement, char *sql
oci8-connection-close Lancé lorsque la connexion à la base de données est totalement détruite. void *connection
oci8-error Lancé si une erreur Oracle survient. int status, long errcode
oci8-execute-mode Lancé 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 coeur de PHP a aussi des découvertes statiques. Voir les découvertes statiques DTrace dans le coeur PHP.

Découvertes DTrace pour le débogage interne en OCI8
Nom de la découverte
oci8-connect-expiry
oci8-connect-lookup
oci8-connect-p-dtor-close
oci8-connect-p-dtor-release
oci8-connect-type
oci8-sesspool-create
oci8-sesspool-stats
oci8-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.

Retour à la première page de Manuel PHP  Table des matières Haut

Liste des découvertes statiques DTraceen PHP OCI8

Pour lister toutes les découvertes disponibles, démarrez un processus PHP et exécutez :

# dtrace -l

L'affiche sera similaire à :

   ID   PROVIDER            MODULE                          FUNCTION NAME
   [ . . . ]
   17 phpoci22116           oci8.so   php_oci_dtrace_check_connection oci8-check-connection
   18 phpoci22116           oci8.so                php_oci_do_connect oci8-connect-entry
   19 phpoci22116           oci8.so         php_oci_persistent_helper oci8-connect-expiry
   20 phpoci22116           oci8.so             php_oci_do_connect_ex oci8-connect-lookup
   21 phpoci22116           oci8.so  php_oci_pconnection_list_np_dtor oci8-connect-p-dtor-close
   22 phpoci22116           oci8.so  php_oci_pconnection_list_np_dtor oci8-connect-p-dtor-release
   23 phpoci22116           oci8.so                php_oci_do_connect oci8-connect-return
   24 phpoci22116           oci8.so             php_oci_do_connect_ex oci8-connect-type
   25 phpoci22116           oci8.so          php_oci_connection_close oci8-connection-close
   26 phpoci22116           oci8.so                     php_oci_error oci8-error
   27 phpoci22116           oci8.so         php_oci_statement_execute oci8-execute-mode
   28 phpoci22116           oci8.so              php_oci_create_spool oci8-sesspool-create
   29 phpoci22116           oci8.so            php_oci_create_session oci8-sesspool-stats
   30 phpoci22116           oci8.so            php_oci_create_session oci8-sesspool-type
   31 phpoci22116           oci8.so          php_oci_statement_create oci8-sqltext

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.

Retour à la première page de Manuel PHP  Table des matières Haut

Exemple de DTrace avec PHP OCI8

Cet exemple montre les bases du langue de script DTrace D.

Exemple #1 user_oci8_probes.d pour suivre toutes les découvertes statiques au niveau utilisation PHP OCI8 avec DTrace

#!/usr/sbin/dtrace -Zs

#pragma D option quiet

php*:::oci8-connect-entry
{
    printf("%lld: PHP connect-entry\n", walltimestamp);
    printf("  credentials=\"%s@%s\"\n", arg0 ? copyinstr(arg0) : "", arg1 ? copyinstr(arg1) : "");
    printf("  charset=\"%s\"\n", arg2 ? copyinstr(arg2) : "");
    printf("  session_mode=%ld\n", (long)arg3);
    printf("  persistent=%d\n", (int)arg4);
    printf("  exclusive=%d\n", (int)arg5);
}

php*:::oci8-connect-return
{
    printf("%lld: PHP oci8-connect-return\n", walltimestamp);
    printf("  connection=0x%p\n", (void *)arg0);
}

php*:::oci8-connection-close
{
    printf("%lld: PHP oci8-connect-close\n", walltimestamp);
    printf("  connection=0x%p\n", (void *)arg0);
}

php*:::oci8-error
{
    printf("%lld: PHP oci8-error\n", walltimestamp);
    printf("  status=%d\n", (int)arg0);
    printf("  errcode=%ld\n", (long)arg1);
}

php*:::oci8-check-connection
{
    printf("%lld: PHP oci8-check-connection\n", walltimestamp);
    printf("  connection=0x%p\n", (void *)arg0);
    printf("  client_id=\"%s\"\n", arg1 ? copyinstr(arg1) : "");
    printf("  is_open=%d\n", arg2);
    printf("  errcode=%ld\n", (long)arg3);
    printf("  server_status=%lu\n", (unsigned long)arg4);
}

php*:::oci8-sqltext
{
    printf("%lld: PHP oci8-sqltext\n", walltimestamp);
    printf("  connection=0x%p\n", (void *)arg0);
    printf("  client_id=\"%s\"\n", arg1 ? copyinstr(arg1) : "");
    printf("  statement=0x%p\n", (void *)arg2);
    printf("  sql=\"%s\"\n", arg3 ? copyinstr(arg3) : "");
}

php*:::oci8-execute-mode
{
    printf("%lld: PHP oci8-execute-mode\n", walltimestamp);
    printf("  connection=0x%p\n", (void *)arg0);
    printf("  client_id=\"%s\"\n", arg1 ? copyinstr(arg1) : "");
    printf("  statement=0x%p\n", (void *)arg2);
    printf("  mode=0x%x\n", arg3);
}

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 :

# ./user_oci8_probes.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 :

1381794982092854582: PHP connect-entry
  credentials="hr@localhost/pdborcl"
  charset=""
  session_mode=0
  persistent=0
  exclusive=0
1381794982183158766: PHP oci8-connect-return
  connection=0x7f4a7907bfb8
1381794982183594576: PHP oci8-sqltext
  connection=0x7f4a7907bfb8
  client_id="Chris"
  statement=0x7f4a7907c2a0
  sql="select * from employees"
1381794982183783706: PHP oci8-execute-mode
  connection=0x7f4a7907bfb8
  client_id="Chris"
  statement=0x7f4a7907c2a0
  mode=0x20
1381794982444344390: PHP oci8-connect-close
  connection=0x7f4a7907bfb8

Lorsque la surveillance se termine, le script D peut s'arrêter avec la combinaison ^C.

Rechercher une fonction PHP

Version en cache

22/11/2024 06:39:05 Cette version de la page est en cache (à la date du 22/11/2024 06:39:05) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.

Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-oci8.dtrace.html

L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.

Références

  1. Consulter le document html Langue du document :fr Manuel PHP : http://php.net

Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.

Table des matières Haut