tft每日頭條

 > 科技

 > mysql數據庫原理及實踐教程

mysql數據庫原理及實踐教程

科技 更新时间:2024-11-23 07:46:57

大家都知道Windows磁盤工具裡有一個磁盤碎片整理,與之類似的是,MySQL數據庫裡也會産生碎片,也需要整理。

mysql數據庫原理及實踐教程(程序員應知應會之MySQL數據庫的碎片整理)1

MySQL碎片就是指數據文件中一些不連續的空白空間,因為大小的原因。這些空白空間無法被全部利用上,久而久之,這些空白空間越來越多,越來越碎,從而就會引起物理存儲和邏輯存儲的位置順序不一緻的問題,導緻了碎片的産生。

一、數據庫碎片的産生。

MySQL在執行delete或者update操作時,就有可能産生碎片。

在執行delete操作的時候,存儲中會産生由于delete操作而留下的空白空間,而當有新數據插入時,MySQL會嘗試使用這些空白空間,但是數據又不可能完全一緻,正好把空白覆蓋滿,于是會就有空白空間出現。尤其是在大量delete操作的時候,會出現大量的空白空間。

在執行update的時候,例如在可變長度的字段,比如說varchar或lob,更新的數據可能和原來的長度不一樣,這樣也會産生碎片。比如說原始長度是varchar(100),但我們更新了大量長度為50的數據,這樣的話,就有50的空間成為了空白。對于MySQL的innodb存儲引擎來說,表存儲數據的單位是頁,而update操作會造成頁分裂,分裂以後存儲變得不連續、不規則,從而産生碎片。

二、碎片造成的問題

碎片會造成很多問題例如說空間浪費和讀寫性能下降。由于存在大量碎片,數據從連續規則的存儲方式變為随機分散的存儲方式,會增加磁盤IO的負擔,于是讀寫性能會下降。

三、MySQL中如何處理碎片

在MySQL中,可以利用

show table status like ‘%table_name%’;

語句來查看表狀态。

mysql數據庫原理及實踐教程(程序員應知應會之MySQL數據庫的碎片整理)2

其中data_length是表數據大小,index_length是表索引大小,data_free就是碎片大小,當data_free大于0時,意味着表中有碎片。

optimize table table_name;

語句可以清理碎片,但并不是所有的存儲引擎都支持(程序員應知應會之MySQL的存儲引擎),該語句适用于InnoDB、MyISAM 和 ARCHIVE 表。

此操作會鎖表,時間長短依據表數據量的大小。

另外我們也可以通過重建表的存儲引擎來重組數據和索引的存儲,從而達到清理碎片的目的。

語句如下:

alter table table_name engine = innodb;

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved