Bagaimana saya bisa tahu seberapa besar database Amazon RDS (MySQL) saya?

12

Saya memiliki database MySQL untuk situs web saya yang di-host di Amazon AWS menggunakan RDS. Ini memiliki penyimpanan 5GB yang tersedia untuknya. Bagaimana saya bisa tahu seberapa besar data di dalamnya sebenarnya (dan karena itu berapa banyak kuota 5GB yang tersisa)?

Stephen Ostermiller
sumber

Jawaban:

13

Berikut adalah pertanyaan yang lebih terorganisir terhadap INFORMATION_SCHEMA

Ukuran Dengan Mesin Penyimpanan

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;

Ukuran Berdasarkan Database

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

Ukuran Menurut Database / Mesin Penyimpanan

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

Di masing-masing dari tiga (3) pertanyaan, Anda akan melihat (SELECT 3 pw). The pwsingkatan Power Of 1024 untuk menampilkan hasil dalam satuan tertentu:

  • (SELECT 0 pw) akan Menampilkan Laporan dalam Bytes
  • (SELECT 1 pw) akan Menampilkan Laporan dalam KiloBytes
  • (SELECT 2 pw) akan Menampilkan Laporan dalam MegaBytes
  • (SELECT 3 pw) akan Menampilkan Laporan di GigaBytes
  • (SELECT 4 pw) akan Menampilkan Laporan dalam TeraBytes
  • (SELECT 5 pw) akan Menampilkan Laporan di PetaBytes (silakan hubungi saya jika Anda menjalankan ini)

Berikut adalah kueri laporan dengan sedikit pemformatan di 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;

Cobalah !!!

RolandoMySQLDBA
sumber
Kamu luar biasa!
Player1
6

Saya akhirnya menemukan cara mudah untuk mendapatkan informasi ini langsung dari Amazon dengan beberapa klik.

  1. Masuk ke dashboard manajemen RDS
  2. Klik pada "Instance DB"
  3. Klik pada contoh di mana Anda tertarik. Itu harus memperluas dan menunjukkan lebih banyak info tentangnya.
  4. Lihat tab "Pemantauan" di sebelah kiri (harus dipilih secara default)
  5. Ada monitor "Penyimpanan" yang memberi tahu seberapa banyak ruang yang digunakannya dan memperlihatkan grafik berapa banyak yang tersedia:

masukkan deskripsi gambar di sini

Stephen Ostermiller
sumber
Dari dokumen RDS, memori yang bebas adalah "berapa banyak RAM yang tersedia pada instance DB, dalam megabyte", bukan penggunaan penyimpanan instance: docs.aws.amazon.com/AmazonRDS/latest/UserGuide/…
Evan Kroske
@EvanKroske Sepertinya "Ruang Penyimpanan Gratis" sebenarnya adalah metrik yang saya inginkan. Terima kasih atas tautan dokumen.
Stephen Ostermiller
Sepertinya AWS telah mengubah seluruh antarmuka sejak saya menulis jawaban ini. Saya telah memperbaruinya berdasarkan apa yang saya lihat hari ini.
Stephen Ostermiller
Sepertinya mereka telah mengubahnya kembali, saya tidak melihat tab pemantauan. dan penyimpanan hanya mencantumkan ukuran total yang dialokasikan.
Brian Thomas
2

show table status from mydatabsename; di mana mydatabasename adalah nama basis data Anda.

Ini menunjukkan Anda metrik Data_length dan Index_length per tabel dan metrik lainnya. Anda harus total kolom ini dan ingat bahwa mereka dalam byte sehingga Anda harus membagi dengan 1024 untuk mendapatkan kb dan kemudian dengan 1024 lagi untuk mendapatkan MB dan kemudian oleh 1024 lagi untuk mendapatkan pertunjukan. Ini juga menunjukkan ruang kosong dalam alokasi indeks / database Anda.

Anda bisa mendapatkan lebih banyak rincian dan jumlah () jika Anda ingin menjelajahi: http://dev.mysql.com/doc/refman/5.5/id/show-table-status.html

SELECT SUM(DATA_FREE) FROM INFORMATION_SCHEMA.PARTITIONS;

Memperlihatkan ruang yang tersisa dalam alokasi indeks / basis data ...

SELECT SUM(Data_length) FROM INFORMATION_SCHEMA.PARTITIONS;

SELECT SUM(Index_length) FROM INFORMATION_SCHEMA.PARTITIONS;

... menunjukkan data dan ukuran indeks yang digunakan (Anda harus menambahkannya untuk alokasi total)

Jika Anda ingin membedah lebih banyak hal ...

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

Tentu saja Anda juga dapat menggunakan MySQL Workbench seperti yang saya temukan di sini: http://dev.mysql.com/downloads/tools/workbench/ tetapi itu mengasumsikan Anda memiliki akses port ke server database Anda. Namun, Anda juga dapat melakukan banyak hal secara offline sehingga layak untuk diunduh. Harap perhatikan bahwa meja kerja tidak menjumlahkan () alokasi yang tidak masuk akal bagi saya. Tetapi sekali lagi, saya juga tidak memiliki versi terbaru.

closetnoc
sumber
Saya memiliki lebih dari 100 database dalam contoh RDS ini. Apakah ada cara mudah untuk menanyakan semuanya dan merangkum semuanya?
Stephen Ostermiller
@Stephen Ostermiller 100 database atau 100 tabel? Basis data terdiri dari satu atau lebih skema. Skema biasanya merupakan area subjek dengan tabel terkait.
closetnoc
Masing-masing 100 database dengan sekitar 20 tabel.
Stephen Ostermiller
Saya bereksperimen dengan contoh pada halaman yang saya maksudkan ... akan menghubungi Anda dalam beberapa detik.
closetnoc
@Stephen Ostermiller Memperbarui jawabannya. Semoga ini membantu.
closetnoc
1

2019 : Untuk MySQL dan MariaDB Silakan merujuk ke tautan yang disediakan AWS ini: https://aws.amazon.com/premiumsupport/knowledge-center/view-storage-rds-mysql-mariadb/

Vigneshwar
sumber
Berguna untuk mengetahui apa yang menggunakan penyimpanan, tetapi masalah saya hanya mengetahui berapa banyak penyimpanan yang tersisa.
Stephen Ostermiller
1
Anda dapat melihat metrik FreeStorageSpace dalam pemantauan RDS untuk itu dan telah disebutkan dalam dokumen juga.
Vigneshwar