Comment savoir la taille de ma base de données Amazon RDS (MySQL)?

12

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)?

Stephen Ostermiller
la source

Réponses:

13

Voici des requêtes plus organisées par rapport à INFORMATION_SCHEMA

Tailles par moteur de stockage

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;

Tailles par base de données

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 ); 

Tailles par base de données / moteur de stockage

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;

CAVEAT

Dans chacune des trois (3) requêtes, vous verrez (SELECT 3 pw). Le pwrepré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;

Essaie !!!

RolandoMySQLDBA
la source
Vous êtes génial!
Joueur1
7

J'ai finalement trouvé le moyen facile d'obtenir ces informations directement d'Amazon en quelques clics.

  1. Connectez-vous au tableau de bord de gestion RDS
  2. Cliquez sur "Instances DB"
  3. Cliquez sur l'instance qui vous intéresse. Cela devrait le développer et afficher beaucoup plus d'informations à ce sujet.
  4. Afficher l'onglet "Monitoring" à gauche (il doit être sélectionné par défaut)
  5. Il y a un moniteur "Stockage" qui indique combien d'espace il utilise et montre un graphique de la quantité disponible:

entrez la description de l'image ici

Stephen Ostermiller
la source
D'après les documents RDS, la mémoire libérable est «la quantité de RAM disponible sur l'instance de base de données, en mégaoctets», et non l'utilisation de stockage de l'instance: docs.aws.amazon.com/AmazonRDS/latest/UserGuide/…
Evan Kroske
@EvanKroske Il semble que "Free Storage Space" soit en fait la métrique que je veux. Merci pour le lien doc.
Stephen Ostermiller
Il semble qu'AWS ait remanié toute l'interface depuis que j'ai écrit cette réponse. Je l'ai mis à jour en fonction de ce que je vois aujourd'hui.
Stephen Ostermiller
on dirait qu'ils l'ont peut-être remanié, je ne vois pas d'onglet de surveillance. et le stockage répertorie simplement la taille totale allouée.
Brian Thomas
2

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.

placard
la source
J'ai plus de 100 bases de données dans cette instance RDS. Existe-t-il un moyen pratique de les interroger tous et de tout résumer?
Stephen Ostermiller
@Stephen Ostermiller 100 bases de données ou 100 tables? Une base de données comprend un ou plusieurs schémas. Un schéma est généralement un domaine avec des tables associées.
closetnoc
100 bases de données chacune avec environ 20 tables.
Stephen Ostermiller
J'expérimente avec l'exemple sur la page à laquelle j'ai fait référence ... vous reviendra dans une seconde.
closetnoc
@Stephen Ostermiller Mise à jour de la réponse. J'espère que cela t'aides.
closetnoc
1

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/

Vigneshwar
la source
Utile pour savoir ce qui utilise le stockage, mais mon problème était simplement de savoir combien de stockage il me restait.
Stephen Ostermiller
1
Vous pouvez consulter la métrique FreeStorageSpace dans la surveillance RDS pour cela et cela a également été mentionné dans le document.
Vigneshwar