Tệp ibdata1
này là không gian bảng hệ thống cho cơ sở hạ tầng InnoDB.
Nó chứa một số lớp thông tin quan trọng cho InnoDB
- Bảng dữ liệu trang
- Bảng chỉ mục trang
- Từ điển dữ liệu
- Dữ liệu điều khiển MVCC
- Hoàn tác không gian
- Phân đoạn rollback
- Bộ đệm ghi đôi (Các trang được viết trong nền để tránh bộ đệm của hệ điều hành)
- Chèn bộ đệm (Thay đổi chỉ mục phụ)
Vui lòng lưu ý vị trí của ibdata1 trong Vũ trụ InnoDB (ở phía bên phải)
Bạn có thể tách Trang dữ liệu và chỉ mục ibdata1
bằng cách bật innodb_file_per_table . Điều này sẽ khiến bất kỳ bảng InnoDB mới được tạo nào lưu trữ dữ liệu và trang chỉ mục trong một .ibd
tệp bên ngoài .
Thí dụ
- datadir là / var / lib / mysql
CREATE TABLE mydb.mytable (...) ENGINE=InnoDB;
, tạo ra /var/lib/mysql/mydb/mytable.frm
- innodb_file_per_table được bật, Trang dữ liệu / chỉ mục được lưu trữ trong
/var/lib/mysql/mydb/mytable.ibd
- innodb_file_per_table bị vô hiệu hóa, Trang dữ liệu / chỉ mục được lưu trữ trong ibdata1
Bất kể bảng InnoDB được lưu trữ ở đâu, chức năng của InnoDB yêu cầu tìm siêu dữ liệu của bảng và lưu trữ và truy xuất thông tin MVCC để hỗ trợ tuân thủ ACID và Cách ly giao dịch .
Dưới đây là những bài viết trước đây của tôi về việc tách dữ liệu bảng và chỉ mục khỏi ibdata1
PHẢI LÀM GÌ TIẾP THEO
Bạn có thể tiếp tục để ibdata1 lưu trữ mọi thứ, nhưng điều đó làm cho việc chụp nhanh LVM trở nên cực kỳ tệ hại (ý kiến cá nhân của tôi).
Bạn cần sử dụng bài đăng StackOverflow của tôi và thu nhỏ tệp đó vĩnh viễn.
Vui lòng chạy truy vấn này:
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;
Điều này sẽ cho biết có thể thu hồi được bao nhiêu không gian lãng phí sau khi áp dụng Dọn dẹp InnoDB.