Ketika saya memeriksa ukuran database saya di bawah MySQL saya mendapatkan ini:
MariaDB [(none)]> SELECT table_schema "Data Base Name", sum( data_length + index_length ) / 1024 / 1024 "Data Base Size in MB", sum( data_free )/ 1024 / 1024 "Free Space in MB" FROM information_schema.TABLES GROUP BY table_schema;
+--------------------+----------------------+------------------+
| Data Base Name | Data Base Size in MB | Free Space in MB |
+--------------------+----------------------+------------------+
| alfresco | 245.75000000 | 34.00000000 |
| drupal | 892.15625000 | 216.00000000 |
+--------------------+----------------------+------------------+
Ketika saya memeriksa ukuran pada disk saya mendapatkan ini:
$ sudo du -h --max-depth=1 /var/lib/mysql/
317M /var/lib/mysql/alfresco
1.4G /var/lib/mysql/drupal
Jika saya menggabungkan ruang bekas dan bebas yang diberikan oleh Maria DB dan membandingkannya dengan angka disk saya memiliki yang berikut ini:
alfresco: DB=279MB DISK=317MB (+14%)
drupal: DB=1100MB DISK=1433MB (+30%)
T: Apakah normal memiliki banyak overhead pada disk / Apakah ada yang bisa saya lakukan untuk menguranginya?
FYI Saya pikir menjalankan optimasi mysql akan membantu ( menggunakan perintah itu ), itu memang mengurangi ukuran database, tetapi tidak mengubah ukuran file pada disk.
Informasi tambahan:
server: ubuntu server 10.04 LTS
DB server: MariaDB
DB engine: InnoDB v10 (for all tables)
Table collation: utf8_general_ci
Nb Drupal tables: 416 (0.80MB overhead per table)
Nb Alfresco tables: 84 (0.45MB overhead per table)
Jawaban:
Jika Anda menggunakan tabel InnoDB, ukuran file ibdata Anda akan bertambah seiring waktu. Jadi, jika Anda mengeluarkan
DELETE
pernyataan, ukuran basis data Anda akan berkurang, tetapi file ibdata akan tetap sama (tidak berkurang).Jika Anda tidak menggunakan
innodb_file_per_table
opsi, satu-satunya cara untuk mendapatkan kembali ruang tersebut adalah dengan membuang basis data dan memulihkan dari dumpfile.Namun, jika Anda menggunakan
innodb_file_per_table
, Anda dapat mengeluarkanpada tabel yang tumbuh terlalu besar untuk merebut kembali ruang disk.
sumber
AlTER TABLE foo ENGINE=InnoDB
tanpanyainnodb_file_per_table=1
tidak akan menyusut ibdata.