¿Cómo puedo saber qué tan grande es mi base de datos Amazon RDS (MySQL)?

12

Tengo una base de datos MySQL para mi sitio web alojada en Amazon AWS usando RDS. Tiene 5 GB de almacenamiento disponible. ¿Cómo puedo saber qué tan grandes son realmente los datos que contiene (y, por lo tanto, cuánto de la cuota de 5GB me queda)?

Stephen Ostermiller
fuente

Respuestas:

13

Aquí hay más consultas organizadas contra el INFORMATION_SCHEMA

Tamaños por motor de almacenamiento

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;

Tamaños por base de datos

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

Tamaños por base de datos / motor de almacenamiento

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;

CONSIDERACIÓN

En cada una de las tres (3) consultas, verá (SELECT 3 pw). Los pwsoportes para el poder de 1024 para mostrar los resultados en unidades específicas:

  • (SELECT 0 pw) mostrará el informe en bytes
  • (SELECT 1 pw) mostrará el informe en KiloBytes
  • (SELECT 2 pw) mostrará el informe en MegaBytes
  • (SELECT 3 pw) mostrará el informe en GigaBytes
  • (SELECT 4 pw) mostrará el informe en TeraBytes
  • (SELECT 5 pw) mostrará el informe en PetaBytes (contácteme si ejecuta este)

Aquí hay una consulta de informe con un poco menos de formato 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;

Darle una oportunidad !!!

RolandoMySQLDBA
fuente
¡Eres increíble!
Jugador1
6

Finalmente encontré la manera fácil de obtener esta información directamente de Amazon con un par de clics.

  1. Inicie sesión en el panel de administración de RDS
  2. Haga clic en "Instancias de base de datos"
  3. Haga clic en la instancia en la que está interesado. Eso debería expandirlo y mostrar mucha más información al respecto.
  4. Ver la pestaña "Monitoreo" a la izquierda (se debe seleccionar de manera predeterminada)
  5. Hay un monitor de "Almacenamiento" que indica cuánto espacio utiliza y muestra un gráfico de cuánto está disponible:

ingrese la descripción de la imagen aquí

Stephen Ostermiller
fuente
De los documentos RDS, la memoria libre es "cuánta RAM está disponible en la instancia de DB, en megabytes", no el uso de almacenamiento de la instancia: docs.aws.amazon.com/AmazonRDS/latest/UserGuide/…
Evan Kroske
@EvanKroske Parece que "Espacio de almacenamiento libre" es en realidad la métrica que quiero. Gracias por el enlace del documento.
Stephen Ostermiller
Parece que AWS ha renovado toda la interfaz desde que escribí esta respuesta. Lo actualicé según lo que veo hoy.
Stephen Ostermiller
parece que lo han renovado nuevamente, no veo una pestaña de monitoreo. y el almacenamiento solo enumera el tamaño total asignado.
Brian Thomas
2

show table status from mydatabsename; donde mydatabasename es el nombre de su base de datos.

Esto le muestra las métricas Data_length e Index_length por tabla y otras métricas. Tendría que sumar estas columnas y recordar que están en bytes, por lo que tendría que dividir por 1024 para obtener kb y luego por 1024 nuevamente para obtener megs y luego por 1024 nuevamente para obtener conciertos. Esto también muestra el espacio libre dentro de su asignación de índice / base de datos.

Puede obtener más granular y sum () si desea explorar: http://dev.mysql.com/doc/refman/5.5/en/show-table-status.html

SELECT SUM(DATA_FREE) FROM INFORMATION_SCHEMA.PARTITIONS;

Muestra el espacio restante en la asignación de índice / base de datos ...

SELECT SUM(Data_length) FROM INFORMATION_SCHEMA.PARTITIONS;

SELECT SUM(Index_length) FROM INFORMATION_SCHEMA.PARTITIONS;

... muestra los datos y el tamaño del índice utilizado (deberá agregarlos para la asignación total)

Si quieres diseccionar las cosas un poco más ...

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

Por supuesto, también puede usar MySQL Workbench como lo he encontrado aquí: http://dev.mysql.com/downloads/tools/workbench/ pero eso supone que tiene acceso de puerto a su servidor de base de datos. Aún así, también puedes hacer mucho sin conexión, así que vale la pena descargarlo. Tenga en cuenta que el banco de trabajo no suma () asignaciones, lo que no tiene sentido para mí. Pero, de nuevo, tampoco tengo la última versión.

closetnoc
fuente
Tengo más de 100 bases de datos en esta instancia de RDS. ¿Hay una manera conveniente de consultarlos a todos y resumir todo?
Stephen Ostermiller
@Stephen Ostermiller 100 bases de datos o 100 tablas? Una base de datos consta de uno o más esquemas. Un esquema suele ser un área temática con tablas relacionadas.
closetnoc
100 bases de datos cada una con aproximadamente 20 tablas.
Stephen Ostermiller
Estoy experimentando con el ejemplo en la página a la que me referí ... te responderé en solo un segundo.
closetnoc
@Stephen Ostermiller Actualizó la respuesta. Espero que esto ayude.
closetnoc