2010-12-13 45 views
1

J'ai une assez petite base de données mysql dans laquelle je stocke une poignée de jolies petites images (320x480), tout se comportait vraiment bien jusqu'à récemment, la taille de la table est d'environ 1,5 Go et il y a environ 34 000 enregistrements. A ce moment-là ...Mysql dégradation des performances BLOB après avoir frappé "une limite" (MyISAM)

... Tout à coup, les performances d'un facteur dégradée de 100.

Il semble que la DB a atteint une limite rock dur et il ne peut pas y faire face plus .

Quelqu'un a-t-il vécu quelque chose comme ça?

(S'il vous plaît ne suggèrent pas de déplacer les images de la DB sur le système de fichiers, nous avons décidé de le faire avec la prochaine version du logiciel)

+0

Veuillez fournir une requête que vous exécutez, ainsi que la structure et les index de la table, afin que nous puissions vous aider. –

+0

J'ai oublié d'ajouter un comportement vraiment étrange, si j'accède à des lignes avec un identifiant faible (les ID sont auto-incrémentés) les performances sont vraiment bonnes, c'est seulement en essayant d'accéder aux "dernières" lignes qui pose problème. (Je dirais que la "nouvelle" 30% de la table présentent cette question) structure de la table – Dado

+0

est la suivante: structure de la table – Dado

Répondre

1

Cause possible est que votre requête n'utilise pas les index. Quand la table était plutôt petite, ce n'était pas un problème, mais plus il est gros, plus MySQL a besoin de vos données.

Vérifiez si la colonne property_id est indexée. Pour accélérer votre requête, vous pouvez ajouter couvrant index - (property_id, image)

Vous pouvez voir si votre requête utilise des index et des informations plus utiles en ajoutant EXPLAIN à votre requête:

EXPLAIN SELECT image FROM mytable WHERE property_id = 30000 
+0

Merci, en ajoutant l'index à property_id seulement fixé la lenteur.C'était vraiment Noob de moi :) – Dado

0

Je suis tout à fait certain que la base de données a commencé à utiliser le disque au lieu de la mémoire pour effectuer une opération. Cette opération pourrait très bien consister à stocker des données dans des tables temporaires. Stockez les index sur le disque à la place, etc. Trouvez ce que c'est, et votre solution sera beaucoup plus simple à trouver.

La dégradation des performances de 1 à 100 correspond à la différence de vitesse entre la mémoire et le disque.

0

Ne créez pas d'index sur le champ BLOB, il est inutile (et MySQL ne l'autorisera pas).

Avez-vous des index appropriés? c'est-à-dire dans ce cas, (property_id)? ...

+0

Je vous remercie, vous aviez raison, il était juste un problème avec les index, je ne ai pas mis un index sur un blob, au moins, je le savais! :) – Dado