J'ai une base de données MySQL pour mon site Web hébergée sur Amazon AWS à l'aide de RDS. Il dispose de 5 Go de stockage. Comment puis-je savoir la taille réelle des données (et donc quelle part du quota de 5 Go me reste)?
J'ai une base de données MySQL pour mon site Web hébergée sur Amazon AWS à l'aide de RDS. Il dispose de 5 Go de stockage. Comment puis-je savoir la taille réelle des données (et donc quelle part du quota de 5 Go me reste)?
Réponses:
Voici des requêtes plus organisées par rapport à INFORMATION_SCHEMA
SELECT
IFNULL(B.engine, 'Total') "Storage Engine",
CONCAT(LPAD(REPLACE(FORMAT(B.DSize / POWER(1024, pw), 3), ',', ''), 17, ' '), ' ', SUBSTR(' KMGTP', pw + 1, 1), 'B') "Data Size",
CONCAT(LPAD(REPLACE( FORMAT(B.ISize / POWER(1024, pw), 3), ',', ''), 17, ' '), ' ', SUBSTR(' KMGTP', pw + 1, 1), 'B') "Index Size",
CONCAT(LPAD(REPLACE( FORMAT(B.TSize / POWER(1024, pw), 3), ',', ''), 17, ' '), ' ', SUBSTR(' KMGTP', pw + 1, 1), 'B') "Table Size"
FROM
(SELECT
engine,
SUM(data_length) DSize,
SUM(index_length) ISize,
SUM(data_length + index_length) TSize
FROM
information_schema.tables
WHERE
table_schema NOT IN ('mysql', 'information_schema', 'performance_schema')
AND engine IS NOT NULL
GROUP BY engine WITH ROLLUP
) B,
(SELECT 3 pw) A
ORDER BY TSize;
SELECT
dbname,
Concat(Lpad(Format(sdsize / Power(1024, pw), 3), 17, ' '), ' ', Substr(' KMGTP', pw + 1, 1), 'B') "Data Size",
Concat(Lpad(Format(sxsize / Power(1024, pw), 3), 17, ' '), ' ', Substr(' KMGTP', pw + 1, 1), 'B') "Index Size",
Concat(Lpad(Format(stsize / Power(1024, pw), 3), 17, ' '), ' ', Substr(' KMGTP', pw + 1, 1), 'B') "Total Size"
FROM
(SELECT
Ifnull(db, 'All Databases') DBName,
Sum(dsize) SDSize,
Sum(xsize) SXSize,
Sum(tsize) STSize
FROM (SELECT
table_schema DB,
data_length DSize,
index_length XSize,
data_length + index_length TSize
FROM information_schema.tables
WHERE table_schema NOT IN ('mysql','information_schema','performance_schema')
) AAA
GROUP BY db WITH rollup
) AA,
(SELECT 3 pw) BB
ORDER BY ( sdsize + sxsize );
SELECT
Statistic,
DataSize "Data Size",
IndexSize "Index Size",
TableSize "Table Size"
FROM
(SELECT
IF(ISNULL(table_schema) = 1, 10, 0) schema_score,
IF(ISNULL(engine) = 1, 10, 0) engine_score,
IF(ISNULL(table_schema) = 1, 'ZZZZZZZZZZZZZZZZ', table_schema) schemaname,
IF(ISNULL(B.table_schema) + ISNULL(B.engine) = 2, "Storage for All Databases", IF(ISNULL(B.table_schema) + ISNULL(B.engine) = 1, CONCAT("Storage for ", B.table_schema), CONCAT(B.engine, " Tables for ", B.table_schema))) Statistic,
CONCAT(LPAD(REPLACE(FORMAT(B.DSize / POWER(1024, pw), 3), ',', ''), 17, ' '), ' ', SUBSTR(' KMGTP', pw + 1, 1), 'B') DataSize,
CONCAT(LPAD(REPLACE( FORMAT(B.ISize / POWER(1024, pw), 3), ',', ''), 17, ' '), ' ', SUBSTR(' KMGTP', pw + 1, 1), 'B') IndexSize,
CONCAT(LPAD(REPLACE(FORMAT(B.TSize / POWER(1024, pw), 3), ',', ''), 17, ' '), ' ', SUBSTR(' KMGTP', pw + 1, 1), 'B') TableSize
FROM
(SELECT
table_schema,
engine,
SUM(data_length) DSize,
SUM(index_length) ISize,
SUM(data_length + index_length) TSize
FROM
information_schema.tables
WHERE
table_schema NOT IN ('mysql', 'information_schema', 'performance_schema')
AND engine IS NOT NULL
GROUP BY
table_schema, engine WITH ROLLUP
) B,
(SELECT 3 pw) A
) AA
ORDER BY schemaname, schema_score, engine_score;
Dans chacune des trois (3) requêtes, vous verrez (SELECT 3 pw)
. Le pw
représente la puissance de 1024 pour afficher les résultats dans des unités spécifiques:
(SELECT 0 pw)
affichera le rapport en octets(SELECT 1 pw)
affichera le rapport en kilo-octets(SELECT 2 pw)
affichera le rapport en mégaoctets(SELECT 3 pw)
affichera le rapport en GigaBytes(SELECT 4 pw)
affichera le rapport en TeraBytes(SELECT 5 pw)
affichera le rapport en PetaBytes (veuillez me contacter si vous exécutez celui-ci)Voici une requête de rapport avec un peu moins de mise en forme dans KB
:
SELECT
IFNULL(db, 'Total') "Database",
datsum / power(1024, pw) "Data Size",
ndxsum / power(1024, pw) "Index Size",
totsum / power(1024, pw) "Total"
FROM
(
SELECT
db,
SUM(dat) datsum,
SUM(ndx) ndxsum,
SUM(dat + ndx) totsum
FROM
(
SELECT table_schema db, data_length dat, index_length ndx
FROM information_schema.tables
WHERE engine IS NOT NULL AND table_schema NOT IN ('information_schema', 'mysql')
) AA
GROUP BY db WITH ROLLUP
) A,
(SELECT 1 pw) B;
J'ai finalement trouvé le moyen facile d'obtenir ces informations directement d'Amazon en quelques clics.
show table status from mydatabsename;
où mydatabasename est le nom de votre base de données.
Cela vous montre les métriques Data_length et Index_length par table et d'autres métriques. Vous devez totaliser ces colonnes et vous rappeler qu'elles sont en octets, vous devrez donc les diviser par 1024 pour obtenir kb, puis par 1024 à nouveau pour obtenir des megs, puis par 1024 à nouveau pour obtenir des concerts. Cela montre également l'espace libre dans votre allocation d'index / base de données.
Vous pouvez obtenir plus de détails et sum () si vous souhaitez explorer: http://dev.mysql.com/doc/refman/5.5/en/show-table-status.html
SELECT SUM(DATA_FREE) FROM INFORMATION_SCHEMA.PARTITIONS;
Affiche l'espace restant dans l'allocation d'index / base de données ...
SELECT SUM(Data_length) FROM INFORMATION_SCHEMA.PARTITIONS;
SELECT SUM(Index_length) FROM INFORMATION_SCHEMA.PARTITIONS;
... affiche les données et la taille d'index utilisées (vous devrez les ajouter pour l'allocation totale)
Si vous voulez disséquer un peu plus les choses ...
select sum(Data_length) from INFORMATION_SCHEMA.PARTITIONS where TABLE_SCHEMA = "myschema";
select sum(Index_length) from INFORMATION_SCHEMA.PARTITIONS where TABLE_SCHEMA = "myschema";
select sum(DATA_FREE) from INFORMATION_SCHEMA.PARTITIONS where TABLE_SCHEMA = "myschema";
select sum(Data_length) from INFORMATION_SCHEMA.PARTITIONS where TABLE_SCHEMA = "myschema" and TABLE_NAME = "aspecifictable";
select sum(Index_length) from INFORMATION_SCHEMA.PARTITIONS where TABLE_SCHEMA = "myschema" and TABLE_NAME = "aspecifictable";
Bien sûr, vous pouvez également utiliser MySQL Workbench comme je le trouve ici: http://dev.mysql.com/downloads/tools/workbench/ mais cela suppose que vous ayez accès au port de votre serveur de base de données. Pourtant, vous pouvez également faire beaucoup de choses hors ligne, alors le téléchargement en vaut la peine. Veuillez noter que le plan de travail ne fait pas la somme () des allocations, ce qui n'a pas de sens pour moi. Mais là encore, je n'ai pas non plus la dernière version.
2019 : pour MySQL et MariaDB Veuillez vous référer à ce lien fourni par AWS: https://aws.amazon.com/premiumsupport/knowledge-center/view-storage-rds-mysql-mariadb/