<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Magentips &#187; performance</title>
	<atom:link href="http://www.magentips.com/tag/performance/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.magentips.com</link>
	<description>La boîte à outils des utilisateurs de Magento : ressources, analyses, trucs et astuces, dossiers, extensions, tests</description>
	<lastBuildDate>Thu, 02 Feb 2012 23:18:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Purger les sessions Magento, c&#8217;est utile !</title>
		<link>http://www.magentips.com/2010/01/purger-sessions-magento/</link>
		<comments>http://www.magentips.com/2010/01/purger-sessions-magento/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 21:31:26 +0000</pubDate>
		<dc:creator>Christophe</dc:creator>
				<category><![CDATA[2. Intermédiaire]]></category>
		<category><![CDATA[3. Avancé]]></category>
		<category><![CDATA[4. Expert]]></category>
		<category><![CDATA[CE 1.3.x]]></category>
		<category><![CDATA[CE 1.4.x]]></category>
		<category><![CDATA[EE 1.6.x]]></category>
		<category><![CDATA[EE 1.7.x]]></category>
		<category><![CDATA[Exploitation]]></category>
		<category><![CDATA[Hébergement]]></category>
		<category><![CDATA[Magento Community Edition]]></category>
		<category><![CDATA[Magento Enterprise Edition]]></category>
		<category><![CDATA[Trucs et astuces]]></category>
		<category><![CDATA[optimisation]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[serveur]]></category>
		<category><![CDATA[session]]></category>

		<guid isPermaLink="false">http://www.magentips.com/?p=427</guid>
		<description><![CDATA[Magento dispose d&#8217;un outil d&#8217;installation rapide, simple et efficace, mais une fois que vous avez passé les 5 minutes de cette opération basique, il reste 99,99 % du travail à faire avant d&#8217;ouvrir le site au public. Parmi les petits trucs qu&#8217;il vaut mieux ne pas oublier sur un serveur à fort trafic, il y [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Site officiel Magento" href="http://www.magentocommerce.com/">Magento</a> dispose d&#8217;un outil d&#8217;installation rapide, simple et efficace, mais une fois que vous avez passé les 5 minutes de cette opération basique, il reste 99,99 % du travail à faire avant d&#8217;ouvrir le site au public.</p>
<p>Parmi les petits trucs qu&#8217;il vaut mieux ne pas oublier sur un serveur à fort trafic, il y a la <strong>purge des sessions Magento</strong>. Si vous choisissez de stocker les sessions utilisateurs dans des fichiers (l&#8217;autre option étant de les stocker dans la base de données), ils viendront s&#8217;ajouter les uns après les autres dans le dossier <code>var/session</code> de Magento, sans jamais être supprimés.</p>
<p>Le problème, c&#8217;est qu&#8217;un serveur, même puissant et bien optimisé, accepte mal plusieurs millions de fichiers dans un seul dossier. Il devient même impossible de faire une simple commande <code>ls</code> pour lister son contenu : le serveur vous rendra la main plusieurs heures après&#8230; s&#8217;il y parvient !</p>
<p>Il faut donc <strong>purger les fichiers de sessions régulièrement</strong>. Les plus pressés feront un simple <code>rm -rf</code> du dossier <code>session</code>. C&#8217;est basique mais un peu brutal. Les utilisateurs et clients connectés ne vont pas forcément apprécier la perte de leur session et des commandes en cours&#8230;</p>
<p>J&#8217;ai eu le cas aujourd&#8217;hui sur un serveur dont la purge n&#8217;avait pas été mise en place. Avant de l&#8217;ajouter, j&#8217;ai vérifié que je pouvais gagner les longues minutes de purge de plus d&#8217;un millions de fichiers en supprimant directement le dossier <code>session</code>. Un rapide contrôle du trafic, des sessions et des commandes en cours : aïe, il y a trop de monde. Environ 200 sessions probables (selon temps de visite moyen) avec un taux de transformation de 6% et un panier moyen de 90€, ça me donne&#8230; <strong>1080 € de pertes pour une simple commande <code>rm -rf</code> !</strong> Un peu cher, je trouve. J&#8217;exécute donc une purge par date de fichiers et je laisse faire le serveur :</p>
<pre>find . -atime +1 | xargs rm -f
</pre>
<p>90 minutes plus tard, tous les fichiers non utilisés depuis 48h sont supprimés (oui, +1 donne bien 2 jours, et non 1&#8230;). Je n&#8217;en ai plus &laquo;&nbsp;que&nbsp;&raquo; quelques milliers. Il reste à <strong>automatiser cette commande via crontab</strong> (en ajoutant les chemins absolus, bien entendu) et le tour est joué.</p>
<p>Sauf qu&#8217;il y a encore moyen d&#8217;améliorer tout ça, comme par exemple monter le dossier <code>var</code> de Magento en RAM. On gagne énormément en performances sur la gestions des sessions et du cache. Mais c&#8217;est une autre histoire&#8230;</p>
<p>Au passage , cette petite anecdote montre aussi qu&#8217;il ne faut <strong>jamais perdre de vue le métier de son client ou employeur</strong>. Certaines opérations menées sans réflexion et sans contrôle peuvent rapidement coûter très cher sur un site e-commerce. Il faut <strong>avoir en permanence le réflex d&#8217;évaluer la perte d&#8217;exploitation liée à une opération, même minime</strong>. En fin de mois, le cumul peut représenter bien plus que le salaire perçu&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.magentips.com/2010/01/purger-sessions-magento/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flat catalog : attention à la configuration des attributs</title>
		<link>http://www.magentips.com/2009/12/flat-catalog-configuration-attributs/</link>
		<comments>http://www.magentips.com/2009/12/flat-catalog-configuration-attributs/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 00:33:24 +0000</pubDate>
		<dc:creator>Christophe</dc:creator>
				<category><![CDATA[3. Avancé]]></category>
		<category><![CDATA[4. Expert]]></category>
		<category><![CDATA[Administration]]></category>
		<category><![CDATA[Catalogue]]></category>
		<category><![CDATA[CE 1.3.0]]></category>
		<category><![CDATA[CE 1.3.1]]></category>
		<category><![CDATA[CE 1.3.1.1]]></category>
		<category><![CDATA[CE 1.3.2]]></category>
		<category><![CDATA[CE 1.3.2.1]]></category>
		<category><![CDATA[CE 1.3.2.2]]></category>
		<category><![CDATA[CE 1.3.2.3]]></category>
		<category><![CDATA[CE 1.3.2.4]]></category>
		<category><![CDATA[CE 1.3.x]]></category>
		<category><![CDATA[CE 1.4.0.0]]></category>
		<category><![CDATA[CE 1.4.x]]></category>
		<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Développement web]]></category>
		<category><![CDATA[Données]]></category>
		<category><![CDATA[EE 1.6.0.0]]></category>
		<category><![CDATA[EE 1.6.x]]></category>
		<category><![CDATA[Exploitation]]></category>
		<category><![CDATA[Magento Community Edition]]></category>
		<category><![CDATA[Magento Enterprise Edition]]></category>
		<category><![CDATA[Trucs et astuces]]></category>
		<category><![CDATA[attribut]]></category>
		<category><![CDATA[EAV]]></category>
		<category><![CDATA[flat catalog]]></category>
		<category><![CDATA[optimisation]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://www.magentips.com/?p=377</guid>
		<description><![CDATA[Depuis Magento Community Edition 1.3.0, nous obtenons de bien meilleures performances sur le frontend, grâce au catalogue à plat ou flat catalog. Varien a introduit ce concept pour optimiser les temps de réponse des sites qui offrent un catalogue riche (aux alentours de 1000 produits, mais le seuil est très variable selon complexité des attributs, [...]]]></description>
			<content:encoded><![CDATA[<p>Depuis Magento Community Edition 1.3.0, nous obtenons de bien meilleures performances sur le frontend, grâce au <strong>catalogue à plat ou <em>flat catalog</em></strong>. Varien a introduit ce concept pour <strong>optimiser les temps de réponse</strong> des sites qui offrent un catalogue riche (aux alentours de 1000 produits, mais le seuil est très variable selon complexité des attributs, des jeux d&#8217;attributs et des types de produits).</p>
<p>Si l&#8217;activation du <em>flat catalog</em> est à peu près évidente (nous allons voir ça ci-après), il faut comprendre ce que fait Magento lorsqu&#8217;il crée les tables MySQL des produits à plat. Et on constate vite que, <strong>si on ne touche pas au paramétrage des attributs, on n&#8217;obtient pas du tout le résultat escompté !</strong></p>
<p><span id="more-377"></span></p>
<h3>Modèle EAV et flat catalog</h3>
<p>Ce qui fait la souplesse de Magento, c&#8217;est la gestion de ses attributs par un <a title="Modèle EAV sur Wikipedia" href="http://en.wikipedia.org/wiki/Entity-attribute-value_model">modèle EAV</a>. Chaque entité (produit, client, commande, etc.) est composée d&#8217;attributs (prix, couleur, pays, etc.) qui ont chacun une valeur (&laquo;&nbsp;100 €&nbsp;&raquo;, &laquo;&nbsp;vert&nbsp;&raquo;, &laquo;&nbsp;France&nbsp;&raquo;). Comme un site évolue vite, on doit pouvoir ajouter ou retirer des attributs aux entités. Le modèle EAV est conçu pour cela, il permet de <strong>gérer facilement des attributs et leurs valeurs, sans modifier la structure de la base de données et sans écrire une seule ligne de code</strong>.</p>
<p>C&#8217;est un avantage énorme, mais il y a une contrainte de taille : quand Magento doit récupérer une entité (un produit par exemple), il doit parcourir un nombre important de tables dans la base de données pour assembler les valeurs des attributs et reconstituer l&#8217;information. Quand il faut afficher une page de catégorie avec 50 produits qui disposent chacun de 50 attributs, on arrive vite à la limite du tolérable. Comme le temps de réponse d&#8217;un site est le critère numéro 1 dans le succès d&#8217;un site e-commerce, il fallait trouver une réponse. Vous en réviez ? Magento le fait !</p>
<p>Pour accélérer les requêtes en lecture sur la base de données, <strong>Magento va construire de nouvelles tables dont chaque champ (ou colonne) représentera un attribut et chaque enregistrement (ou ligne) les valeurs des attributs d&#8217;une entité</strong>. C&#8217;est simple et rapide !</p>
<p>Bien entendu, <strong>si le catalogue est modifié, les tables doivent être reconstruites pour stocker les nouvelles informations</strong>. On ne met donc en œuvre des entités plates que si les valeurs ne changent pas tout le temps. Inutile d&#8217;y chercher les stocks ou les prix remisés par exemple.</p>
<h3>Construire le flat catalog</h3>
<p>Maintenant que les concepts de base sont posés, il faut savoir une chose : <strong>le <em>flat catalog</em> n&#8217;existe pas par défaut</strong>. Il faut donc le créer soit même depuis l&#8217;interface d&#8217;administration.</p>
<p><strong>Pour créer un flat catalog :</strong></p>
<ul>
<li>Menu <em>Système &gt; Gestion du cache</em><br />
<img class="alignnone size-full wp-image-404" title="Construction du flat catalog" src="http://www.magentips.com/wp-content/uploads/2009/12/flat-catalog-cache.png" alt="Construction du flat catalog" width="287" height="100" /><br />
Il faut d&#8217;abord construire les tables dans MySQL, grâce à ces boutons. On a le choix d&#8217;aplatir les catégories, les produits ou les deux.</li>
<li>Menu Système &gt; Configuration &gt; Catalogue &gt; Frontend<br />
<img class="alignnone size-full wp-image-405" title="Activation du flat catalog" src="http://www.magentips.com/wp-content/uploads/2009/12/flat-catalog-activation.png" alt="Activation du flat catalog" width="470" height="97" /><br />
Si nous ne construisons pas les tables via la gestion du cache, ces deux options sont indisponibles. Mais comme nous l&#8217;avons fait, nous avons maintenant le choix d&#8217;utiliser le flat catalog sur le frontend. Pourquoi faire compliqué alors qu&#8217;une seule étape pourrait suffire ? Simplement parce que Magento peut gérer plusieurs sites. On peut avoir un <em>flat catalog</em> sur un site et pas sur l&#8217;autre.</li>
<li>Menu <em>Système &gt; Gestion du cache</em><br />
Oui, il faut y revenir pour ajouter nos entités (catégories et/ou produits) dans les tables à plat.</li>
</ul>
<p>C&#8217;est tout. Mais est-ce suffisant ? Pas du tout ! Si on analyse les tables créées, on s&#8217;aperçoit vite que <strong>tous les attributs n&#8217;y sont pas, en particulier ceux spécifiques au site</strong>.</p>
<p><img class="alignnone size-medium wp-image-406" title="Flat table par défaut" src="http://www.magentips.com/wp-content/uploads/2009/12/flat-catalog-table1-246x700.png" alt="Flat table par défaut" width="246" height="700" /></p>
<p>Si nous voulons afficher des valeurs d&#8217;attributs sans tuer les performances du serveur, il faut les ajouter à la structure des tables à plat. Pas de panique, inutile de faire ce sale boulot par des requêtes SQL hasardeuses. <strong>Magento a tout prévu&#8230; sauf de documenter ce détail essentiel !</strong></p>
<h3>Définir les attributs à aplatir</h3>
<p>Quand nous demandons la construction du <em>flat catalog</em>, Magento utilise l&#8217;<em>Indexer</em> du module <em>Catalog</em> qui contient des contrôles sur la configuration des attributs (fichier Mage\Catalog\Model\Resource\Eav\Mysql4\Product\Flat\Indexer.php). Il contrôle notamment l&#8217;état du paramètre <code>used_in_product_listing</code>. S&#8217;il est égal à 1, l&#8217;attribut est intégré au <em>flat catalog</em>.</p>
<p>Reste à savoir d&#8217;où vient cet état. Une petite recherche (<a title="Explorer Magento avec nWire" href="http://www.magentips.com/2009/12/explorer-magento-avec-nwire/">merci nWire !</a>) et le voici, caché dans la configuration d&#8217;attribut (fichier Adminhtml\Block\Catalog\Product\Attribute\Edit\Tab\Main.php). On a la solution.</p>
<p><strong>Pour ajouter un attribut dans le flat catalog :</strong></p>
<ul>
<li>Menu <em>Catalogue &gt; Attributs &gt; Gérer les attributs</em><br />
Sélectionner l&#8217;attribut à &laquo;&nbsp;aplatir&nbsp;&raquo;.</li>
<li>Volet <em>Propriétés du front-office</em><br />
<img class="alignnone size-full wp-image-407" title="Configuration de l'attribut pour le flat catalog" src="http://www.magentips.com/wp-content/uploads/2009/12/flat-catalog-attribut.png" alt="Configuration de l'attribut pour le flat catalog" width="467" height="55" /><br />
C&#8217;est là que se cache l&#8217;option. Il faut choisir <em>Oui</em> et sauvegarder l&#8217;attribut.</li>
<li>Menu <em>Système &gt; Gestion du cache</em><br />
On reconstruit le cache.</li>
</ul>
<p>Le résultat est nettement meilleur. J&#8217;ai maintenant mon attribut dans mon <em>flat catalog</em> (ici <em>manufacturer</em>). Et un mystère de moins !</p>
<p><img class="alignnone size-medium wp-image-408" title="Table plate après insertion d'attributs" src="http://www.magentips.com/wp-content/uploads/2009/12/flat-catalog-table2-234x700.png" alt="Table plate après insertion d'attributs" width="234" height="700" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.magentips.com/2009/12/flat-catalog-configuration-attributs/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

