Bagaimana Mendapatkan Ukuran Sebenarnya dari Database MySQL?

144

Saya ingin tahu berapa banyak ruang yang digunakan database MySQL saya, untuk memilih web host. Saya menemukan perintah SHOW TABLE STATUS LIKE 'table_name'sehingga ketika saya melakukan kueri, saya mendapatkan sesuatu seperti ini:

Name       | Rows | Avg. Row Length | Data_Length | Index Length
----------   ----   ---------------   -----------   ------------
table_name   400          55            362000        66560
  • angka dibulatkan.

Jadi, apakah saya memiliki 362000 atau 400 * 362000 = 144800000 byte data untuk tabel ini? Dan apa arti Panjang Indeks? Terima kasih!

marvin
sumber
Anda memiliki 362000 + 66560. Panjang data + panjang indeks
Mandza
Kemungkinan rangkap dari Bagaimana cara mendapatkan ukuran basis data mysql?
Mohammad
Halaman ini akan memberi Anda jawaban yang tepat rathishkumar.in/2017/12/...
Rathish

Jawaban:

281

Dari S. Prakash, ditemukan di forum MySQL :

SELECT table_schema "database name",
    sum( data_length + index_length ) / 1024 / 1024 "database size in MB",
    sum( data_free )/ 1024 / 1024 "free space in MB"
FROM information_schema.TABLES
GROUP BY table_schema; 

Atau dalam satu baris untuk lebih mudah menyalin-menempel:

SELECT table_schema "database name", sum( data_length + index_length ) / 1024 / 1024 "database size in MB", sum( data_free )/ 1024 / 1024 "free space in MB" FROM information_schema.TABLES GROUP BY table_schema; 
ron_dobley
sumber
7
Apa artinya Ruang Kosong di MB? Saya memiliki 100-an GB gratis tetapi ini melaporkan kurang dari 1 GB gratis.
Barth
1
@Arth sesuai dokumentasi itu berarti "ruang kosong dalam byte untuk tabel InnoDB". Sayangnya tidak ada penjelasan apa yang berarti: - \
ckujau
13
Ruang kosong dalam byte berarti persis seperti itu - itu berarti jumlah ruang dapat direklamasi jika Anda MENGOPTIMASI tabel atau membangun kembali tabel dari awal. Ketika database menyimpan informasi pada disk, mereka mengalokasikannya dalam blok; menghapus sebuah catatan seringkali membebaskan satu blok di antara blok-blok yang digunakan, dan itu sangat mahal untuk menggeser semua blok-blok lain untuk menggunakan ruang itu sehingga ditandai sebagai "bebas". Ruang dapat digunakan nanti oleh mesin database itu sendiri, atau dapat direklamasi menggunakan OPTIMIZE TABLE foo(MyISAM), atau membuat ulang + menganalisis untuk tabel InnoDB.
Dihancurkan
92

Anda bisa mendapatkan ukuran database Mysql Anda dengan menjalankan perintah berikut di klien Mysql

SELECT  sum(round(((data_length + index_length) / 1024 / 1024 / 1024), 2))  as "Size in GB"
FROM information_schema.TABLES
WHERE table_schema = "<database_name>"
minhas23
sumber
30

Jika Anda menggunakan phpMyAdmin, itu dapat memberi tahu Anda informasi ini.

Cukup buka "Database" (menu di atas) dan klik "Aktifkan Statistik".

Anda akan melihat sesuatu seperti ini:

Tangkapan layar phpMyAdmin

Ini mungkin akan kehilangan keakuratan karena ukurannya naik, tetapi itu harus cukup akurat untuk keperluan Anda.

Radu Murzea
sumber
Saat ini saya menggunakan 000webhost. Ini memiliki phpMyAdmin tetapi saya tidak dapat menemukan kotak centang "aktifkan statistik". Apakah ada (mungkin) permintaan untuk itu?
marvin
1
@marvin Yah, mungkin saja hosting tersebut menginstal versi phpMyAdmin yang lebih lama. Saya tidak tahu versi mana fitur ini diperkenalkan.
Radu Murzea
Di bilah sisi Anda, klik ikon Rumah di bagian atas yang membawa Anda ke halaman rumah. Di sana di jendela kanan, klik 'Databases'. Ini menampilkan tabel satu kolom dari basis data, di bawahnya adalah tautan yang disebut 'Aktifkan Statistik'
VeeK
8

jika Anda ingin menemukannya di MB lakukan ini

SELECT table_schema                                        "DB Name", 
   Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB" 
FROM   information_schema.tables 
GROUP  BY table_schema; 
jakson
sumber
Cuplikan SQL jawaban ini tampaknya merupakan salinan dari stackoverflow.com/a/1733523/1200542
Ariel Allon
3

Pada dasarnya ada dua cara: permintaan DB (panjang data + panjang indeks) atau periksa ukuran file. Panjang indeks terkait dengan data yang disimpan dalam indeks.

Semuanya dijelaskan di sini:

http://www.mkyong.com/mysql/how-to-calculate-the-mysql-database-size/

MiGro
sumber
Nah, halaman ini adalah sumber pertanyaan saya. Tetapi menurut permintaan ini, saya memiliki 0,5 MB, yang membuat saya cukup aman. Saya harap itu benar :) Terima kasih!
marvin
0

Tidak ada jawaban yang menyertakan ukuran overhead dan ukuran metadata tabel.

Berikut adalah perkiraan yang lebih akurat dari "ruang disk" yang dialokasikan oleh database.

SELECT ROUND((SUM(data_length+index_length+data_free) + (COUNT(*) * 300 * 1024))/1048576+150, 2) AS MegaBytes FROM information_schema.TABLES WHERE table_schema = 'DATABASE-NAME'
Semra
sumber
5
Bisakah Anda menguraikan? Terutama konstanta Anda 300dan 150?
Melebius
Tolong, bisakah Anda menguraikan?
Allan Andrade
0

SUM(Data_free) mungkin atau mungkin tidak valid . Itu tergantung pada sejarah innodb_file_per_table. Diskusi lebih lanjut ditemukan di sini .

Rick James
sumber
0

Jika Anda menggunakan MySql Workbench, sangat mudah untuk mendapatkan semua detail ukuran Database, setiap ukuran tabel, ukuran indeks dll.

  1. Klik kanan pada Skema
  2. Pilih opsi Inspektur Skema

    masukkan deskripsi gambar di sini

  3. Ini Menunjukkan semua detail ukuran Skema

  4. Pilih Tab Tabel untuk melihat ukuran setiap tabel.

    masukkan deskripsi gambar di sini

  5. Ukuran tabel diputar dalam kolom Panjang Data

Viraj Dhamal
sumber
0

Jika Anda ingin menemukan ukuran semua basis data MySQL, gunakan perintah ini, yang akan menampilkan ukurannya masing-masing dalam megabita;

SELECT table_schema "database", sum(data_length + index_length)/1024/1024 "size in MB" FROM information_schema.TABLES GROUP BY table_schema;

Jika Anda memiliki basis data besar, Anda dapat menggunakan perintah berikut untuk menampilkan hasilnya dalam gigabyte;

SELECT table_schema "database", sum(data_length + index_length)/1024/1024/1024 "size in GB" FROM information_schema.TABLES GROUP BY table_schema;

Jika Anda ingin menunjukkan ukuran hanya database tertentu, misalnya YOUR_DATABASE_NAME, Anda bisa menggunakan kueri berikut;

SELECT table_schema "database", sum(data_length + index_length)/1024/1024/1024 "size in GB" FROM information_schema.TABLES WHERE table_schema='YOUR_DATABASE_NAME' GROUP BY table_schema;
Arbab Nazar
sumber