web-dev-qa-db-fra.com

Comment estimer l'espace disque pour 1 million de lignes si j'ai une table de moins de lignes dans InnoDB MySQL

Je veux estimer l'espace disque pour 1 million de lignes.

enter image description here

Actuellement, j'ai 8527959 lignes, une longueur de données de 744 Mo et une longueur d'index de 989,4 Mo.

Veuillez me faire savoir si mes calculs sont corrects.

Longueur totale des données pour 1 million de lignes

Les données de 744 Mo consistent en 46500 pages de blocs de 16 Ko (taille de page InnoDB)

Si 46500 pages se composent de 8527959 lignes, 1 page se compose en moyenne de 183 lignes.

Donc, 1 million de lignes ont besoin de (1000000/183) pages = 5465 pages de 16 Ko

Ainsi, 1 million de lignes de données nécessitent 87,4 Mo.

Longueur totale de l'index pour 1 million de lignes

Les index de 989,4 Mo se composent de 61837 pages de blocs de 16 Ko (taille de page InnoDB)

Si 61837 pages se composent de 8527959 lignes, 1 page se compose en moyenne de 138 lignes.

Donc, 1 million de lignes ont besoin de (1000000/138) pages = 7247 pages de 16 Ko

Ainsi, 1 million de lignes de données nécessitent 115,9 Mo.

Espace disque total (approximatif) pour 1 million de lignes

Longueur totale des données + Longueur totale de l'indice = 87,4 Mo + 115,9 Mo = 203,3 Mo

Est-ce correct?

2
PyRookie

Vos hypothèses de base sont correctes, il est facile de voir que l'allocation par ligne est un peu moins de 100 octets par ligne, et un peu plus pour les index, vous donnant une taille totale de 200 * 1M = 200M.

Cependant, plusieurs éléments importants doivent être pris en compte:

  • Les tableaux doivent avoir une structure identique et un contenu équivalent, par ex. la même table exacte avec un contenu variable de taille similaire.
  • Avec SHOW TABLE STATUS vous obtenez une estimation de la taille (lignes, taille totale) basée sur l'échantillonnage - elle peut ne pas être précise, surtout si de grands changements sont survenus dans la table et que l'échantillonnage automatique n'a pas encore démarré. Vous pouvez forcer la collecte de statistiques avec ANALYZE TABLE commande, mais elle ne peut jamais vous garantir une précision de 100%
  • Tout est lié à la taille logique, pas à taille physique, ou à la taille sur le disque. Si vous supprimiez les 7/8ème de cette table, le disque utilisé sur le disque ne rétrécirait pas dans le cas d'InnoDB, car la défragmentation du disque ne se produirait pas - de l'espace est libéré pour l'insertion d'autres lignes, mais il ne le serait pas être libéré sur le système de fichiers. Pour réduire la taille du disque, vous devez recréer la table avec OPTIMIZE TABLE, une opération plus longue et plus bloquante.
  • Si l'espace disque est un problème, envisagez d'utiliser la compression
4
jynus