OPTIMISER PHP & MYSQL

RASMUS LERDORF, le créateur de PHP, nous gratifie d’un SlideShow (uniquement visible sous FIREFOX ou SAFARI) qui nous explique comment optimiser les développements en PHP/MySql afin de diminuer les coûts d’infrastructure et le fameux T.C.O (coût de possession du matériel informatique : Total Cost of Ownership in english).

Il part d’un exemple simple : Un site de 500.000 utilisateurs faisant une moyenne quotidienne de 100 requêtes.
Ce qui donne 578 requêtes par secondes, multiplié par 3 du fait que le traffic ne pas également distribué sur une journée, soit à peu près 1700 requêtes par seconde à gérer.Après analyse de l’infrastructure intiale et d’un codage simple de quelques pages et quelques includes, le benchmark de cette petite application utilisée par 500.000 utilisateurs nécessite 100 serveurs (il ne traite que 17 requêtes par seconde).

Il enlève dans le fichier Postgresql.conf l’appel à SSL; Résultat : on passe à 108 requêtes par seconde. Il faut encore une vingtaine de serveurs

Ensuite c’est le temps d’accès à la base de données qui prend 10% du temps global, on met donc en place les connections persistentes.
Résultat : on passe à 339 requêtes par seconde et il ne faut plus que 5 serveurs.

Puis on passe de :‘db_opts’ => array(PDO::ERRMODE_EXCEPTION => true, PDO::ATTR_PERSISTENT => true)
à
‘db_opts’ => array(PDO::ERRMODE_EXCEPTION => true,
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_EMULATE_PREPARES=>true)

Le passage de Query en accès par les API Prepare/Execute de MySQLà des accès directs permet de monter à un traitement par le serveur de 580 requêtes par seconde et il ne faut plus que 3 serveurs. Les tables MyIsam ou InnoDb procurent les mêmes chiffres, et Sqlite3 est un peu moins performant mais pas beaucoup plus (550 requêtes/secondes).

La mise en place d’un gestionnaire de cache comme APC donne 805 requêtes/secondes. La Gestion de cache se satisfait mal des appels fréquent à des include_once ou require_once. On les remplace par des REQUIRE simples. Résultat : 875 requêtes par seconde.

L’optimisation dans le php.ini d’APC, et l’ajout d’une instruction sous ‘db_opts’ égale à ‘path’ => getcwd()
et quelque modification dans le code de l’application pour prendre en compte ces paramètres, nous amène à 885 requêtes par seconde, soit 2 serveurs.

APC permet aussi de configurer le stockage des variables PHP en mémoire partagée. Résultat : 890 requêtes par seconde.
Si l’on pousse un peu, on peut aussi stocker les résultats des requêtes à la base de données pendant 5 minutes en cache. Résultat : 1080 requêtes par seconde.

Enfin le remplacement des “includes”, l’ajout de fonctions et la suppression de certains “Require”, nous amène à 1100 requêtes par seconde.
Nous n’atteignons pas les 1700 requêtes par seconde nécessaires au traitement des consultations par les internautes, mais nous y sommes presque.
On est passé de 100 à 2 serveurs : Que d’économies associées !!!

Une réponse à “OPTIMISER PHP & MYSQL”

  1. Fabien dit :

    Vraiment un billet magnifique…
    Pour le moment, je m’etais jamais trop posé la question de l’optimisation mais ça montre à quel point on peut faire des miracles avec quelques astuces

Laisser un commentaire