CREATE TABLE tb1 (
id INT AUTO_INCREMENT PRIMARY KEY,
webtext TEXT,
tp VARCHAR(2),
se INT
) ENGINE=InnoDB;
START TRANSACTION;
INSERT INTO tb1 VALUES (3, REPEAT('a', 65000), 'x', 1);
-- COMMIT;
ROLLBACK;
文件大小變化:

MySQL 手冊:Each BLOB or TEXT value is represented internally by a separately allocated object. This is in contrast to all other data types, for which storage is allocated once per column when the table is opened.
INSERT 瞬間分配溢出頁 → IBD 增大ROLLBACK 需邏輯刪除已插入行REPEAT('a', 65000) ≈ 65 KB → 需 2 個 32KB 頁 = 64 KB,但實測單次增長 32 KB,推測為壓縮或首頁共享機制REPEAT('a', 65535):INSERT 增長 65,536,ROLLBACK 再增 32,768同表中 VARCHAR(2)、INT 列的 INSERT + ROLLBACK **不會**導致 IBD 增大,證實僅 TEXT/BLOB 觸發。
| 操作 | TEXT/BLOB IBD 變化 | 普通列 IBD 變化 |
|---|---|---|
| INSERT | +32KB (分配溢出頁) | 無變化 (Buffer Pool 延遲刷新) |
| ROLLBACK | +32KB (分配刪除標記頁) | 無變化 |
| COMMIT | 空間可被 Purge 線程回收 | 空間可被回收 |
啟示: 大量 TEXT/BLOB 寫入+回滾場景(如導入腳本失敗重試)會導致 IBD 文件快速膨脹,需關注innodb_file_per_table、定期OPTIMIZE TABLE或ALTER TABLE ... ENGINE=InnoDB回收空間。