Jak mogę określić, jak duża jest moja baza danych Amazon RDS (MySQL)?

12

Mam bazę danych MySQL dla mojej witryny hostowanej na Amazon AWS przy użyciu RDS. Ma 5 GB dostępnej pamięci. Jak mogę określić, jak duże są w rzeczywistości dane (a tym samym, ile pozostało mi limitu 5 GB)?

Stephen Ostermiller
źródło

Odpowiedzi:

13

Oto bardziej zorganizowane zapytania dotyczące INFORMACJE_SCHEMA

Rozmiary według silnika pamięci masowej

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;

Rozmiary według bazy danych

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

Rozmiary według bazy danych / silnika pamięci masowej

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

W każdym z trzech (3) zapytań zobaczysz (SELECT 3 pw). Te pwstojaki na moc 1024 do wyświetlania wyników w jednostkach szczególnych:

  • (SELECT 0 pw) wyświetli raport w bajtach
  • (SELECT 1 pw) wyświetli raport w kilobajtach
  • (SELECT 2 pw) wyświetli raport w megabajtach
  • (SELECT 3 pw) wyświetli raport w GigaBytes
  • (SELECT 4 pw) wyświetli raport w TeraBytes
  • (SELECT 5 pw) wyświetli raport w PetaBytes (proszę o kontakt, jeśli go uruchomisz)

Oto zapytanie dotyczące raportu z nieco mniejszym formatowaniem 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;

Spróbuj !!!

RolandoMySQLDBA
źródło
Jesteś niesamowity!
Gracz1
7

W końcu znalazłem prosty sposób na uzyskanie tych informacji bezpośrednio z Amazon za pomocą kilku kliknięć.

  1. Zaloguj się do pulpitu zarządzania RDS
  2. Kliknij „Instancje DB”
  3. Kliknij instancję, którą jesteś zainteresowany. To powinno go rozwinąć i pokazać znacznie więcej informacji na jego temat.
  4. Wyświetl zakładkę „Monitorowanie” po lewej stronie (powinna być domyślnie zaznaczona)
  5. Istnieje monitor „Storage”, który mówi, ile miejsca zużywa i pokazuje wykres, ile jest dostępne:

wprowadź opis zdjęcia tutaj

Stephen Ostermiller
źródło
Według dokumentów RDS wolna pamięć to „ile pamięci RAM jest dostępne w instancji DB w megabajtach”, a nie wykorzystanie pamięci przez instancję: docs.aws.amazon.com/AmazonRDS/latest/UserGuide/…
Evan Kroske
@EvanKroske Wygląda na to, że „Free Storage Space” to tak naprawdę metryka, której chcę. Dzięki za link do dokumentu.
Stephen Ostermiller
Wygląda na to, że AWS przerobił cały interfejs, odkąd napisałem tę odpowiedź. Zaktualizowałem go na podstawie tego, co widzę dzisiaj.
Stephen Ostermiller
wygląda na to, że mogli go przerobić ponownie, nie widzę zakładki monitorowania. a pamięć zawiera tylko całkowity przydzielony rozmiar.
Brian Thomas
2

show table status from mydatabsename; gdzie moja_bazy_danych jest nazwą Twojej bazy danych.

To pokazuje metryki długość_danych i długość_indeksu dla tabeli i inne metryki. Trzeba by zsumować te kolumny i pamiętać, że są one w bajtach, więc trzeba by podzielić przez 1024, aby uzyskać KB, a następnie przez 1024 ponownie, aby uzyskać megabajty, a następnie ponownie przez 1024, aby uzyskać występy. Pokazuje to również wolne miejsce w ramach alokacji indeksu / bazy danych.

Możesz uzyskać bardziej szczegółowy i sum (), jeśli chcesz eksplorować: http://dev.mysql.com/doc/refman/5.5/en/show-table-status.html

SELECT SUM(DATA_FREE) FROM INFORMATION_SCHEMA.PARTITIONS;

Pokazuje pozostałe miejsce w alokacji indeksu / bazy danych ...

SELECT SUM(Data_length) FROM INFORMATION_SCHEMA.PARTITIONS;

SELECT SUM(Index_length) FROM INFORMATION_SCHEMA.PARTITIONS;

... pokazuje użyte dane i rozmiar indeksu (będziesz musiał je dodać dla całkowitego przydziału)

Jeśli chcesz dowiedzieć się czegoś więcej ...

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

Oczywiście możesz również korzystać z MySQL Workbench, tak jak znalazłem tutaj: http://dev.mysql.com/downloads/tools/workbench/, ale to zakłada, że ​​masz dostęp do portu na serwerze bazy danych. Nadal możesz wiele robić w trybie offline, więc warto pobrać. Pamiętaj, że środowisko robocze nie sumuje przydziałów (), co nie ma dla mnie sensu. Ale znowu nie mam też najnowszej wersji.

closetnoc
źródło
Mam ponad 100 baz danych w tym wystąpieniu RDS. Czy istnieje wygodny sposób na sprawdzenie ich wszystkich i podsumowanie wszystkiego?
Stephen Ostermiller
@Stephen Ostermiller 100 baz danych lub 100 tabel? Baza danych składa się z jednego lub więcej schematów. Schemat to zazwyczaj obszar tematyczny z powiązanymi tabelami.
closetnoc
100 baz danych, każda z około 20 tabelami.
Stephen Ostermiller
Eksperymentuję z przykładem na stronie, o której wspomniałem ... skontaktuje się z Tobą w ciągu zaledwie sekundy.
closetnoc
@Stephen Ostermiller Zaktualizował odpowiedź. Mam nadzieję że to pomoże.
closetnoc
1

2019 : Dla MySQL i MariaDB Zapoznaj się z tym podanym linkiem AWS: https://aws.amazon.com/premiumsupport/knowledge-center/view-storage-rds-mysql-mariadb/

Vigneshwar
źródło
Przydatne, aby wiedzieć, co korzysta z magazynu, ale moim problemem było po prostu wiedzieć, ile miejsca zostało.
Stephen Ostermiller
1
W tym celu możesz sprawdzić metrykę FreeStorageSpace w monitorowaniu RDS, która została również wspomniana w dokumencie.
Vigneshwar