Saat ini saya menggunakan information_schema.TABLES untuk menghitung total penggunaan ruang disk yang dikelompokkan berdasarkan nama database, tetapi sedang berjalan sangat lambat. Pada server dengan ratusan basis data, dibutuhkan beberapa menit untuk menghitungnya.
Apa metode tercepat untuk menghitung penggunaan ruang disk oleh database? Haruskah saya melihat filesystem saja? Apakah ada metode untuk mempercepat information_schema?
Jika Anda menggunakan MyISAM, lebih mudah untuk hanya melihat sistem file dan menggunakannya du -sh /var/lib/mysql/database.
Jika Anda menggunakan InnoDB dengan set innodb_file_per_table , maka Anda bisa mendapatkan jawaban perkiraan menggunakan du -sh. Perkiraan karena masih ada beberapa data yang disimpan dalam file ibdata1, sehingga Anda akan sedikit di sisi rendah. Teknik ini juga berfungsi dengan innodb_file_per_tabledatabase MyISAM / InnoDB ( ) campuran .
Jika Anda menggunakan InnoDB tanpa innodb_file_per_table set, maka Anda harus melihat INFORMATION_SCHEMA.
Dalam salah satu kasus di atas, Anda dapat menjalankan kueri berikut untuk mendapatkan informasi yang Anda cari.
mysql>select table_schema, sum((data_length+index_length)/1024/1024)AS MB from information_schema.tables groupby1;+--------------------+-----------------+| table_schema | MB |+--------------------+-----------------+| prod |298025.72448921|| information_schema |0.00781248|| maatkit |70.77330779|| mysql |0.66873168|| test |4752.31449127|+--------------------+-----------------+5rowsinset(0.01 sec)
Jika Anda memiliki jumlah tabel yang sangat besar, ini bisa lambat, seperti yang sudah Anda temukan.
Saya melihat di tempat lain bahwa opsi 3 tidak memperhitungkan ukuran VARCHAR.
Joe
3
Anda dapat menggunakan perintah ini untuk mendapatkan informasi dalam GB:
mysql>select table_schema "DB name (table_schema)",
sum((data_length+index_length)/1024/1024/1024)AS"DB size in GB"from
information_schema.tables groupby table_schema;+-------------------------------------+-----------------+| table_schema DB name (table_schema)| DB size in GB |+-------------------------------------+-----------------+| prod |29.72448921|| information_schema |0.00781248|| miscDB |0.77330779|| mysql |0.66873168|| test |47.31449127|+-------------------------------------+-----------------+5rowsinset(0.01 sec)
ATAU untuk memasukkan ruang bebas / reklamasi, gunakan:
mysql>SELECT table_schema "database name",
sum( data_length + index_length )/1024/1024"database size in MB",
sum( data_free )/1024/1024"free reclaimable space in MB"FROM information_schema.TABLES
GROUPBY table_schema;+--------------------+---------------+------------------------------+| DB name | DB size in GB | free/reclaimable space in GB |+--------------------+---------------+------------------------------+| prod |1.26|0.03|| information_schema |38.77|3.75|| miscDB |0.00|0.00|| mysql |0.00|0.00|| test |0.00|0.00|+--------------------+---------------+------------------------------+
Spasi dapat direklamasi menggunakan perintah OPTIMIZE TABLE untuk InnoDB, MyISAM, dan tabel ARCHIVE.
Agar saya dapat melihat di mana ruang disk digunakan (terlepas apakah itu dalam tabel mysql atau tidak), saya menggunakan perintah "du" saya yang dapat dipercaya. Ini contoh saya menemukan dari mana semua ruang dimakan.
Anda dapat melihat bahwa sebagian besar ruang sedang digunakan oleh folder ini. / mysql
Folder itu menampung tabel data. Untuk melihat tabel mana yang mengambil semua ruang, Anda dapat melanjutkan seperti ini menggunakan opsi "manusia" atau "-h". Saya suka melakukan manajemen ruang disk dengan cara ini karena kadang-kadang Anda bahkan tidak bisa masuk ke mysql karena Anda tidak tahu kata sandi atau pengguna.
Anda dapat menggunakan perintah ini untuk mendapatkan informasi dalam GB:
Diadaptasi jawaban dari Aaron Brown untuk memberikan ukuran dalam GB. Lihat jawaban Aaron Brown untuk lebih jelasnya.
ATAU untuk memasukkan ruang bebas / reklamasi, gunakan:
Spasi dapat direklamasi menggunakan perintah OPTIMIZE TABLE untuk InnoDB, MyISAM, dan tabel ARCHIVE.
Lihat juga Bagaimana Mendapatkan Ukuran Sebenarnya dari Database MySQL? untuk lebih jelasnya.
sumber
Untuk mendapatkan info tentang nama tabel dan jumlah catatan yang dimilikinya, kueri di bawah ini dapat digunakan,
Untuk mendapatkan info tentang basis data di server dengan ukurannya masing-masing, kueri di bawah ini dapat digunakan,
sumber
Agar saya dapat melihat di mana ruang disk digunakan (terlepas apakah itu dalam tabel mysql atau tidak), saya menggunakan perintah "du" saya yang dapat dipercaya. Ini contoh saya menemukan dari mana semua ruang dimakan.
Anda dapat melihat bahwa sebagian besar ruang sedang digunakan oleh folder ini. / mysql
Folder itu menampung tabel data. Untuk melihat tabel mana yang mengambil semua ruang, Anda dapat melanjutkan seperti ini menggunakan opsi "manusia" atau "-h". Saya suka melakukan manajemen ruang disk dengan cara ini karena kadang-kadang Anda bahkan tidak bisa masuk ke mysql karena Anda tidak tahu kata sandi atau pengguna.
Anda dapat melihat bahwa semua ruang dihambat oleh beberapa tabel yang menyimpan banyak data GiG. Semoga ini membantu.
sumber
Saya akan mencari ukuran file pada kamus data Anda. Ini instan dan akurat.
Peringatan : Menurut mesin penyimpanan, indeks disimpan dalam file utama atau file lain jangan lupa untuk menjumlahkannya jika diperlukan.
sumber
Saya tahu ini sudah tua tetapi seseorang mungkin menemukan ini relevan.
Di MySQL saya menggunakan:
Karena DB saya adalah InnoDB, ini hanya perkiraan.
Saya membandingkan hasil ini dengan:
Semoga ini bisa membantu Anda
sumber
Terbaik (setelah melakukan
apt-get install ncdu
):untuk mendapatkan semua ukuran total dari database Mysql di VPS Anda.
sumber