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

MySQL 表鎖狀態與開啟檔案數監控:Table_locks_waited、Open_files 解讀與調優

     編輯:MySQL 資料庫相關知識

開啟檔案數監控

mysql> SHOW GLOBAL STATUS LIKE 'open_files';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_files    | 1410  |
+---------------+-------+

mysql> SHOW VARIABLES LIKE 'open_files_limit';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 4590  |
+------------------+-------+

健康度指標:`Open_files / open_files_limit * 100%` < 80% 為佳。超過需調大 `open_files_limit`(受 OS `ulimit -n` 限制)。

表鎖狀態監控

mysql> SHOW GLOBAL STATUS LIKE 'table_locks%';
+-----------------------+-----------+
| Variable_name         | Value     |
+-----------------------+-------+
| Table_locks_immediate | 490206328 |
| Table_locks_waited    | 2084912   |
+-----------------------+-----------+
  • Table_locks_immediate:立即獲得鎖的次數。
  • Table_locks_waited:等待鎖的次數(發生阻塞)。

判斷準則與對策

比率 = Table_locks_immediate / Table_locks_waited
-- 範例:490206328 / 2084912 ≈ 235
比率建議
> 5000表鎖爭用極低,MyISAM 足夠
1000 ~ 5000關注寫入併發,考慮 InnoDB
< 1000表鎖嚴重阻塞,**強烈建議遷移至 InnoDB(行級鎖)**

實務補充

  • InnoDB 行級鎖大幅降低寫入衝突,適合高併發寫入場景。
  • MyISAM 適合唯讀/多讀少寫、全文搜尋、日誌表。
  • 同時監控 `Opened_tables` / `Open_tables` 評估 `table_open_cache` 是否足夠。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved