Wie kann ich feststellen, wie groß meine Amazon RDS-Datenbank (MySQL) ist?


11

Ich habe eine MySQL-Datenbank für meine Website, die mit RDS auf Amazon AWS gehostet wird. Es stehen 5 GB Speicherplatz zur Verfügung. Wie kann ich feststellen, wie groß die Daten tatsächlich sind (und wie viel von dem verbleibenden 5-GB-Kontingent ich habe)?

Antworten:


13

Hier finden Sie besser organisierte Abfragen für INFORMATION_SCHEMA

Größen nach Storage Engine

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;

Größen nach Datenbank

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

Größen nach Datenbank / Speicher-Engine

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;

VORBEHALT

In jeder der drei (3) Abfragen sehen Sie (SELECT 3 pw). Das pwsteht für die Power Of 1024, um die Ergebnisse in bestimmten Einheiten anzuzeigen:

  • (SELECT 0 pw) zeigt den Bericht in Bytes an
  • (SELECT 1 pw) zeigt den Bericht in Kilobyte an
  • (SELECT 2 pw) zeigt den Bericht in MegaBytes an
  • (SELECT 3 pw) zeigt den Bericht in GigaBytes an
  • (SELECT 4 pw) zeigt den Bericht in TeraBytes an
  • (SELECT 5 pw) zeigt den Bericht in PetaBytes an (bitte kontaktieren Sie mich, wenn Sie diesen ausführen)

Hier ist eine Berichtsabfrage mit etwas weniger Formatierung 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;

Versuche es !!!


Du bist unglaublich!
Spieler1

4

Ich habe endlich den einfachen Weg gefunden, diese Informationen mit ein paar Klicks direkt von Amazon zu erhalten.

  1. Melden Sie sich beim RDS-Verwaltungs-Dashboard an
  2. Klicken Sie auf "DB Instances".
  3. Klicken Sie auf die Instanz, an der Sie interessiert sind. Das sollte es erweitern und viel mehr Informationen darüber zeigen.
  4. Zeigen Sie links die Registerkarte "Überwachung" an (diese sollte standardmäßig ausgewählt sein).
  5. Es gibt einen "Speicher" -Monitor, der angibt, wie viel Speicherplatz er verwendet, und ein Diagramm darüber anzeigt, wie viel verfügbar ist:

Geben Sie hier die Bildbeschreibung ein


Aus den RDS-Dokumenten geht hervor, dass frei verfügbarer Speicher "wie viel RAM auf der DB-Instanz in Megabyte verfügbar ist" und nicht die Speichernutzung der Instanz: docs.aws.amazon.com/AmazonRDS/latest/UserGuide/…
Evan Kroske

@EvanKroske Es sieht so aus, als ob "Free Storage Space" tatsächlich die Metrik ist, die ich möchte. Danke für den Doc Link.
Stephen Ostermiller

Es sieht so aus, als hätte AWS die gesamte Benutzeroberfläche überarbeitet, seit ich diese Antwort geschrieben habe. Ich habe es basierend auf dem, was ich heute sehe, aktualisiert.
Stephen Ostermiller

Es sieht so aus, als hätten sie es möglicherweise erneut überarbeitet. Ich sehe keine Registerkarte "Überwachung". und der Speicher listet nur die zugewiesene Gesamtgröße auf.
Brian Thomas

2

show table status from mydatabsename; Dabei ist mydatabasename Ihr Datenbankname.

Dies zeigt Ihnen die Metriken Data_length und Index_length pro Tabelle und andere Metriken. Sie müssten diese Spalten summieren und sich daran erinnern, dass sie in Bytes sind, also müssten Sie durch 1024 teilen, um kb zu erhalten, und dann erneut durch 1024, um Megs zu erhalten, und dann erneut durch 1024, um Gigs zu erhalten. Dies zeigt auch den freien Speicherplatz in Ihrer Index- / Datenbankzuordnung.

Sie können detaillierter und sum () werden, wenn Sie Folgendes untersuchen möchten: http://dev.mysql.com/doc/refman/5.5/en/show-table-status.html

SELECT SUM(DATA_FREE) FROM INFORMATION_SCHEMA.PARTITIONS;

Zeigt den verbleibenden Speicherplatz in der Index- / Datenbankzuordnung an ...

SELECT SUM(Data_length) FROM INFORMATION_SCHEMA.PARTITIONS;

SELECT SUM(Index_length) FROM INFORMATION_SCHEMA.PARTITIONS;

... zeigt die verwendeten Daten und die verwendete Indexgröße an (Sie müssen sie für die Gesamtzuordnung hinzufügen).

Wenn Sie die Dinge ein bisschen mehr zerlegen wollen ...

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

Natürlich können Sie auch die MySQL Workbench verwenden, wie ich sie hier gefunden habe: http://dev.mysql.com/downloads/tools/workbench/, aber dies setzt voraus, dass Sie Portzugriff auf Ihren Datenbankserver haben. Trotzdem können Sie auch offline viel tun, was den Download wert ist. Bitte beachten Sie, dass die Workbench keine () Zuordnungen summiert, was für mich keinen Sinn ergibt. Andererseits habe ich auch nicht die neueste Version.


Ich habe über 100 Datenbanken in dieser RDS-Instanz. Gibt es eine bequeme Möglichkeit, alle abzufragen und alles zusammenzufassen?
Stephen Ostermiller

@ Stephen Ostermiller 100 Datenbanken oder 100 Tabellen? Eine Datenbank besteht aus einem oder mehreren Schemas. Ein Schema ist normalerweise ein Themenbereich mit zugehörigen Tabellen.
Closetnoc

100 Datenbanken mit jeweils ca. 20 Tabellen.
Stephen Ostermiller

Ich experimentiere mit dem Beispiel auf der Seite, auf die ich verwiesen habe. Wir werden uns in nur einer Sekunde bei Ihnen melden.
Closetnoc

@ Stephen Ostermiller Die Antwort wurde aktualisiert. Hoffe das hilft.
Closetnoc

1

2019 : Informationen zu MySQL und MariaDB finden Sie unter diesem von AWS bereitgestellten Link: https://aws.amazon.com/premiumsupport/knowledge-center/view-storage-rds-mysql-mariadb/


Nützlich, um zu wissen, was den Speicher verwendet, aber mein Problem war nur zu wissen, wie viel Speicher ich noch hatte.
Stephen Ostermiller

1
Sie können sich die FreeStorageSpace-Metrik in der RDS-Überwachung dafür ansehen , und sie wurde auch im Dokument erwähnt.
Vigneshwar
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.