Como posso saber o tamanho do meu banco de dados Amazon RDS (MySQL)?


12

Eu tenho um banco de dados MySQL para o meu site hospedado no Amazon AWS usando RDS. Possui 5 GB de armazenamento disponível. Como posso saber o tamanho real dos dados (e, portanto, quanto da cota de 5 GB que me resta)?

Respostas:


13

Aqui estão consultas mais organizadas em relação ao INFORMATION_SCHEMA

Tamanhos por mecanismo de armazenamento

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;

Tamanhos por banco de dados

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

Tamanhos por mecanismo de banco de dados / armazenamento

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;

EMBARGO

Em cada uma das três (3) consultas, você verá (SELECT 3 pw). O pwsignifica Power Of 1024 para exibir os resultados em unidades específicas:

  • (SELECT 0 pw) exibirá o relatório em bytes
  • (SELECT 1 pw) exibirá o relatório em KiloBytes
  • (SELECT 2 pw) exibirá o relatório em MegaBytes
  • (SELECT 3 pw) exibirá o relatório em GigaBytes
  • (SELECT 4 pw) exibirá o relatório em TeraBytes
  • (SELECT 5 pw) exibirá o relatório em PetaBytes (entre em contato comigo se você executar este)

Aqui está uma consulta de relatório com um pouco menos de formatação em 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;

De uma chance !!!


Você é incrível!
Jogador1 12/02

6

Finalmente, encontrei a maneira mais fácil de obter essas informações diretamente da Amazon com apenas alguns cliques.

  1. Efetue login no painel de gerenciamento do RDS
  2. Clique em "Instâncias de banco de dados"
  3. Clique na instância em que você está interessado. Isso deve expandi-lo e mostrar muito mais informações sobre ele.
  4. Veja a guia "Monitoramento" à esquerda (ela deve ser selecionada por padrão)
  5. Há um monitor "Armazenamento" que informa quanto espaço ele usa e mostra um gráfico de quanto está disponível:

insira a descrição da imagem aqui


Nos documentos do RDS, a memória disponível é "quanta RAM está disponível na instância do banco de dados, em megabytes", não o uso de armazenamento da instância: docs.aws.amazon.com/AmazonRDS/latest/UserGuide/…
Evan Kroske

@EvanKroske Parece que "Espaço de Armazenamento Livre" é realmente a métrica que eu quero. Obrigado pelo link do documento.
Stephen Ostermiller

Parece que a AWS reformulou toda a interface desde que escrevi esta resposta. Eu atualizei com base no que vejo hoje.
Stephen Ostermiller

parece que eles podem ter melhorado novamente, não vejo uma guia de monitoramento. e o armazenamento apenas lista o tamanho total alocado.
Brian Thomas

2

show table status from mydatabsename; onde mydatabasename é o nome do seu banco de dados.

Isso mostra as métricas Data_length e Index_length por tabela e outras métricas. Você teria que totalizar essas colunas e lembrar que elas estão em bytes; portanto, seria necessário dividir por 1024 para obter kb e depois por 1024 novamente para obter megas e depois por 1024 novamente para obter shows. Isso também mostra o espaço livre na alocação de índice / banco de dados.

Você pode obter mais detalhes e sum () se desejar explorar: http://dev.mysql.com/doc/refman/5.5/en/show-table-status.html

SELECT SUM(DATA_FREE) FROM INFORMATION_SCHEMA.PARTITIONS;

Mostra o espaço restante na alocação de índice / banco de dados ...

SELECT SUM(Data_length) FROM INFORMATION_SCHEMA.PARTITIONS;

SELECT SUM(Index_length) FROM INFORMATION_SCHEMA.PARTITIONS;

... mostra os dados e o tamanho do índice usado (você precisará adicioná-los para a alocação total)

Se você quiser dissecar as coisas um pouco mais ...

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

Obviamente, você também pode usar o MySQL Workbench como eu encontrei aqui: http://dev.mysql.com/downloads/tools/workbench/, mas isso pressupõe que você tenha acesso à porta do servidor de banco de dados. Ainda assim, você pode fazer muito offline também, por isso vale o download. Observe que o ambiente de trabalho não soma alocações () que não fazem sentido para mim. Mas, novamente, também não tenho a versão mais recente.


Eu tenho mais de 100 bancos de dados nesta instância do RDS. Existe uma maneira conveniente de consultar todos eles e resumir tudo?
Stephen Ostermiller

@ Stephen Ostermiller 100 bancos de dados ou 100 tabelas? Um banco de dados consiste em um ou mais esquemas. Um esquema geralmente é uma área de assunto com tabelas relacionadas.
Closetnoc

100 bancos de dados, cada um com cerca de 20 tabelas.
Stephen Ostermiller

Estou experimentando o exemplo da página a que me referi ... entrarei em contato com você em apenas um segundo.
Closetnoc 12/05

@Stephen Ostermiller Atualizou a resposta. Espero que isto ajude.
Closetnoc 12/05

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.