聊聊MySQL資料碎片產生及清理

2022-07-11 08:09:15 字數 833 閱讀 6617

產生:

使用mysql,每當對錶記錄進行刪除時,該片段空間就會被留空。長期時間下來或者當大量記錄被刪時,有可能留空的空間比儲存表(結構、資料、索引)的空間還要大。這樣一來,當mysql掃瞄資料時,實際上掃瞄的是表的容量需求上限。也就是資料被寫入的區域中處於峰值位置的部分。如果進行新的插入操 作,mysql將嘗試利用這些留空的區域,但仍然無法將其徹底占用。這種額外的破碎的儲存空間在讀取效率方面比正常占用的空間要低得多。

檢視資料庫中各個表的碎片空間情況:

select table_schema, table_name, concat(truncate(data_free/

1024

/1024,2),'

mb') data_free, engine from information_schema.tables where table_schema =

'資料庫名

'and data_free >

0;

清理:

對此,mysql提供了清理碎片的方法:

optimize table tab_name;

tips:

對於該方法,需要注意的是執行的時候會產生表鎖,因此對於體積巨大的列表應尤其注意使用。optimize table 只對myisam,bdb和innodb表起作用,尤其是myisam表的作用最為明顯。此外,並不是所有表都需要進行碎片整理,一般只需要對包含varchar、text、blob、float等可變長度的文字資料型別的表進行整理即可。一般根據實際情況,兩周或乙個月進行碎片清理即可。

MySQL資料碎片的產生

mysql具有相當多不同種類的儲存引擎來實現列表中的資料儲存功能。每當mysql從你的列表中刪除了一行內容,該段空間就會被留空。而在一段時間內的大量刪除操作,會使這種留空的空間變得比儲存列表內容所使用的空間更大。當mysql對資料進行掃瞄時,它掃瞄的物件實際是列表的容量需求上限,也就是資料被寫入的區...

資料庫中碎片的產生及影響

內部碎片 頁內部儲存空間不飽和,內部碎片似的資料分布在更多的頁中。需要掃瞄更多的頁,增加i o消耗。碎片產生的原因 資料新增或者更新引起的頁拆分 頁拆分 當頁中的資料被修改大小之後,不能放進原有的頁中,把當前頁中的資料一般移動到新的頁中,把更新後的資料放入舊的頁中。插入操作 聚集索引不是自增列,產生...

記憶體碎片產生原因及解決辦法

記憶體碎片通常分為內部碎片和外部碎片 1.內部碎片是由於採用固定大小的記憶體分割槽,當乙個程序不能完全使用分給它的固定記憶體區域時就產生了內部碎片,通常內部碎片難以完全避免 2.外部碎片是由於某些未分配的連續記憶體區域太小,以至於不能滿足任意程序的記憶體分配請求,從而不能被程序利用的記憶體區域。現在...