Как определить размер моей базы данных Amazon RDS (MySQL)?

12

У меня есть база данных MySQL для моего сайта, размещенная на Amazon AWS с использованием RDS. Для него доступно 5 ГБ памяти. Как я могу определить, насколько велики данные в нем (и, следовательно, сколько из оставшейся квоты в 5 ГБ)?

Стивен Остермиллер
источник

Ответы:

13

Вот более организованные запросы к 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;

ПРЕДОСТЕРЕЖЕНИЕ

В каждом из трех (3) запросов вы увидите (SELECT 3 pw). На pwстендах для мощности 1024 , чтобы отобразить результаты в определенных единицах измерения:

  • (SELECT 0 pw) отобразит отчет в байтах
  • (SELECT 1 pw) будет отображать отчет в килобайтах
  • (SELECT 2 pw) будет отображать отчет в мегабайтах
  • (SELECT 3 pw) будет отображать отчет в гигабайтах
  • (SELECT 4 pw) будет отображать отчет в TeraBytes
  • (SELECT 5 pw) отобразит отчет в PetaBytes (пожалуйста, свяжитесь со мной, если вы запустите этот)

Вот запрос отчета с чуть меньшим форматированием в 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;

Попробуйте!

RolandoMySQLDBA
источник
Ты восхитителен!
Player1
7

Наконец-то я нашел простой способ получить эту информацию прямо из Amazon с помощью пары кликов.

  1. Войдите в панель управления RDS
  2. Нажмите на "Экземпляры БД"
  3. Нажмите на экземпляр, в котором вы заинтересованы. Это должно расширить его и показать гораздо больше информации об этом.
  4. Откройте вкладку «Мониторинг» слева (она должна быть выбрана по умолчанию)
  5. Есть монитор «Хранилище», который сообщает, сколько места он использует, и показывает график того, сколько доступно:

введите описание изображения здесь

Стивен Остермиллер
источник
Из документов RDS свободная память - это «сколько оперативной памяти доступно в экземпляре БД, в мегабайтах», а не использование хранилища экземпляра: docs.aws.amazon.com/AmazonRDS/latest/UserGuide/…
Эван Кроске
@EvanKroske Похоже, что «Свободное место для хранения» на самом деле является метрикой, которую я хочу. Спасибо за ссылку на документ.
Стивен Остермиллер
Похоже, что AWS обновил весь интерфейс, так как я написал этот ответ. Я обновил его на основе того, что я вижу сегодня.
Стивен Остермиллер
похоже, что они, возможно, обновили его снова, я не вижу вкладку мониторинга. а хранилище просто перечисляет общий выделенный размер.
Брайан Томас
2

show table status from mydatabsename; где mydatabasename - это имя вашей базы данных.

Это показывает вам метрики Data_length и Index_length для таблицы и другие метрики. Вы должны были бы суммировать эти столбцы и помнить, что они в байтах, поэтому вам придется делить на 1024, чтобы получить килобайт, а затем снова на 1024, чтобы получить мегабайты, и затем снова на 1024, чтобы получить концерты. Это также показывает свободное место в пределах вашего индекса / размещения базы данных.

Вы можете получить более детальный и sum (), если хотите изучить: http://dev.mysql.com/doc/refman/5.5/en/show-table-status.html

SELECT SUM(DATA_FREE) FROM INFORMATION_SCHEMA.PARTITIONS;

Показывает оставшееся пространство в распределении индекса / базы данных ...

SELECT SUM(Data_length) FROM INFORMATION_SCHEMA.PARTITIONS;

SELECT SUM(Index_length) FROM INFORMATION_SCHEMA.PARTITIONS;

... показывает используемые данные и размер индекса (вам нужно будет добавить их для общего распределения)

Если вы хотите анализировать вещи немного больше ...

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

Конечно, вы также можете использовать MySQL Workbench, как я нашел здесь: http://dev.mysql.com/downloads/tools/workbench/, но это предполагает, что у вас есть доступ к порту на вашем сервере базы данных. Тем не менее, вы можете многое сделать в автономном режиме, так что стоит скачать. Обратите внимание, что рабочая среда не суммирует () выделения, что не имеет смысла для меня. Но опять же, у меня тоже нет последней версии.

closetnoc
источник
У меня есть более 100 баз данных в этом экземпляре RDS. Есть ли удобный способ запросить их все и подвести итог?
Стивен Остермиллер
@ Стефен Остермиллер 100 баз данных или 100 таблиц? База данных состоит из одной или нескольких схем. Схема обычно является предметной областью со связанными таблицами.
closetnoc
100 баз данных каждая с около 20 таблицами.
Стивен Остермиллер
Я экспериментирую с примером на странице, на которую я ссылаюсь ... я вернусь к вам через секунду.
closetnoc
@Stephen Ostermiller Обновил ответ. Надеюсь это поможет.
closetnoc
1

2019 : для MySQL и MariaDB. Пожалуйста, обратитесь к этой ссылке, предоставленной AWS: https://aws.amazon.com/premiumsupport/knowledge-center/view-storage-rds-mysql-mariadb/

Vigneshwar
источник
Полезно знать, что использует хранилище, но моей проблемой было просто узнать, сколько хранилища у меня осталось.
Стивен Остермиллер
1
Вы можете посмотреть на показатель FreeStorageSpace в мониторинге RDS для этого, и он также был упомянут в документе.
Vigneshwar