MySQL 復原 insert 語句導致 ibd 檔案增大‘一倍’

來源:互聯網
上載者:User

MySQL 復原 insert 語句導致 ibd 檔案增大‘一倍’

MySQL 復原 insert 語句導致 ibd 檔案增大‘一倍’,一個簡單的測試:

start transaction;
insert into tb1 values(3, repeat('a', 65000),'x',1);
--commit;
rollback;

分別是 tb1.ibd 在插入前,復原前,復原後的檔案大小:

有人在QQ群問:為什麼復原會導致tb1.idb的磁碟空間增大?

---------------------------------------

其實原因很簡單:

131072-98304=163840-131072=32768
所以:復原insert = delete + re-insert ,而 delete是指設定一下flag,so ... 內容增大一倍。

insert 操作的復原,先要delete之前插入的值,然後重新insert一次,而delete是邏輯刪除,也就是設定一個flag,沒有真正的刪除。這就是原因。

但是,因為事務沒有提交,所以資料還沒有寫入磁碟,那麼為什麼tb1.idb佔用的磁碟空間卻兩次發生增長呢?顯然,那是因為tb1.idb磁碟空間是預先分配的,也就是說在語句執行時,磁碟空間就已經分配了,只是因為事務沒有提交,而checkpoint不可能將未提交的資料刷入磁碟,所以磁碟空間分配了,但是insert的資料卻沒有寫入磁碟。此時insert的資料還存在於buffer中。磁碟空間是預先分配的。

本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.