Quelle est la bonne stratégie pour planifier la croissance de la base de données WordPress?

9

En espérant avoir des commentaires sur le thème de l'optimisation et de la maîtrise des performances à mesure que la base de données WordPress se développe ... pour brosser un tableau ... supposons que vous ayez un site WordPress / Buddypress MU qui commence à environ 150 Ko ( vanilla install) ... au fil du temps, les utilisateurs ajoutent des blogs, des forums, des publications et des commentaires, et la base de données passe à 5 Mo ... puis à 10 Mo l’année suivante ... Supposant également que les contrôles d’hébergement sont une installation standard co-localisée telle que Cpanel ou Plesk.

  • À quel moment le nombre d'entrées dans la base de données a-t-il un impact sur les performances du site Web frontal?
  • Que pouvez-vous faire en tant que gestionnaire de site Web pour assurer le bon fonctionnement de ce dernier à mesure que votre base de données grandit?
  • Que pouvez-vous attendre en termes de performances après la cinquième année lorsque votre base de données a une taille de 500 à 600 Mo?

Merci pour tout commentaire que vous pourriez avoir sur le maintien d'un navire serré.

Cordialement,

S.

    
posée Simon 29.05.2012 - 17:55

3 réponses

4

Vos questions spécifiques:

1) Il n'y a pas de limite stricte au "nombre d'entrées" qu'un DB peut contenir avant que la performance ne soit affectée. Les performances dépendent autant de votre matériel et de votre configuration que de la taille et de la structure de la base de données.

2) Si vous êtes inquiet à propos de l'évolutivité de votre couche de base de données, vous pouvez l'exécuter dans un cluster, une zone de cloud ou un VPS permettant un redimensionnement. Si votre base de données commence à ralentir, vous pouvez prendre de la hauteur (bien qu’en général moyennant des frais supplémentaires). Ces options représentent un coût supplémentaire, mais constituent en réalité le meilleur moyen de garantir l’évolutivité d’une base de données.

3) Cela dépend vraiment de votre configuration d'hébergement et de votre architecture de base de données. Mais en général (à moins que vous ne vous trouviez dans une boîte vraiment pas chère), je ne m'inquiéterais pas pour une base de données WordPress de 30 Mo. WordPress fait un bon travail d’indexation des tables, et même une configuration OOB MySQL devrait facilement gérer les requêtes WordPress sur une base de données de cette taille. Lorsque vous atteignez des gigaoctets, vous devrez peut-être examiner sérieusement les options d'optimisation des performances.

En général:

Si les performances vous préoccupent, concentrez-vous sur le réglage de votre configuration MySQL existante et / ou la configuration d'une couche de mise en cache. La mise en cache peut considérablement alléger la charge de MySQL (en particulier avec les sites WordPress, car ils effectuent généralement un grand nombre de requêtes DB).

Si, après avoir correctement configuré MySQL et mis en place une couche de cache décente, vous craignez toujours de dépasser la configuration de votre configuration matérielle, vous pouvez instituer une politique de suppression du contenu après x fois. .

Rien de tout cela n'est spécifique à WordPress. Et je ne suis pas sûr que la question comporte des réponses qui ne s'appliquent pas à tous les sites Web / applications exécutés sur une pile LAMP. Mais peut-être que quelqu'un d'autre a des suggestions concernant les structures de table MU ou d'autres astuces de base de données spécifiques à WP ... Je ne sais pas.

    
réponse donnée MathSmath 29.05.2012 - 20:33
4

Strictement d'un point de vue MySQL, j'ai des suggestions sur la façon d'améliorer la mise en cache des données / index pour une instance MySQL.

N'oubliez pas qu'il existe deux principaux moteurs de stockage pour MySQL

  • MyISAM
  • InnoDB

Leurs mécanismes de mise en cache sont différents. Vous pouvez modifier le moteur de stockage de votre choix.

MyISAM

MyISAM met uniquement en cache les pages d'index. Il ne cache jamais les données. Vous pouvez faire deux choses pour améliorer les E / S pour les tables MyISAM.

Amélioration MyISAM n ° 1

Toute table MyISAM comportant des colonnes VARCHAR peut être convertie en interne en CHAR sans toucher à la conception initiale. Supposons que vous ayez une table appelée mydb.mytable et que vous souhaitiez améliorer les E / S, procédez comme suit:

ALTER TABLE mydb.mytable ROW_FORMAT=Fixed;

Ceci augmentera la taille de la table de 60% à 100%, mais entraînera une augmentation de 20-30% des performances d'E / S sans rien changer d'autre . J'ai déjà écrit à ce sujet dans DBA StackExchange:

Amélioration MyISAM n ° 2

Vous devez augmenter le cache de clé MyISAM (défini par < strong> key_buffer_size ). Exécutez cette requête, s'il vous plaît:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql','performance_schema')) AA ) A,
(SELECT 2 PowerOf1024) B;

Ceci vous montrera la taille idéale de key_buffer_size en fonction de votre ensemble de données actuel.

InnoDB

InnoDB met en cache les données et les index. Si vous avez converti toutes vos données au format InnoDB et exécutez actuellement WordPress à partir d'une base de données InnoDB complète, vous devez redimensionner votre pool de mémoire tampon InnoDB (dont la taille est innodb_buffer_pool_size ). Exécutez cette requête, s'il vous plaît:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 2 PowerOf1024) B;

Ceci vous montrera la taille idéale de key_buffer_size en fonction de votre ensemble de données actuel.

Projections

Si vous projetez que votre ensemble de données augmentera de 20 fois, multipliez simplement ce que cette requête recommande par 20. Supposons que votre ensemble de données MyISAM mesure 15 Mo et que 3 Mo soient la somme de vos index. Si vous estimez que vous aurez 20 fois plus de données, définissez la taille de key_buffer sur 60 Mo comme ceci dans /etc/my.cnf:

[mysqld]
key_buffer_size=60M

puis redémarrez MySQL. La même chose s’appliquerait au pool de mémoire tampon InnoDB.

Si toutes vos données sont InnoDB, vous devez effectuer un nettoyage complet de votre infrastructure InnoDB, publié dans StackOverflow <. / strong> .

    
réponse donnée RolandoMySQLDBA 05.06.2012 - 21:58
2
  

À quel moment le nombre d'entrées dans la base de données a-t-il un impact sur les performances du site Web frontal?

Lorsque les requêtes commencent à atteindre la limite de ressources de votre compte d'hébergement.

  

Que pouvez-vous faire en tant que gestionnaire de site Web pour assurer le bon fonctionnement de cette base de données au fur et à mesure de l'évolution de votre base de données?

Surveillez l'utilisation des ressources. Prendre des mesures pour augmenter les ressources et / ou optimiser l'utilisation.

  

Que pouvez-vous espérer en termes de performances après la cinquième année lorsque votre base de données a une taille de 25 à 30 Mo?

Il ne devrait y avoir aucun changement de performances sur cette petite base de données.

Si vous vous attendez à ce que votre site connaisse une croissance aussi lente, vous avez tout le temps d’apprendre à gérer cette croissance.

    
réponse donnée shanebp 29.05.2012 - 19:09

Lire d'autres questions sur les étiquettes