FR EN ES

blog geek

dimanche 11 septembre 2011

MySQL Tuning Primer : une solution simple pour optimiser sa base MySQL

Vous avez un site Internet ? Vous n'y connaissez rien en MySQL ? Voici un article simple qui devrait vous permettre d'optimiser votre base MySQL avec un minimum de connaissances techniques.

1) Copiez le script MySQL Tuning Primer sur votre serveur Linux : http://launchpad.net/mysql-tuning-p...

2) Exécutez "chmod +x tuning-primer.sh" pour donner les droits d'exécution au script.

3) Exécutez le script lorsque votre serveur est en pleine activité ("./tuning-primer.sh").

4) Suivez tous les conseils de paramétrage proposés par le script.

6) Ajoutez les paramètres suivants dans la rubrique mysqld du fichier de configuration de mysql (/et/mysql/my.cnf).

log_slow_queries        = /var/log/mysql/mysql-slow.log
long_query_time = 1

7) Redémarrez votre serveur MySQL ("/etc/init.d/mysqld restart")

8) Analysez le fichier "/var/log/mysql/mysql-slow.log" pour vérifier qu'aucune requête ne s'y trouve.

9) Si des requêtes sont récurrentes dans le fichier, cela signifie que ces requêtes ont mal été pensées et que des optimisations sont à prévoir par le développeur qui a réalisé la requête. Pour vérifier le top des requêtes les plus récurrentes, vous pouvez utiliser le script "mysql_slow_log_parser" disponible ici.

samedi 2 janvier 2010

Tuning & Optimisation du site Web

dedibox.jpg

Vous le savez certainement déjà, je suis un fan de tuning de site web, c'est l'une de mes grandes passions ;-)

Suite aux nombreuses améliorations déjà réalisées il y a plusieurs mois sur ma Dédibox :

J'ai décidé d'aller plus loin en m'intéressant aux nombreuses recommandations fournies par l'excellent outil Google Page Speed et par Yahoo!.

Voici plusieurs astuces que j'ai mis en place et qui vous donneront peut-être des idées pour votre blog / site internet.

Utilisation d'un vhost pour l'hébergement des ressources statiques

J'ai tout d'abord créé un vhost static.geeek.org dédié aux contenus statiques : images publiés, thème graphique ... Dans Dotclear (plugin "about:config"), j'ai précisé le chemin de ce vhost sur mon disque et son URL visible du Web.

Le but de ce vhost est qu'il soit cookie-free, pour permettre au navigateur de récupérer les images rapidement sans devoir fournir un cookie inutile au serveur Web.

Cette optimisation permet aussi aux proxy HTTP de cacher les ressources statiques. Les proxy HTTP ne cachent pas les images qui sont appelées avec un cookie dans le header http.

Customisation du script Google Analytics

J'ai essayé de faire en sorte que tous les cookies générés par le blog soient associés au "Hostname" www.geeek.org et pas au nom de domaine global geeek.org.

Par défaut le script Google Analytics génère un cookie avec le nom de domaine de votre site. En regardant la documentation de Google Analytics, le script offre la possibilité de diminuer le "scope" du cookie à un vhost précis. Pour cela j'ai utilisé la méthode "_setDomainName" qui permet de définir le scope du cookie.

var pageTracker = _gat._getTracker("UA-605163-4");
pageTracker._setDomainName("www.geeek.org");
pageTracker._trackPageview();

En spécifiant www.geeek.org, le cookie qui est créé sur le client est spécifique au vhost qui héberge le blog. Toutes les requêtes vers les fichiers statiques présents sur static.geeek.org seront ainsi sans cookie.

Utilisation du header "Expire"

Sur un blog, tous les contenus statiques varient que très rarement : les images, les CSS, les fichiers javascripts ... Pour cette catégorie de fichiers, il est possible de définir un délai d'expiration dans la configuration de votre serveur web.

L'idéal est de définir une date d'expiration supérieure à un mois, sauf si vous avez l'habitude de changer régulièrement le thème de votre blog. Les images, les CSS, les javascripts sont ainsi cachés par les navigateurs et sont rechargés dès que leur date d'expiration est atteint où dès que l'utilisateur force le rechargement de la page (CTRL + F5).

Le fait de forcer le cache des images de votre thème peut permettre un énorme gain de bande passante. Surtout si votre thème est super travaillé.

Utilisation des Etag / If-modified-since

La norme HTTP 1.1 offre la possibilité aux clients Web de demander si le contenu d'une page web a été changé. Pour cela le navigateur, dans le cas d'une page qu'il a déjà parcourue, envoi un Etags unique ou une date de dernière modification de la page qui lui a été fourni par le serveur lors de sa dernière visite.

En fonction de ces éléments, le serveur HTTP est capable de décider par lui même s'il est nécessaire de renvoyer la page Web au client. Si nécessaire, tout le contenu de la page est envoyé au client, sinon une réponse HTTP 304 est retournée au client pour lui indiquer que la page n'a pas été modifiée.

Sur Geeek, cette vérification est réalisée dès l'entrée dans le index.php de la plateforme de blog. Cela permet dès les premières lignes de code de savoir s'il est nécessaire ou non de retourner une réponse 304 au client.

Les Etags vous permettent d'économiser du CPU et de la bande passage pour les nombreux spiders qui visitent votre site Internet à longueur de journée. Ces Etags doivent très certainement permettre à Google d'économiser des millions de Giga bytes de bande passage. Il est tout à fait possible que la gestion des Etags influent sur le ranking Google.

Par défaut Dotclear gère les Etags et les header if-modified-since, cependant cette gestion est faite à la fin du Workflow de délivrance d'une page.

Gzip des pages dans le cache

Afin de diminuer la taille du cache mémoire, la taille du trafic réseau et la quantité de CPU consommée par le serveur, les pages mises en cache mémoire sont gzippées dès leur insertion (via la fonction php gzencode)

A chaque requête HTTP d'un client, si la page est présente dans le cache, elle est retournée au client directement gzippée (si le navigateur supporte le gzip). Cela permet de réduire par 3 ou 4 la bande passante consommée par les pages HTML, et indirectement le temps de chargement de la page par le navigateur.

J'espère que ce petit article est clair, n'hésitez pas à poster un commentaire si vous trouvez ces optimisations utiles ou inutiles et si vous avez d'autres idées d'optimisations possibles.

En attendant, ma Dédibox "standard" a une charge CPU moyenne de 8% pour 200 000 hits / jour. Je pense qu'elle peut absorber au max une charge de 30 000 visiteurs journaliers.

vendredi 26 juin 2009

MTV : Pimp My Ride débarque en France

pimp my ride france mtv

.... et il ne vous reste plus que 4 jours pour poster votre candidature sur le site officiel MTV.

La date limite d'inscription est fixée au 30 juin 2009.

http://community.mtv.fr/groups/pimp-my-ride-france

La bonne nouvelle c'est que c'est Ramzy le présentateur ;-)

Alors qui dépose un dossier ? Un Pimp my ride façon tuning Geek , ça vous dit ?

lundi 9 mars 2009

Un PC avec 6TB de disque dur ça vous dit ?

Un déjanté s'est amusé à connecter un PC à 24 disques durs. Puissance totale de lecture de la machine : 2Gb/sec

Très impressionnant ! c'est EDF qui doit être content ;-)

La consommation d'énergie doit être équivalente celle d'un micro-onde en marche ...

samedi 11 août 2007

Tuning Dotclear2 et Apache

tuning,apache,dotclear2

Suite aux petits problèmes de performance rencontrés ces derniers jours sur mon blog (à cause de mon article sur le virus MSN en autre .. merci aux 3000 visiteurs journalier de cet article), j'ai réussi à optimiser la consommation CPU de mon serveur Web en modifiant plusieurs paramètres sur Dotclear2 et Apache :


Voici la liste des optimisations que j'ai mises en place, je n'ai pas de chiffres exactent qui permettent de quantifier le gain de performance obtenu par ces modifications, cependant le rendu utilisateur est plus appréciable qu'avant et la consomation CPU du serveur n'exède plus les 50%. :

Patch de Dotclear2 pour le support des connexions MySQL persistantes

Après avoir modifié le code de Dotclear2 pour utiliser des connexions persistantes, j'ai obtenu un gain de CPU notable sur le processus MySQL. Les connexions MySQL de Dotclear2 restent désormais ouvertes et sont réutilisées à chaque accès au blog.

Pour plus d'infos sur la modification à réaliser dans les sources de Dotclear 2, vous pouvez vous référer à l'article que j'ai posté sur ce sujet.

Suppression des plugins PostViewCount & Visite

En supervisant les threads actifs de la base MySQL (via l'outil MySQL Administrator), je me suis rendu compte qu'il y avait un goulot d'étranglement au niveau des plugins "Visites" et "PostViewCount". Chaque demande de page provoquait un UPDATE sur une ligne en base de données. Les UPDATE ne pouvant se faire en parallèle, plusieurs threads étaient en attente que la ressource se libère pour mettre à jour leur donnée en base. Enfin les UPDATE sont coûteux en CPU et en IO, les éviter est une bonne chose ...

Deux optimisations sont possibles :

  • Remplacer les UPDATE par des REPLACE dans le cas de MySQL. Le REPLACE est plus performant que le UPDATE.
  • Utiliser un cache mémoire (ex: eaccelerator_get & eaccelerator_push) pour stocker les données de visite et de flusher ce cache toutes les 10 minutes par exemple pour éviter les nombreux UPDATE en base.

Dans mon cas, j'ai supprimé les deux plugins de mon installation Dotclear 2..

Modification de la configuration Apache

J'ai supprimé l'option "AllowOveride All" contenu dans la configuration Apache qui force Apache à vérifier la présence de fichiers ".htaccess" dans le répertoire qui contient les pages Web (DotcumentRoot) à chaque requête HTTP. Maintenant, quand une requête HTTP est réalisée, plus aucun fichier ".htaccess" n'est recherché par le serveur Web.

Toutes les informations qui étaient contenues dans le fichier ".htaccess" ont été copiée dans le fichier httpd.conf.

Remplacement du serveur Apache par Lighttpd

Lighttpd est un serveur ultra léger est très rapide, il consomme beaucoup moins de RAM qu'Apache. Il est souvent utilisé en serveur Web frontal pour servir les données statiques directement aux clients et pour rediriger les données dynamiques vers un serveur Apache situé sur un autre port de la machine. Cela permet ainsi d'éviter d'utiliser des gros threads Apache/Php pour délivrer du contenu statique et donc de faire de l'économie de RAM et avoir des temps de chargement de page plus rapides.

J'ai fait deux trois tests, et j'ai finalement laissé tombé l'idée d'utiliser Lighttpd sur mon serveur, car cela pose trop de problèmes vis à vis des sites existants. Il y trop de modifications à réaliser ....

Pour plus d'informations sur les optimisations Apache, Je vous conseille la lecture ce cet excellent article.


P.S.: Pour l'image en tête d'article, après avoir fait des recherches sur le mot Apache, Dotclear et Tuning, j'ai bizarrement trouvé les images liées au tuning beaucoup plus intéressantes que les plumes du logo d'Apache ...

- page 1 de 2

# Suivez Geeek ;-)



# A propos de l'auteur

Geeek est un blog édité par Ludovic Toinel.

Avec plus de 18 000 lecteurs RSS et plus de 100 000 visites par mois, Geeek est un blog dynamique avec une bonne visibilité.

En savoir plus ...


ipv6 tracker