2009-06-13 6 views
1

parfois j'obtiens une erreur comme "la table est marquée comme corrompue et doit être réparée". ce DB (tables) utilise MyISAM. récemment cela continue à se produire. Quelles pourraient être les causes? Plus récemment, je suis un lot insérer exécutaisTables MyISAM se corrompent

INSERT INTO table (..., ..., ...) VALUES (...), (...), (...) ...

et juste accroché. ou a pris très longtemps à compléter il semble accroché à moi. le jour suivant, quand j'ai vérifié la table a été marquée comme corrompue encore. quand j'essaye d'employer mysqlcheck -r il a dit toutes les tables CORRECT quand il a atteint cette table "corrompue" il a accroché là encore ...

ainsi, que puis-je faire pour empêcher ceci. et quelles pourraient être les causes. la DB est hébergée par une tierce partie, comment puis-je déboguer cela?

InnoDB est un moteur plus fiable à utiliser? J'ai entendu dire que MyISAM est plus rapide mais d'autres disent que InnoDB peut être rapide aussi mais il faut plus pour l'optimiser. Puis-je conclure que InnoDB est quelque chose de plus fiable mais abit plus lentement dans l'ensemble, même avec l'optimisation?

Répondre

0

ok, donc le problème était que la base de données de l'entreprise dépassait l'espace de stockage autorisé par la société d'hébergement. donc apparemment personne n'a dit à la compagnie qu'ils avaient dépassé l'usage ... mauvais hôte je suppose.

btw, theres pas moyen mysql aurait pu savoir à ce sujet?

+0

Merci, C'est pourquoi aller avec InnoDB, même si les insertions InnoDB sont 2 fois plus lentes et que le compte (*) est lent aussi. (Les lectures sont similaires) –

3

Si vos tables sont corrompus, vous pouvez utiliser la commande de table de réparation pour les fixer:

REPAIR TABLE table; 

Si vous exécutez myisamchk alors que le serveur est toujours en cours d'exécution (et inserts/sélectionne atteignent la table), il pourrait être ce qui corrompt vos tables. La plupart des problèmes de corruption auxquels je suis confronté sont lorsque vous essayez de faire des choses en dehors du serveur (copier les fichiers, etc) pendant qu'il est encore en cours d'exécution.

InnoDB est plus lent pour les bases de données en lecture seule, car il possède des fonctionnalités (ACID, verrouillage de ligne) que MyISAM omet. Cependant, si vous faites un mélange de lectures et d'écritures, InnoDB peut offrir de sérieuses améliorations de performance, car il n'a pas besoin de verrouiller toute la table pour écrire. Vous ne rencontrez pas non plus de problèmes de corruption.

+0

Maintenant, quand j'essaie d'exécuter des requêtes comme select, check table ou mysqlcheck -r, même show create table, ça va juste rester là. tout ce que je peux faire? – iceangel89

+0

Avez-vous effectué une réparation? Est-il toujours en cours d'exécution (vous pouvez faire "show processlist"). Très probablement, vous ne pouvez pas accéder à la table ou à ses métadonnées jusqu'à ce qu'elle soit complète (elle a un verrou en écriture). La réparation peut prendre un certain temps sur une grande table, elle doit reconstruire des index. –

1

Partez avec InnoDB.

Questions connexes