File ibdata1
adalah tablespace sistem untuk infrastruktur InnoDB.
Ini berisi beberapa kelas untuk informasi penting untuk InnoDB
- Halaman Data Tabel
- Halaman Indeks Tabel
- Kamus data
- Data Kontrol MVCC
- Batalkan Spasi
- Segmen kembalikan
- Buffer Tulis Ganda (Halaman Ditulis di Latar Belakang untuk menghindari caching OS)
- Masukkan Buffer (Perubahan ke Indeks Sekunder)
Harap perhatikan tempat ibdata1 di InnoDB Universe (di Sisi Kanan)
Anda dapat memisahkan Halaman Data dan Indeks ibdata1
dengan mengaktifkan innodb_file_per_table . Ini akan menyebabkan tabel InnoDB yang baru dibuat untuk menyimpan data dan mengindeks halaman dalam .ibd
file eksternal .
Contoh
- datadir adalah / var / lib / mysql
CREATE TABLE mydb.mytable (...) ENGINE=InnoDB;
, menciptakan /var/lib/mysql/mydb/mytable.frm
- innodb_file_per_table diaktifkan, Halaman Data / Indeks Disimpan
/var/lib/mysql/mydb/mytable.ibd
- innodb_file_per_table dinonaktifkan, Halaman Data / Indeks Disimpan di ibdata1
Tidak masalah di mana tabel InnoDB disimpan, fungsionalitas InnoDB membutuhkan mencari metadata tabel dan menyimpan dan mengambil info MVCC untuk mendukung kepatuhan ACID dan Isolasi Transaksi .
Berikut ini adalah artikel saya sebelumnya tentang memisahkan data tabel dan indeks dari ibdata1
APA YANG HARUS DILAKUKAN BERIKUTNYA
Anda dapat terus memiliki ibdata1 menyimpan semuanya, tetapi itu membuat snapshot LVM benar-benar membosankan (pendapat pribadi saya).
Anda perlu menggunakan pos StackOverflow saya dan mengecilkan file itu secara permanen.
Silakan jalankan kueri ini:
SELECT
((POWER(1024,3)*94 - InnoDBDiskDataAndIndexes))/POWER(1024,3) SpaceToReclaim
FROM
(SELECT SUM(data_length+index_length) InnoDBDiskDataAndIndexes
FROM information_schema.tables WHERE engine='InnoDB') A;
Ini akan memberi tahu seberapa banyak ruang terbuang yang dapat direklamasi setelah menerapkan Pembersihan InnoDB.