Je veux estimer l'espace disque pour 1 million de lignes.
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.
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.
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.
Longueur totale des données + Longueur totale de l'indice = 87,4 Mo + 115,9 Mo = 203,3 Mo
Est-ce correct?
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:
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%OPTIMIZE TABLE
, une opération plus longue et plus bloquante.