web-dev-qa-db-fra.com

Si je considère changer mes tables de base de données WordPress en InnoDB, cela aura-t-il un effet sur le fonctionnement de WordPress?

J'ai trouvé un superbe article ici sur l'optimisation de WordPress pour les grandes installations.

L'une des étapes fait référence à lighthttpd qui semble excellente mais qui n'est actuellement pas prise en charge par DirectAdmin. La dernière fois que j'ai joué avec une installation non-DA, j'ai réussi à casser mon serveur et j'ai dû payer un professionnel pour le faire réparer ...

Une de ses autres étapes consiste à ALTER toutes mes tables MySQL pour utiliser le moteur InnoDB au lieu de MyISAM.

Cela me plaît, car il semblerait que cela résoudrait certains des les principaux problèmesque j’ai eu - c’est-à-dire des verrous de table. Voici un exemple de SHOW PROCESSLIST; de MySQL, y compris les instructions SQL:

| 17181 | my_db | localhost | my_db | Query   | 35117 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'boraras-brigittae' AND wp_po |
| 17182 | my_db | localhost | my_db | Query   | 35118 | Waiting for table level lock | SELECT post_modified_gmt FROM wp_posts WHERE post_status = 'publish' AND post_type IN ('post', 'page |
| 17183 | my_db | localhost | my_db | Query   | 35117 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'boraras-brigittae' AND wp_po |
| 17184 | my_db | localhost | my_db | Query   | 35117 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'boraras-brigittae' AND wp_po |
| 17185 | my_db | localhost | my_db | Query   | 35041 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'akysis-vespa' AND wp_posts.p |
| 17186 | my_db | localhost | my_db | Query   | 35050 | Waiting for table level lock | SELECT ID, post_name, post_parent FROM wp_posts WHERE post_name IN ('images','profiledotline-gif') A |
| 17187 | my_db | localhost | my_db | Query   | 35050 | Waiting for table level lock | SELECT ID, post_name, post_parent FROM wp_posts WHERE post_name IN ('images','picarrow-gif') AND (po |
| 17188 | my_db | localhost | my_db | Query   | 35043 | Waiting for table level lock | SELECT post_modified_gmt FROM wp_posts WHERE post_status = 'publish' AND post_type IN ('post', 'page |
| 17189 | my_db | localhost | my_db | Query   | 35041 | Waiting for table level lock | SELECT ID, post_name, post_parent FROM wp_posts WHERE post_name IN ('m','marginal') AND (post_type = |
| 17190 | my_db | localhost | my_db | Query   | 34989 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'piaractus-brachypomus' AND w |
| 17191 | my_db | localhost | my_db | Query   | 34989 | Waiting for table level lock | SELECT ID, post_name, post_parent FROM wp_posts WHERE post_name IN ('w','wet-dry-filter') AND (post_ |
| 17192 | my_db | localhost | my_db | Query   | 34990 | Waiting for table level lock | SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'post' AN |
| 17193 | my_db | localhost | my_db | Query   | 34954 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'corydoras-sterbai' AND wp_po |
| 17194 | my_db | localhost | my_db | Query   | 34954 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'piaractus-brachypomus' AND w |
| 17195 | my_db | localhost | my_db | Query   | 34955 | Waiting for table level lock | SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'post' AN |
| 17196 | my_db | localhost | my_db | Query   | 34954 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'piaractus-brachypomus' AND w |
| 17197 | my_db | localhost | my_db | Query   | 34897 | Waiting for table level lock | SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'post' AN |
| 17198 | my_db | localhost | my_db | Query   | 34955 | Waiting for table level lock | SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'post' AN |
| 17199 | my_db | localhost | my_db | Query   | 34898 | Waiting for table level lock | SELECT post_modified_gmt FROM wp_posts WHERE post_status = 'publish' AND post_type IN ('post', 'page |
| 17200 | my_db | localhost | my_db | Query   | 34897 | Waiting for table level lock | SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'post' AN |
| 17201 | my_db | localhost | my_db | Query   | 34898 | Waiting for table level lock | SELECT ID, post_name, post_parent FROM wp_posts WHERE post_name IN ('forums','lofiversion','index-ph |
| 17202 | my_db | localhost | my_db | Query   | 34897 | Waiting for table level lock | SELECT ID, post_name, post_parent FROM wp_posts WHERE post_name IN ('forums') AND (post_type = 'page |
| 17204 | my_db | localhost | my_db | Query   | 34897 | Waiting for table level lock | SELECT post_modified_gmt FROM wp_posts WHERE post_status = 'publish' AND post_type IN ('post', 'page |
| 17205 | my_db | localhost | my_db | Query   | 34897 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'sawbwa-resplendens' AND wp_p |
| 17206 | my_db | localhost | my_db | Query   | 34897 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'badis-sp-buxar' AND wp_posts |
| 17207 | my_db | localhost | my_db | Query   | 34898 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'melanotaenia-boesemani' AND  |
| 17208 | my_db | localhost | my_db | Query   | 34898 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'betta-prima' AND wp_posts.po |
| 17209 | my_db | localhost | my_db | Query   | 34865 | Waiting for table level lock | SELECT ID, post_name, post_parent FROM wp_posts WHERE post_name IN ('forums') AND (post_type = 'page |
| 17210 | my_db | localhost | my_db | Query   | 34897 | Waiting for table level lock | SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'post' AN |
| 17211 | my_db | localhost | my_db | Query   | 34898 | Waiting for table level lock | SELECT post_modified_gmt FROM wp_posts WHERE post_status = 'publish' AND post_type IN ('post', 'page |
| 17213 | my_db | localhost | my_db | Query   | 34864 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'piaractus-brachypomus' AND w |
| 17214 | my_db | localhost | my_db | Query   | 34864 | Waiting for table level lock | SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'post' AN |
| 17215 | my_db | localhost | my_db | Query   | 34864 | Waiting for table level lock | SELECT ID, post_name, post_parent FROM wp_posts WHERE post_name IN ('knowledge-base') AND (post_type |
| 17216 | my_db | localhost | my_db | Query   | 34865 | Waiting for table level lock | SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'post' AN |
| 17217 | my_db | localhost | my_db | Query   | 34864 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'piaractus-brachypomus' AND w |
| 17218 | my_db | localhost | my_db | Query   | 34864 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'badis-sp-buxar' AND wp_posts |
| 17219 | my_db | localhost | my_db | Query   | 34864 | Waiting for table level lock | SELECT ID, post_name, post_parent FROM wp_posts WHERE post_name IN ('forums','lofiversion','index-ph |
| 17220 | my_db | localhost | my_db | Query   | 34864 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'betta-prima' AND wp_posts.po |
| 17221 | my_db | localhost | my_db | Query   | 34864 | Waiting for table level lock | SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'post' AN |
| 17222 | my_db | localhost | my_db | Query   | 34865 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'piaractus-brachypomus' AND w |
| 17223 | my_db | localhost | my_db | Query   | 34864 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'piaractus-brachypomus' AND w |
| 17224 | my_db | localhost | my_db | Query   | 34865 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'hemichromis-lifalili' AND wp |
| 17225 | my_db | localhost | my_db | Query   | 34864 | Waiting for table level lock | SELECT post_modified_gmt FROM wp_posts WHERE post_status = 'publish' AND post_type IN ('post', 'page |
| 17226 | my_db | localhost | my_db | Query   | 34862 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'apistogramma-borellii' AND w |
| 17227 | my_db | localhost | my_db | Query   | 34863 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'melanotaenia-lacustris' AND  |
| 17228 | my_db | localhost | my_db | Query   | 34862 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'melanotaenia-lacustris' AND  |
| 17229 | my_db | localhost | my_db | Query   | 34861 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'mikrogeophagus-altispinosus' |
| 17230 | my_db | localhost | my_db | Query   | 34861 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.ID = 25503 AND wp_posts.post_type = 'atta |
| 17231 | my_db | localhost | my_db | Query   | 34803 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'piaractus-brachypomus' AND w |
| 17232 | my_db | localhost | my_db | Query   | 34803 | Waiting for table level lock | SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'post' AN |
| 17233 | my_db | localhost | my_db | Query   | 34803 | Waiting for table level lock | SELECT ID, post_name, post_parent FROM wp_posts WHERE post_name IN ('knowledge-base') AND (post_type |
| 17234 | my_db | localhost | my_db | Query   | 34803 | Waiting for table level lock | SELECT post_modified_gmt FROM wp_posts WHERE post_status = 'publish' AND post_type IN ('post', 'page |
| 17235 | my_db | localhost | my_db | Query   | 34803 | Waiting for table level lock | SELECT ID, post_name, post_parent FROM wp_posts WHERE post_name IN ('forums') AND (post_type = 'page |
| 17236 | my_db | localhost | my_db | Query   | 34803 | Waiting for table level lock | SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'post' AN |
| 17237 | my_db | localhost | my_db | Query   | 34803 | Waiting for table level lock | SELECT ID, post_name, post_parent FROM wp_posts WHERE post_name IN ('forums') AND (post_type = 'page |
| 17238 | my_db | localhost | my_db | Query   | 34788 | Waiting for table level lock | SELECT ID, post_name, post_parent FROM wp_posts WHERE post_name IN ('m','migrate') AND (post_type =  |
| 17239 | my_db | localhost | my_db | Query   | 34788 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'hemichromis-lifalili' AND wp |
| 17240 | my_db | localhost | my_db | Query   | 34788 | Waiting for table level lock | SELECT post_modified_gmt FROM wp_posts WHERE post_status = 'publish' AND post_type IN ('post', 'page |
| 17241 | my_db | localhost | my_db | Query   | 34788 | Waiting for table level lock | SELECT ID, post_name, post_parent FROM wp_posts WHERE post_name IN ('forums') AND (post_type = 'page |
| 17242 | my_db | localhost | my_db | Query   | 34788 | Waiting for table level lock | SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'post' AN |
| 17243 | my_db | localhost | my_db | Query   | 34788 | Waiting for table level lock | SELECT post_modified_gmt FROM wp_posts WHERE post_status = 'publish' AND post_type IN ('post', 'page |
| 17244 | my_db | localhost | my_db | Query   | 34788 | Waiting for table level lock | SELECT ID, post_name, post_parent FROM wp_posts WHERE post_name IN ('forums','lofiversion','index-ph |
| 17245 | my_db | localhost | my_db | Query   | 34788 | Waiting for table level lock | SELECT post_modified_gmt FROM wp_posts WHERE post_status = 'publish' AND post_type IN ('post', 'page |
| 17246 | my_db | localhost | my_db | Query   | 34788 | Waiting for table level lock | SELECT post_modified_gmt FROM wp_posts WHERE post_status = 'publish' AND post_type IN ('post', 'page |
| 17247 | my_db | localhost | my_db | Query   | 34788 | Waiting for table level lock | SELECT ID, post_name, post_parent FROM wp_posts WHERE post_name IN ('forums') AND (post_type = 'page |
| 17248 | my_db | localhost | my_db | Query   | 34788 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'geophagus-brokopondo' AND wp |
| 17249 | my_db | localhost | my_db | Query   | 34788 | Waiting for table level lock | SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'hyphessobrycon-amandae' AND  |
| 17253 | my_db | localhost | my_db | Query   | 34788 | Waiting for table level lock | SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'post' AN |
| 17255 | my_db | localhost | my_db | Query   | 34786 | Waiting for table level lock | SELECT ID, post_name, post_parent FROM wp_posts WHERE post_name IN ('knowledge-base') AND (post_type |
| 17260 | my_db | localhost | my_db | Query   | 34786 | Waiting for table level lock | SELECT ID, post_name, post_parent FROM wp_posts WHERE post_name IN ('s','silver-sand') AND (post_typ |
| 17262 | my_db | localhost | my_db | Query   | 34786 | Waiting for table level lock | SELECT ID, post_name, post_parent FROM wp_posts WHERE post_name IN ('forums') AND (post_type = 'page |
| 25505 | root      | localhost | NULL      | Query   |     2 | NULL                         | SHOW PROCESSLIST   

J'ai activé le slow-query-log et le résultat (ayant été exécuté à l'aide d'un script d'analyse) peut être trouvé ici .

Cependant, comme j'ai essayé de ALTER mes tables, l'erreur suivante s'est produite le wp_posts: ERROR 1214 (HY000) at line 14: The used table type doesn't support FULLTEXT indexes

Donc, mes questions sont un peu triples, mais en un seul:

  • Puis-je utiliser InnoDB et conserver les INDEX DE TOTAL TEXTE que WordPress semble utiliser?
  • L’utilisation d’InnoDB aidera-t-elle à résoudre les problèmes que je rencontrais avec les serrures de table?
  • Puis-je utiliser InnoDB sans nuire à mon installation WordPress? *

* J'ai une myriade de plugins, y compris W3 Total Cache, Simple Forums, AdRotate et bien d'autres.

2
dunc

J'ai récemment joué avec une pile Ubuntu LAMP et une installation WordPress et j'ai envisagé de passer à InnoDB ou à NGINX.

Juste pour mettre en scène, j'avais le plugin Next Gen Gallery en marche et j'ai remarqué que ses tables étaient 'différentes'. J'ai donc pensé à étudier le passage à InnoDB.

Puis-je utiliser InnoDB sans nuire à mon installation WordPress?
Tout d’abord, ne changez pas pour InnoDB, cela cassera des choses d’une manière que vous ne pouvez pas imaginer. Et vous essayez d’optimiser votre site Web sans avoir à tout recommencer. Vous feriez mieux de travailler avec ce que vous avez en premier.

Si vous voulez voir ce qui se passe, configurez un site de test et utilisez une exportation de votre base de données actuelle, avec tous les mêmes plugins, etc. Elle générera une erreur de connexion à la base de données et vous devrez simplement vous rendre à SQLyog ou à Sequel Pro. et restaurer à partir d'une sauvegarde SQL.

Optimisation
J'ai configuré un site qui est mis à l'échelle sur deux bases de données 2 en utilisant des serveurs frontaux hyperDB 3, une charge équilibrée et un CDN. Il a été testé en charge à 2000 concurrents/30000 visiteurs par jour.

Tout cela est très bien géré avec W3 Total Cache, un serveur MemCached, Hyper DB et CDN. J'utilise le profil mysql par défaut pour un site Web de taille moyenne.

Dans mon cas, j'ai de la chance, le contenu ne change que toutes les semaines pour que je puisse tout mettre en cache.

Connexions Apache MaxLes profils par défaut pour Apache autoriseront un maximum de 150 clients et 1000 requêtes maximum. Ainsi, si vous avez 150 visiteurs, vous pouvez avoir 150 000 requêtes sur votre serveur.

Définissez ce paramètre sur 5 ou 15 clients maximum pour commencer par augmenter le nombre maximal de demandes à 2000 (ce qui signifie avant qu'Apache ne génère un nouveau processus).

Définissez les fils de réserve sur 1 ou 2 - Il s'agit d'une réservation de mémoire qu'Apache conserve en réserve.

Définissez le délai d'attente Keep Alive sur 15, ce qui signifie 15 secondes. Ainsi, si la même demande parvient à Apache, aucun nouveau thread n'est démarré.

voir http://www.devside.net/articles/Apache-performance-tuning

Mémoire insuffisante - Apache/database/timeout
Ce que j’ai appris sur les tables verrouillées, c’est que les sessions de base de données restent trop longtemps actives, ce qui entraîne un manque de mémoire. De l'expérience douloureuse. c'est un combo un/deux - vous pensez que vous avez besoin de davantage de connexions de base de données, vous les augmentez donc et l'effet de frappe manque de mémoire sur la base de données.

Vous n'avez pas dit pourquoi vous ne pouvez pas en mettre plus en cache et réduire le nombre de demandes de base de données? Le serveur de base de données se trouve également sur un boîtier différent d’Apache - cela fait une grande différence.

mqsql.cnf
ce sera vide par défaut ... faites un scan sous je pense usr/share/doc/mysql-serveur-5.0/examples/my-medium.cnf.gz

Je sais que j'ai commencé avec my-small.cnf et qu'après avoir séparé la base de données d'Apache, tout s'est stabilisé

Alternative PHP Cache (APC)
En référence à vos 5 étapes d’optimisation essentielles http://www.619cloud.com/blog/5-essential-steps-for-hosting-wordpress/
Vous constaterez probablement qu'APC n'est pas en cours d'exécution sur votre serveur. Qu'est-ce que W3 Total Cache vous dit lorsque vous accédez à WordPress> Performance> Général et que vous cliquez sur Contrôle de compatibilité - quels sont les résultats?

Enfin ... c'est ce que le site que j'ai installé est identique aussi ...
http://www.rackspace.com/blog/deploying-scalable-wordpress/

2
Damien

Il y a beaucoup d'informations ici sur le passage à InnoDB

https://wordpress.stackexchange.com/search?q=innodb

Il y a un certain nombre de choses à considérer:

  • InnoDB vous aide en cas de conflit - c'est-à-dire lorsque des tables sont en cours d'écriture et en cours de lecture.
  • InnoDBnotprend en charge les index FULLTEXT afin que les plugins qui en dépendent se cassent ou fonctionnent lentement.
  • Vous pouvez choisir les tables à convertir en InnoDB (ce n'est pas du tout ou rien), sur certains de mes sites, wp_comments est la seule table à être InnoDB en raison de la nature extrêmement volumineuse des commentaires sur ces sites.

Cependant, il semble que vous ayez des problèmes plus fondamentaux à résoudre avant de vous inquiéter de passer à InnoDB.

  • vousreallydevez enregistrer vos requêtes lentes, puis EXPLAIN pour comprendre ce qui se passe - vous devrez peut-être simplement optimiser les tables ou ajouter des index supplémentaires - il est fort probable que certains de vos plugins exécutent des requêtes qui forcent des recherches séquentielles sur votre base de données. Recherchez et ajoutez des index pour les accélérer, si tel est le cas.
  • Une fois que cela est fait, vous pouvez alors envisager d’optimiser Apache ou de passer à une configuration plus avancée (par exemple, nginx + PHP-FPM).
  • Vérifiez votre mise en cache. Si le site ne change pas beaucoup, la plupart du contenu devrait être servi à partir du cache plutôt que de toucher la base de données. Découvrez pourquoi cela ne se produit pas.

En bref, vous n’avez pas l’impression que vous avez vraiment trouvé les causes profondes du problème. Tant que vous ne maîtriserez pas mieux cela, tout ce que vous ferez deviendra un peu aléatoire.

2
anu