Come posso sapere quanto è grande il mio database Amazon RDS (MySQL)?


12

Ho un database MySQL per il mio sito Web ospitato su Amazon AWS utilizzando RDS. Ha 5 GB di spazio disponibile. Come posso sapere quanto sono grandi i dati in esso contenuti (e quindi quanto della quota 5 GB mi è rimasta)?

Risposte:


13

Ecco altre query organizzate su INFORMATION_SCHEMA

Dimensioni dal motore di archiviazione

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;

Dimensioni per database

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

Dimensioni per database / motore di archiviazione

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;

AVVERTIMENTO

In ognuna delle tre (3) query, vedrai (SELECT 3 pw). I pwsta per la potenza di 1024 per visualizzare i risultati in unità specifiche:

  • (SELECT 0 pw) visualizzerà il rapporto in byte
  • (SELECT 1 pw) visualizzerà il rapporto in KiloBytes
  • (SELECT 2 pw) visualizzerà il rapporto in MegaBytes
  • (SELECT 3 pw) visualizzerà il rapporto in GigaBytes
  • (SELECT 4 pw) visualizzerà il rapporto in TeraBytes
  • (SELECT 5 pw) visualizzerà il rapporto in PetaBytes (per favore contattami se esegui questo)

Ecco una query di report con un po 'meno di formattazione in 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;

Provaci !!!


Sei fantastico!
Giocatore 1,

6

Ho finalmente trovato il modo semplice per ottenere queste informazioni direttamente da Amazon con un paio di clic.

  1. Accedi alla dashboard di gestione RDS
  2. Fai clic su "Istanze DB"
  3. Fai clic sull'istanza a cui sei interessato. Ciò dovrebbe espanderlo e mostrare molte più informazioni al riguardo.
  4. Visualizza la scheda "Monitoraggio" a sinistra (dovrebbe essere selezionata per impostazione predefinita)
  5. Esiste un monitor "Archiviazione" che indica la quantità di spazio utilizzata e mostra un grafico della quantità disponibile:

inserisci qui la descrizione dell'immagine


Dai documenti RDS, la memoria disponibile è "quanta RAM è disponibile sull'istanza
Evan Kroske

@EvanKroske Sembra che "Free Storage Space" sia in realtà la metrica che desidero. Grazie per il collegamento doc.
Stephen Ostermiller

Sembra che AWS abbia rinnovato l'intera interfaccia da quando ho scritto questa risposta. L'ho aggiornato in base a ciò che vedo oggi.
Stephen Ostermiller

sembra che potrebbero averlo rinnovato di nuovo, non vedo una scheda di monitoraggio. e la memoria elenca solo la dimensione totale allocata.
Brian Thomas,

2

show table status from mydatabsename; dove mydatabasename è il nome del database.

Questo ti mostra le metriche Data_length e Index_length per tabella e altre metriche. Dovresti totalizzare queste colonne e ricordare che sono in byte, quindi dovresti dividerlo per 1024 per ottenere kb e poi per 1024 di nuovo per ottenere mega e poi per 1024 di nuovo per ottenere concerti. Ciò mostra anche lo spazio libero all'interno dell'allocazione dell'indice / database.

Puoi ottenere più granulare e sum () se vuoi esplorare: http://dev.mysql.com/doc/refman/5.5/en/show-table-status.html

SELECT SUM(DATA_FREE) FROM INFORMATION_SCHEMA.PARTITIONS;

Mostra lo spazio rimanente nell'assegnazione indice / database ...

SELECT SUM(Data_length) FROM INFORMATION_SCHEMA.PARTITIONS;

SELECT SUM(Index_length) FROM INFORMATION_SCHEMA.PARTITIONS;

... mostra i dati e la dimensione dell'indice utilizzati (dovrai aggiungerli per l'allocazione totale)

Se vuoi sezionare le cose un po 'di più ...

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

Ovviamente puoi anche usare MySQL Workbench come ho trovato qui: http://dev.mysql.com/downloads/tools/workbench/ ma ciò presuppone che tu abbia accesso alla porta al tuo server di database. Tuttavia, puoi fare molto anche offline, quindi vale la pena scaricare. Si noti che il workbench non somma le allocazioni () che per me non hanno senso. Ma poi di nuovo, non ho nemmeno l'ultima versione.


Ho oltre 100 database in questa istanza RDS. C'è un modo conveniente per interrogarli tutti e riassumere tutto?
Stephen Ostermiller

@Stephen Ostermiller 100 database o 100 tabelle? Un database è composto da uno o più schemi. Uno schema è in genere un'area tematica con tabelle correlate.
closetnoc,

100 database ciascuno con circa 20 tabelle.
Stephen Ostermiller

Sto sperimentando l'esempio nella pagina a cui mi riferivo ... ti ricontatterò tra un secondo.
closetnoc,

@Stephen Ostermiller Aggiornata la risposta. Spero che questo ti aiuti.
closetnoc,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.