MySQL 清除表空間碎片

来源:https://www.cnblogs.com/zhang-ding-1314/archive/2018/08/31/9564138.html
-Advertisement-
Play Games

碎片產生的原因 (1)表的存儲會出現碎片化,每當刪除了一行內容,該段空間就會變為空白、被留空,而在一段時間內的大量刪除操作,會使這種留空的空間變得比存儲列表內容所使用的空間更大; (2)當執行插入操作時,MySQL會嘗試使用空白空間,但如果某個空白空間一直沒有被大小合適的數據占用,仍然無法將其徹底占 ...


碎片產生的原因

(1)表的存儲會出現碎片化,每當刪除了一行內容,該段空間就會變為空白、被留空,而在一段時間內的大量刪除操作,會使這種留空的空間變得比存儲列表內容所使用的空間更大;

(2)當執行插入操作時,MySQL會嘗試使用空白空間,但如果某個空白空間一直沒有被大小合適的數據占用,仍然無法將其徹底占用,就形成了碎片;

(3)當MySQL對數據進行掃描時,它掃描的對象實際是列表的容量需求上限,也就是數據被寫入的區域中處於峰值位置的部分;

例如:

一個表有1萬行,每行10位元組,會占用10萬位元組存儲空間,執行刪除操作,只留一行,實際內容只剩下10位元組,但MySQL在讀取時,仍看做是10萬位元組的表進行處理,所以,碎片越多,就會越來越影響查詢性能。

查看表碎片大小

(1)查看某個表的碎片大小

mysql> SHOW TABLE STATUS LIKE '表名';

結果中'Data_free'列的值就是碎片大小

(2)列出所有已經產生碎片的表

mysql> select table_schema db, table_name, data_free, engine from information_schema.tables where table_schema not in ('information_schema', 'mysql') and data_free > 0;

清除表碎片

(1)MyISAM表

mysql> optimize table 表名

(2)InnoDB表

mysql> alter table 表名 engine=InnoDB

 

建議

清除碎片操作會暫時鎖表,數據量越大,耗費的時間越長,可以做個腳本,定定期檢查mysql中 information_schema.TABLES欄位,查看 DATA_FREE 欄位,大於0話,就表示有碎片,例如每周三凌晨,檢查DATA_FREE欄位,大於自己認為的警戒值的話,就清理一次。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本節重點: 多表連接查詢 符合條件連接查詢 子查詢 準備工作:準備兩張表,部門表(department)、員工表(employee) ps:觀察兩張表,發現department表中id=203部門在employee中沒有對應的員工,發現employee中id=6的員工在department表中沒有對 ...
  • PRIMARY KEY約束添加規則 1、在表中常有一列或多列的組合,其值能唯一標識表中的每一行,這樣的一列或多列成為表的主鍵(PrimaryKey)。 2、一個表只能有一個主鍵,而且主鍵約束中的列不能為空值。 3、只有主鍵列才能被作為其他表的外鍵所創建。 4、一般情況下一個表中只能有一個主鍵。 使用 ...
  • 本節重點: 單表查詢 語法: 1.找到表:from 2.拿著where指定的約束條件,去文件/表中取出一條條記錄 3.將取出的一條條記錄進行分組group by,如果沒有group by,則整體作為一組 4.將分組的結果進行having過濾 5.執行select 6.去重 7.將結果按條件排序:or ...
  • 動態SQL運用實例 語法8.1.6之前: EXECUTE IMMEDIATE dynamic_sql_string [INTO {define_var1 [, define_var2] ... | plsql_record}] [USING [IN | OUT | IN OUT] bind_arg1 ...
  • 本節重點: 插入數據 INSERT 更新數據 UPDATE 刪除數據 DELETE 再來回顧一下之前我們練過的一些操作,相信大家都對插入數據、更新數據、刪除數據有了全面的認識。那麼在mysql中其實最重要的不是這三大操作,而是查數據最重要,下節課知曉 ...
  • mysql的埠號預設是3306,初學者可能有時會忘記或者之前修改了預設的埠號,忘記了,或者很多時候我們一臺電腦需要安裝兩個mysql或者想設置一個自己的喜歡的數字,那麼接下來我們來看看如何查看或者修改mysql現有的埠號; 同時點擊或者依次win+R打開運行界面輸入cmd或者在開始菜單的搜索框 ...
  • 之前從來沒有使用過Dbvisualizer軟體,用起來之後發現比mysqlfront不是好一點。之前一直不知道sql語句的自動提示功能,只能一個個單詞輸入,而且不是預設設置。之後在網上找到了怎麼設置,現在找到了記錄一下。 設置自動提示方法: 點擊Tool->Tool Properties->SQL ...
  • MySQL: ERROR 1040: Too many connections”的異常情況,造成這種情況的一種原因是訪問量過高,MySQL伺服器抗不住,這個時候就要考慮增加從伺服器分散讀壓力;另一種原因就是MySQL配置文件中max_connections值過小。首先,我們來查看mysql的最大連接 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...