首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 表維護全手冊:OPTIMIZE、ANALYZE、CHECK、REPAIR 四大操作標準化指南

     編輯:MySQL 資料庫相關知識

四大維護任務對照表

操作目的適用引擎SQL 語法命令行工具離線工具
OPTIMIZE碎片整理、回收空間、統計更新MyISAM, InnoDB, ArchiveOPTIMIZE TABLE tblmysqlcheck -o db tblmyisamchk -r tbl
ANALYZE更新索引統計信息(選擇率)MyISAM, InnoDB, BDBANALYZE TABLE tblmysqlcheck -a db tblmyisamchk -a tbl
CHECK檢查錯誤、更新索引統計MyISAM, InnoDB, CSVCHECK TABLE tblmysqlcheck -c db tblmyisamchk --check tbl
REPAIR修復損壞表僅 MyISAMREPAIR TABLE tblmysqlcheck -r db tblmyisamchk -r tbl

操作細節與避坑

1. OPTIMIZE TABLE

  • 原理: 重建表文件,消除碎片、更新統計
  • 鎖表: 全程持有排他鎖**,讀寫均阻塞
  • 空間: 需額外 データサイズ 空間構建臨時表,**磁碟不足會失敗**
  • InnoDB: 等價於 ALTER TABLE ... ENGINE=InnoDB(重建聚簇索引)
  • 建議: 低峰期執行,**大表用 pt-online-schema-change 無鎖優化**

2. ANALYZE TABLE

  • 作用: 採樣頁面更新 index_cardinality,影響優化器選擇索引
  • 輕量: 僅讀取元數據/採樣頁,**不鎖表、秒級完成**
  • 頻率: 大量數據變更後(>10%)、統計信息過期時
  • InnoDB: 5.6+ 支持持久化統計 innodb_stats_persistent=ON

3. CHECK TABLE

  • 模式: QUICK(默認,僅檢查索引鏈)、FAST、CHANGED、MEDIUM、EXTENDED(最全、最慢)
  • 輸出: status: OK / Corrupted / Warning
  • InnoDB: 僅做邏輯一致性檢查,**不修復**,損壞需從備份恢復

4. REPAIR TABLE

  • 僅限 MyISAM! InnoDB 損壞**不可 REPAIR**,必須備份恢復
  • 模式: QUICK(修復索引樹)、EXTENDED(逐行重建索引,慢但徹底)
  • 風險: 可能丟失數據,**修復前必備份 .MYD/.MYI**

批量維護腳本模板

#!/bin/bash
# 每日低峰執行:CHECK → 必要時 REPAIR → OPTIMIZE → ANALYZE
DB="prod_db"
TABLES=$(mysql -N -e "SHOW TABLES FROM $DB")

for TBL in $TABLES; do
  # 1. 檢查
  RESULT=$(mysql -N -e "CHECK TABLE $DB.$TBL" | awk '{print $4}')
  if [[ "$RESULT" != "OK" ]]; then
    echo "[$TBL] Check failed: $RESULT, attempting REPAIR..."
    mysql -e "REPAIR TABLE $DB.$TBL"
  fi
  
  # 2. 優化(可選,按碎片率判斷)
  # FRAG=$(mysql -N -e "SHOW TABLE STATUS $DB.$TBL" | awk '{print $10/$9}')  # Data_free/Data_length
  # if (( $(echo "$FRAG > 0.2" | bc -l) )); then
  #   mysql -e "OPTIMIZE TABLE $DB.$TBL"
  # fi
  
  # 3. 分析
  mysql -e "ANALYZE TABLE $DB.$TBL"
done

工具選型建議

  • 線上常規: mysqlcheck(服務運行中、支援所有引擎、可批量)
  • 離線深度: myisamchk(服務停止、MyISAM 專用、修復能力最強)
  • 大表無鎖: pt-online-schema-change --alter "ENGINE=InnoDB"

總結

**OPTIMIZE 整理碎片、ANALYZE 更新統計、CHECK 發現問題、REPAIR 修復 MyISAM**。建立**日檢查、周分析、月優化**的節奏,納入自動化運維體系,讓表健康度可視、可控、可追溯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved