2017-09-21 7 views
0

Mes outils sont les suivantsPuis-je améliorer les performances de oci8 en utilisant PHP7?

  • serveur Ubuntu 16
  • PHP7
  • oci8
  • CodeIgniter
  • Oracle DB

Je php7 avec oci8 en cours d'exécution avec succès en installant la base et devel fichiers .rpm à partir du site Web d'Oracle.

Je peux me connecter avec succès à ma base de données Oracle et renvoyer des données via ma page Web. Le problème que j'ai est le temps d'exécuter la requête est environ deux fois plus long que c'est sur mon serveur PRD qui utilise une connexion ODBC et un pilote de l'oracle réel sur OS X (Mac). Je ne sais pas pourquoi la performance serait deux fois plus lente. Surtout en considérant les capacités matérielles de ce serveur sont beaucoup plus puissants.

Toute aide est grandement appréciée.

Merci

EDIT: Après avoir mesuré en fait les temps d'exécution seule, on dirait qu'ils sont vraiment plus rapide sur le nouveau serveur. Le chargement de la page semble être plus lent à cause du pilote oci8 de codeigniter, je devrais deviner.

Répondre

1

DRCP Connection Pooling

PHP de 5,3 (PECL OCI8 1.3) prend en charge la connexion de résident Oracle Database Pooling (DRCP). DRCP permet une utilisation plus efficace de la mémoire de la machine de base de données et offre une grande évolutivité. Non, ou minime, des modifications d'application sont nécessaires pour utiliser DRCP. DRCP convient aux applications qui se connectent à l'aide de quelques schémas de base de données et qui maintiennent les connexions de base de données ouvertes pour une courte période de temps. Les autres applications doivent utiliser les processus de serveur de base de données Dedicated par défaut d'Oracle ou utiliser des serveurs partagés. DRCP bénéficie des trois fonctions de connexion, mais offre la meilleure évolutivité lorsque les connexions sont créées avec oci_pconnect().

Pour que DRCP soit disponible dans OCI8, les bibliothèques client Oracle utilisées par PHP et la version de la base de données Oracle doivent avoir une taille de 11 g ou plus.

La documentation sur DRCP se trouve dans plusieurs manuels Oracle. Par exemple, reportez-vous à la section »Configuration du pool de connexions résidantes de la base de données dans la documentation Oracle pour plus d'informations sur l'utilisation. Un livre blanc DRCP contient des informations générales sur le DRCP.

Pour utiliser DRCP, compiler PHP avec le OCI8 1.3 (ou version ultérieure) et l'extension des bibliothèques Oracle 11g (ou version ultérieure), puis procédez comme suit:

As a privileged database administrator, use a program like SQL*Plus to start the connection pool in the database: 

    SQL> execute dbms_connection_pool.start_pool; 

Optionally use dbms_connection_pool.alter_param() to configure DRCP settings. The current pool settings can be queried from the DBA_CPOOL_INFO view. 

Update the connection strings used. For PHP applications that currently connect using a Network Connect Name like MYDB: 

    $c = oci_pconnect("myuser", "mypassword", "MYDB"); 

modify the tnsnames.ora file and add a (SERVER=POOLED) clause, for example: 

    MYDB = (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=myhost.dom.com) 
      (PORT=1521))(CONNECT_DATA=(SERVICE_NAME=sales) 
      (SERVER=POOLED))) 

Alternatively, modify the Easy Connect syntax in PHP and add :POOLED after the service name: 

    $c = oci_pconnect("myuser", "mypassword", "myhost.dom.com:1521/sales:POOLED"); 

Edit php.ini and choose a connection class name. This name indicates a logical division of the connection pool and can be used to isolate pooling for separate applications. Any PHP applications with the same user name and connection class value will be able to share connections in the pool, giving greater scalability. 

    oci8.connection_class = "MY_APPLICATION_NAME" 

Run the application, connecting to the 11g (or later) database. 
+1

Cela ressemble à un excellent point de départ. Merci – magowan90

+0

@ magowan90 mon plaisir! http://php.net/manual/fr/oci8.connection.php –

+0

DRCP est destiné à l'évolutivité lorsque la machine hôte de la base de données n'a pas assez de mémoire pour gérer la charge de travail. Il n'y a rien dans la question de @ magowan90 pour indiquer que c'est le problème. –