Quelle taille une base de données MySQL peut-elle obtenir avant que les performances commencent à se dégrader

Translate

À quel moment une base de données MySQL commence-t-elle à perdre des performances?

  • La taille de la base de données physique est-elle importante?
  • Le nombre d'enregistrements est-il important?
  • Une dégradation des performances est-elle linéaire ou exponentielle?

J'ai ce que je crois être une grande base de données, avec environ 15 millions d'enregistrements qui occupent près de 2 Go. Sur la base de ces chiffres, y a-t-il une incitation pour moi à nettoyer les données, ou suis-je sûr de lui permettre de continuer à évoluer pendant quelques années de plus?

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

La taille physique de la base de données n'a pas d'importance. Le nombre d'enregistrements n'a pas d'importance.

D'après mon expérience, le plus gros problème auquel vous allez vous heurter n'est pas la taille, mais le nombre de requêtes que vous pouvez traiter à la fois. Vous allez probablement devoir passer à une configuration maître / esclave pour que les requêtes de lecture puissent s'exécuter sur les esclaves et que les requêtes d'écriture s'exécutent sur le maître. Cependant, si vous n'êtes pas encore prêt pour cela, vous pouvez toujours modifier vos index pour les requêtes que vous exécutez pour accélérer les temps de réponse. De plus, il y a beaucoup d'ajustements que vous pouvez faire à la pile réseau et au noyau sous Linux qui vous aideront.

J'ai eu le mien jusqu'à 10 Go, avec seulement un nombre modéré de connexions et il a très bien géré les demandes.

Je me concentrerais d'abord sur vos index, puis demanderais à un administrateur de serveur de regarder votre système d'exploitation, et si tout cela n'aide pas, il est peut-être temps d'implémenter une configuration maître / esclave.

La source
Translate

En général, c'est une question très subtile et pas du tout triviale. Je vous encourage à liremysqlperformanceblog.cometMySQL haute performance. Je pense vraiment qu'il n'y a pas de réponse générale à cela.

Je travaille sur un projet qui a une base de données MySQL avec près de 1 To de données. Le facteur d'évolutivité le plus important est la RAM. Si les index de vos tables tiennent en mémoire et que vos requêtes sont hautement optimisées, vous pouvez traiter un nombre raisonnable de requêtes avec une machine moyenne.

Le nombre d'enregistrements est important, en fonction de l'apparence de vos tables. C'est une différence d'avoir beaucoup de champs varchar ou seulement quelques entiers ou longs.

La taille physique de la base de données compte également: pensez aux sauvegardes, par exemple. En fonction de votre moteur, vos fichiers de base de données physiques augmentent, mais ne diminuent pas, par exemple avec innodb. Donc, supprimer beaucoup de lignes n'aide pas à réduire vos fichiers physiques.

Il y a beaucoup de problèmes à résoudre et, comme dans de nombreux cas, le diable est dans les détails.

La source
Translate

La taille de la base de donnéesimporte. Si vous avez plus d'une table avec plus d'un million d'enregistrements, les performances commencent effectivement à se dégrader. Le nombre d'enregistrements affecte bien sûr les performances:MySQL peut être lent avec de grandes tables. Si vous atteignez un million d'enregistrements, vous aurez des problèmes de performances si les index ne sont pas correctement définis (par exemple, aucun index pour les champs dans les «instructions WHERE» ou les «conditions ON» dans les jointures). Si vous atteignez 10 millions d'enregistrements, vous commencerez à avoir des problèmes de performances même si tous vos indices sont corrects. Les mises à niveau matérielles - en ajoutant plus de mémoire et plus de puissance de processeur, en particulier de mémoire - aident souvent à réduire les problèmes les plus graves en augmentant à nouveau les performances, au moins dans une certaine mesure. Par exemple37 signaux sont passés de 32 Go de RAM à 128 Go de RAMpour le serveur de base de données Basecamp.

La source
Translate

Je me concentrerais d'abord sur vos index, puis demanderais à un administrateur de serveur de regarder votre système d'exploitation, et si tout cela n'aide pas, il est peut-être temps pour une configuration maître / esclave.

C'est vrai. Une autre chose qui fonctionne généralement est simplement de réduire la quantité de données avec lesquelles on travaille à plusieurs reprises. Si vous avez des «anciennes données» et des «nouvelles données» et que 99% de vos requêtes fonctionnent avec de nouvelles données, déplacez simplement toutes les anciennes données vers une autre table - et ne la regardez pas;)

-> Jetez un œil àpartitionnement.

La source
ian
Translate

2 Go et environ 15 Mo d'enregistrements est une très petite base de données - j'en ai exécuté beaucoup plus gros sur un pentium III (!) Et tout a encore fonctionné assez vite. Si le vôtre est lent, c'est un problème de conception de base de données / application, pas un mysql une.

La source
Translate

Il est un peu inutile de parler de «performances de la base de données», «performances des requêtes» est un meilleur terme ici. Et la réponse est: cela dépend de la requête, des données sur lesquelles il opère, des index, du matériel, etc. Vous pouvez avoir une idée du nombre de lignes qui vont être analysées et des index qui seront utilisés avec la syntaxe EXPLAIN.

2 Go ne compte pas vraiment comme une «grande» base de données - c'est plutôt une taille moyenne.

La source
Translate

Faites également attention aux jointures complexes. La complexité des transactions peut être un facteur important en plus du volume des transactions.

La refactorisation des requêtes lourdes offre parfois une grande amélioration des performances.

La source
Translate

Une fois, j'ai été appelé à regarder un mysql qui avait "cessé de fonctionner". J'ai découvert que les fichiers DB résidaient sur un filer Network Appliance monté avec NFS2 et avec une taille de fichier maximale de 2 Go. Et bien sûr, la table qui avait cessé d'accepter les transactions était exactement de 2 Go sur le disque. Mais en ce qui concerne la courbe de performance, on me dit que ça fonctionnait comme un champion jusqu'à ce que ça ne marche pas du tout! Cette expérience me sert toujours de joli rappel qu'il y a toujours des dimensions au-dessus et en dessous de celle que vous soupçonnez naturellement.

La source
Translate

Un point à considérer est également le but du système et les données au jour le jour.

Par exemple, pour un système avec surveillance GPS des voitures, les données de requête ne sont pas pertinentes à partir des positions de la voiture au cours des mois précédents.

Par conséquent, les données peuvent être transmises à d'autres tables historiques pour une consultation éventuelle et réduire les temps d'exécution des requêtes quotidiennes.

La source
Translate

Je gère actuellement une base de données MySQL sur l'infrastructure cloud d'Amazon qui est passée à 160 Go. Les performances des requêtes sont bonnes. Ce qui est devenu un cauchemar, ce sont les sauvegardes, les restaurations, l'ajout d'esclaves ou tout autre élément qui traite de l'ensemble de données, ou même du DDL sur de grandes tables. Obtenir une importation propre d'un fichier de vidage est devenu problématique. Afin de rendre le processus suffisamment stable pour être automatisé, divers choix devaient être faits pour donner la priorité à la stabilité par rapport aux performances. Si jamais nous devions récupérer après un sinistre en utilisant une sauvegarde SQL, nous serions indisponibles pendant des jours.

La mise à l'échelle horizontale de SQL est également assez pénible et, dans la plupart des cas, conduit à l'utiliser d'une manière que vous n'aviez probablement pas l'intention lorsque vous avez choisi de placer vos données dans SQL en premier lieu. Shards, read slaves, multi-master, et autres, ce sont toutes des solutions vraiment merdiques qui ajoutent de la complexité à tout ce que vous faites avec la base de données, et aucune d'elles ne résout le problème; l'atténue seulement de certaines manières. Je suggérerais fortement d'envisager de déplacer certaines de vos données hors de MySQL (ou vraiment de n'importe quel SQL) lorsque vous commencez à approcher un ensemble de données d'une taille où ces types de choses deviennent un problème.

La source
Translate

Les performances peuvent se dégrader en quelques milliers de lignes si la base de données n'est pas conçue correctement.

Si vous avez des index appropriés, utilisez des moteurs appropriés (n'utilisez pas MyISAM là où plusieurs DML sont attendus), utilisez le partitionnement, allouez une mémoire correcte en fonction de l'utilisation et bien sûr avoir une bonne configuration de serveur, MySQL peut gérer des données même en téraoctets!

Il existe toujours des moyens d'améliorer les performances de la base de données.

La source
Translate

Cela dépend de votre requête et de votre validation.

Par exemple, j'ai travaillé avec une table de 100000 médicaments qui a une colonne nom générique où il a plus de 15 caractères pour chaque médicament dans cette table .J'ai posé une requête pour comparer le nom générique des médicaments entre deux tables. De même, si vous comparez les médicaments en utilisant l'index des médicaments, en utilisant une colonne id (comme indiqué ci-dessus), cela ne prend que quelques secondes.

La source
Translate

La taille de la base de données importe en termes d'octets et de nombre de lignes de la table. Vous remarquerez une énorme différence de performances entre une base de données légère et une base de données remplie de blob. Une fois que mon application s'est bloquée parce que j'ai mis des images binaires dans des champs au lieu de conserver les images dans des fichiers sur le disque et de ne mettre que les noms de fichiers dans la base de données. Itérer un grand nombre de lignes en revanche n'est pas gratuit.

La source
Translate

Non, cela n'a pas vraiment d'importance. La vitesse MySQL est d'environ 7 millions de lignes par seconde. Vous pouvez donc le mettre à l'échelle un peu

La source