J'utilise une base Oracle avec mon appli PHP, j'utilise donc ora_logon() et
je trouve que la connexion/requête/deconn est très longue (genre 2 à 6s).
Comment peut-on optimiser ce temps de traitement ?
ora_plogon() n'apporte rien !
Des conseils ?
Puis-je stocker mon objet connection dans une session ?
Merci
PS : Voici mon code :
<?
//----------------------------------------------------------------
// Contient le user, le pass, etc...
require "_config.php";
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
John GALLET
Bonjour,
J'utilise une base Oracle avec mon appli PHP, j'utilise donc ora_logon() et je trouve que la connexion/requête/deconn est très longue (genre 2 à 6s). En effet c'est long, mais si tu traites 3 millions de rangs, rien
d'anormal ;-)
Comment peut-on optimiser ce temps de traitement ? D'abord en déterminant où on le passe. Ce qui n'est pas complètement le
cas dans ton test.
ora_plogon() n'apporte rien ! Il n' **peut** apporter quelque chose qu'à la deuxième requête, et encore,
si elle n'est pas trop éloignée de la première, et afin d'en être sûr, je ferais personnellement mes tests en forçant apache (si c'est lui que utilises) à un seul process.
Des conseils ? on va essayer.
Puis-je stocker mon objet connection dans une session ? NON et heureusement. Depuis le nombre d'années que je le répète :
$_SESSION n'est PAS une POUBELLE. On n'y fout pas des sockets actives.
// Départ chrono $t1 = Date("G")*60+Date("i")*60+Date("s"); Il y a plus simple. On s'en fout de l'heure, c'est le temps écoulé qu'on
Où se trouve php par rapport à la base oracle ? Même machine ? Comment sont définies ORACLE_SID et TWO_TASK dans l'environnement ? Est-ce qu'on a pas une requête DNS qui pourrit les perfs en indiquant le nom dns de la machine où est oracle au lieu de son IP ?
HTH JG
Bonjour,
J'utilise une base Oracle avec mon appli PHP, j'utilise donc ora_logon() et
je trouve que la connexion/requête/deconn est très longue (genre 2 à 6s).
En effet c'est long, mais si tu traites 3 millions de rangs, rien
d'anormal ;-)
Comment peut-on optimiser ce temps de traitement ?
D'abord en déterminant où on le passe. Ce qui n'est pas complètement le
cas dans ton test.
ora_plogon() n'apporte rien !
Il n' **peut** apporter quelque chose qu'à la deuxième requête, et encore,
si elle n'est pas trop éloignée de la première, et afin d'en être sûr, je
ferais personnellement mes tests en forçant apache (si c'est lui que
utilises) à un seul process.
Des conseils ?
on va essayer.
Puis-je stocker mon objet connection dans une session ?
NON et heureusement. Depuis le nombre d'années que je le répète :
$_SESSION n'est PAS une POUBELLE. On n'y fout pas des sockets actives.
// Départ chrono
$t1 = Date("G")*60+Date("i")*60+Date("s");
Il y a plus simple. On s'en fout de l'heure, c'est le temps écoulé qu'on
Où se trouve php par rapport à la base oracle ? Même machine ? Comment
sont définies ORACLE_SID et TWO_TASK dans l'environnement ? Est-ce qu'on a
pas une requête DNS qui pourrit les perfs en indiquant le nom dns de la
machine où est oracle au lieu de son IP ?
J'utilise une base Oracle avec mon appli PHP, j'utilise donc ora_logon() et je trouve que la connexion/requête/deconn est très longue (genre 2 à 6s). En effet c'est long, mais si tu traites 3 millions de rangs, rien
d'anormal ;-)
Comment peut-on optimiser ce temps de traitement ? D'abord en déterminant où on le passe. Ce qui n'est pas complètement le
cas dans ton test.
ora_plogon() n'apporte rien ! Il n' **peut** apporter quelque chose qu'à la deuxième requête, et encore,
si elle n'est pas trop éloignée de la première, et afin d'en être sûr, je ferais personnellement mes tests en forçant apache (si c'est lui que utilises) à un seul process.
Des conseils ? on va essayer.
Puis-je stocker mon objet connection dans une session ? NON et heureusement. Depuis le nombre d'années que je le répète :
$_SESSION n'est PAS une POUBELLE. On n'y fout pas des sockets actives.
// Départ chrono $t1 = Date("G")*60+Date("i")*60+Date("s"); Il y a plus simple. On s'en fout de l'heure, c'est le temps écoulé qu'on
Où se trouve php par rapport à la base oracle ? Même machine ? Comment sont définies ORACLE_SID et TWO_TASK dans l'environnement ? Est-ce qu'on a pas une requête DNS qui pourrit les perfs en indiquant le nom dns de la machine où est oracle au lieu de son IP ?
HTH JG
Julien
Salut John, j'ai testé le script que tu as écris dans ta réponse (j'ai ajouter la fonction microtime_float() trouvée dans le lien fournit), voici le résultat : <exemple> Test Oracle connection temps total : 1108482470.81 temps connexion : 1108482470.79 temps execution : 0.0176868438721 temps logout : 1108482470.79 </exemple>
résultat du code :
<code> <? // Contient le user, le pass, etc... require "_config.php"; echo "Test Oracle connection"; echo "<br />";
Sinon, la base oracle, le serveur apache et la navigateur qui teste sont tous en loaclhost, donc pas de dns au milieu. La requête ne retourne pas plus de 500 enregistrements. Pour le ora_plogon(), la 2em connexion est quasi aussi longue que la 1er. Pour ORACLE_SID et TWO_TASK, comment je teste ? Pour Apache monoproces, je suis seul client pour le moment...
Merci pour ton aide. Julien
Salut John,
j'ai testé le script que tu as écris dans ta réponse (j'ai ajouter la
fonction microtime_float() trouvée dans le lien fournit), voici le résultat
:
<exemple>
Test Oracle connection
temps total : 1108482470.81
temps connexion : 1108482470.79
temps execution : 0.0176868438721
temps logout : 1108482470.79
</exemple>
résultat du code :
<code>
<?
// Contient le user, le pass, etc...
require "_config.php";
echo "Test Oracle connection";
echo "<br />";
Sinon, la base oracle, le serveur apache et la navigateur qui teste sont
tous en loaclhost, donc pas de dns au milieu.
La requête ne retourne pas plus de 500 enregistrements.
Pour le ora_plogon(), la 2em connexion est quasi aussi longue que la 1er.
Pour ORACLE_SID et TWO_TASK, comment je teste ?
Pour Apache monoproces, je suis seul client pour le moment...
Salut John, j'ai testé le script que tu as écris dans ta réponse (j'ai ajouter la fonction microtime_float() trouvée dans le lien fournit), voici le résultat : <exemple> Test Oracle connection temps total : 1108482470.81 temps connexion : 1108482470.79 temps execution : 0.0176868438721 temps logout : 1108482470.79 </exemple>
résultat du code :
<code> <? // Contient le user, le pass, etc... require "_config.php"; echo "Test Oracle connection"; echo "<br />";
Sinon, la base oracle, le serveur apache et la navigateur qui teste sont tous en loaclhost, donc pas de dns au milieu. La requête ne retourne pas plus de 500 enregistrements. Pour le ora_plogon(), la 2em connexion est quasi aussi longue que la 1er. Pour ORACLE_SID et TWO_TASK, comment je teste ? Pour Apache monoproces, je suis seul client pour le moment...
Merci pour ton aide. Julien
John GALLET
Bonjour,
j'ai testé le script que tu as écris dans ta réponse (j'ai ajouter la fonction microtime_float() trouvée dans le lien fournit), voici le résultat Oui mais non. Ou tu utilises microtime(TRUE) si tu as php5, ou
microtime_float, mais pas un coup l'un et un coup l'autre.
temps total : 1108482470.81 temps connexion : 1108482470.79 temps execution : 0.0176868438721 temps logout : 1108482470.79
Bon, je me suis vautré dans mon code (et c'était pas mieux dans le deuxième article identique que j'ai refusé pour cause de doublon), moi j'ai depuis des années ma fonction perso fx_debug qui me gère ça toute seule sans se poser de questions.
$time_start = microtime(true); //php5 Donc on a la bonne fonction et on est en php5.
function microtime_float() Qui du coup ne sert à rien si tu utilises microtime(TRUE);
Sinon, la base oracle, le serveur apache et la navigateur qui teste sont tous en loaclhost, donc pas de dns au milieu. Oui, certes, mais si tu mets dans ton config.php le nom dns de la machine,
il y aura potentiellement une requête quand même. Donc il faut s'assurer que c'est bien 'localhost' ou '127.0.0.1' qui est passé en paramètre (et pas toto.todomaine.com, même si c'est l'identifiant de la machine).
La requête ne retourne pas plus de 500 enregistrements. Ok.
Pour le ora_plogon(), la 2em connexion est quasi aussi longue que la 1er. C'est QUOI "quasi" ? tant qu'on aura aps des chiffres précis, on perd
notre temps.
Pour ORACLE_SID et TWO_TASK, comment je teste ? Si tu es en train de me dire que tu ne sais pas vérifier la valeur d'une
variable d'environnement de tes programmes, il va falloir changer de métier ou l'apprendre... On ne s'improvise pas développeur, et ça c'est clairement la base de la base, la connaissance du système d'exploitation. Faire de l'oracle sans savoir regarder le contenu d'une variable d'environnement, c'est délirant !
Pendant qu'on y est, est-ce qu'on pourrait avoir : - sur quel OS on tourne ? - quelle version de php (apparement 5) ? - quelle version d'Oracle et de la librairie cliente ?
Pour Apache monoproces, je suis seul client pour le moment... Et alors ? S'il y a 5 thread/process d'apache qui attendent, qu'est-ce qui
te prouve que deux requêtes sucessives seront sous traitées par le même thread/process ? Si tu as une connexion Oracle permanente sur le premier process mais que ta deuxième requête passe sur un autre process, on aur RIEN testé. Si tu ne vois pas comment faire, tu regardes dans httpd.conf combien de thread/process max apache garde, puis tu éxécutes en série ce nombre fois 10 ou 20 et tu regardes si cela améliore ou pas (parce que là on a peut-être une petite chance de tous les avoir balayés)
a++; JG
Bonjour,
j'ai testé le script que tu as écris dans ta réponse (j'ai ajouter la
fonction microtime_float() trouvée dans le lien fournit), voici le résultat
Oui mais non. Ou tu utilises microtime(TRUE) si tu as php5, ou
microtime_float, mais pas un coup l'un et un coup l'autre.
temps total : 1108482470.81
temps connexion : 1108482470.79
temps execution : 0.0176868438721
temps logout : 1108482470.79
Bon, je me suis vautré dans mon code (et c'était pas mieux dans le
deuxième article identique que j'ai refusé pour cause de doublon), moi
j'ai depuis des années ma fonction perso fx_debug qui me gère ça toute
seule sans se poser de questions.
$time_start = microtime(true); //php5
Donc on a la bonne fonction et on est en php5.
function microtime_float()
Qui du coup ne sert à rien si tu utilises microtime(TRUE);
Sinon, la base oracle, le serveur apache et la navigateur qui teste sont
tous en loaclhost, donc pas de dns au milieu.
Oui, certes, mais si tu mets dans ton config.php le nom dns de la machine,
il y aura potentiellement une requête quand même. Donc il faut s'assurer
que c'est bien 'localhost' ou '127.0.0.1' qui est passé en paramètre (et
pas toto.todomaine.com, même si c'est l'identifiant de la machine).
La requête ne retourne pas plus de 500 enregistrements.
Ok.
Pour le ora_plogon(), la 2em connexion est quasi aussi longue que la 1er.
C'est QUOI "quasi" ? tant qu'on aura aps des chiffres précis, on perd
notre temps.
Pour ORACLE_SID et TWO_TASK, comment je teste ?
Si tu es en train de me dire que tu ne sais pas vérifier la valeur d'une
variable d'environnement de tes programmes, il va falloir changer de
métier ou l'apprendre... On ne s'improvise pas développeur, et ça c'est
clairement la base de la base, la connaissance du système d'exploitation.
Faire de l'oracle sans savoir regarder le contenu d'une variable
d'environnement, c'est délirant !
Pendant qu'on y est, est-ce qu'on pourrait avoir :
- sur quel OS on tourne ?
- quelle version de php (apparement 5) ?
- quelle version d'Oracle et de la librairie cliente ?
Pour Apache monoproces, je suis seul client
pour le moment...
Et alors ? S'il y a 5 thread/process d'apache qui attendent, qu'est-ce qui
te prouve que deux requêtes sucessives seront sous traitées par le même
thread/process ? Si tu as une connexion Oracle permanente sur le premier
process mais que ta deuxième requête passe sur un autre process, on aur
RIEN testé. Si tu ne vois pas comment faire, tu regardes dans httpd.conf
combien de thread/process max apache garde, puis tu éxécutes en série ce
nombre fois 10 ou 20 et tu regardes si cela améliore ou pas (parce que là
on a peut-être une petite chance de tous les avoir balayés)
j'ai testé le script que tu as écris dans ta réponse (j'ai ajouter la fonction microtime_float() trouvée dans le lien fournit), voici le résultat Oui mais non. Ou tu utilises microtime(TRUE) si tu as php5, ou
microtime_float, mais pas un coup l'un et un coup l'autre.
temps total : 1108482470.81 temps connexion : 1108482470.79 temps execution : 0.0176868438721 temps logout : 1108482470.79
Bon, je me suis vautré dans mon code (et c'était pas mieux dans le deuxième article identique que j'ai refusé pour cause de doublon), moi j'ai depuis des années ma fonction perso fx_debug qui me gère ça toute seule sans se poser de questions.
$time_start = microtime(true); //php5 Donc on a la bonne fonction et on est en php5.
function microtime_float() Qui du coup ne sert à rien si tu utilises microtime(TRUE);
Sinon, la base oracle, le serveur apache et la navigateur qui teste sont tous en loaclhost, donc pas de dns au milieu. Oui, certes, mais si tu mets dans ton config.php le nom dns de la machine,
il y aura potentiellement une requête quand même. Donc il faut s'assurer que c'est bien 'localhost' ou '127.0.0.1' qui est passé en paramètre (et pas toto.todomaine.com, même si c'est l'identifiant de la machine).
La requête ne retourne pas plus de 500 enregistrements. Ok.
Pour le ora_plogon(), la 2em connexion est quasi aussi longue que la 1er. C'est QUOI "quasi" ? tant qu'on aura aps des chiffres précis, on perd
notre temps.
Pour ORACLE_SID et TWO_TASK, comment je teste ? Si tu es en train de me dire que tu ne sais pas vérifier la valeur d'une
variable d'environnement de tes programmes, il va falloir changer de métier ou l'apprendre... On ne s'improvise pas développeur, et ça c'est clairement la base de la base, la connaissance du système d'exploitation. Faire de l'oracle sans savoir regarder le contenu d'une variable d'environnement, c'est délirant !
Pendant qu'on y est, est-ce qu'on pourrait avoir : - sur quel OS on tourne ? - quelle version de php (apparement 5) ? - quelle version d'Oracle et de la librairie cliente ?
Pour Apache monoproces, je suis seul client pour le moment... Et alors ? S'il y a 5 thread/process d'apache qui attendent, qu'est-ce qui
te prouve que deux requêtes sucessives seront sous traitées par le même thread/process ? Si tu as une connexion Oracle permanente sur le premier process mais que ta deuxième requête passe sur un autre process, on aur RIEN testé. Si tu ne vois pas comment faire, tu regardes dans httpd.conf combien de thread/process max apache garde, puis tu éxécutes en série ce nombre fois 10 ou 20 et tu regardes si cela améliore ou pas (parce que là on a peut-être une petite chance de tous les avoir balayés)