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

MySQL 效能調優(三):緩衝區與快取核心參數詳解

     編輯:MySQL 資料庫相關知識

前言

MySQL 擁有上百個可調參數,但掌握核心緩衝區/快取即可解決 80% 效能問題。本文延續調優系列,聚焦 table_cache、thread_cache、key_buffer、臨時表與查詢快取的監控指標與調整策略。

一、表快取

每張表對應一個檔案描述符,table_cache(5.1.3+ 稱 table_open_cache)控制同時開啟表的上限。

SHOW STATUS LIKE 'open%tables';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_tables   | 5000  |
| Opened_tables | 195   |
+---------------+-------+
  • Opened_tables 快速增長 → table_cache 太小,建議調大(如 5000)。
  • Open_tables 遠小於 table_cache → 設定過大,可適度縮減。

二、執行緒快取

頻繁建立/銷毀執行緒耗資源,thread_cache_size 保留閒置執行緒供下次連線複用。

SHOW STATUS LIKE 'threads%';
+-------------------+--------+
| Variable_name     | Value  |
+-------------------+--------+
| Threads_cached    | 27     |
| Threads_connected | 15     |
| Threads_created   | 838610 |
| Threads_running   | 3      |
+-------------------+--------+
  • Threads_created 快速增長 → 增加 thread_cache_size(如 40)。
  • 理想:Threads_created 增長緩慢,Threads_cached 維持合理池大小。

三、鍵值緩衝區(MyISAM 專用)

key_buffer_size 存放 MyISAM 索引塊。目標:從記憶體讀取,避免磁碟 I/O。

SHOW STATUS LIKE '%key_read%';
+-------------------+-----------+
| Variable_name     | Value     |
+-------------------+-----------+
| Key_read_requests | 163554268 |
| Key_reads         | 98247     |
+-------------------+-----------+

未命中率 = Key_reads / Key_read_requests。
經驗值: 每 1,000 請求 < 1 次磁碟讀取(< 0.1%)。若超過 → 增加 key_buffer_size(如 384M)。

四、臨時表

複雜查詢(GROUP BY、ORDER BY、DISTINCT)可能產生臨時表。優先在記憶體(MEMORY 引擎),超過大小則轉 MyISAM 寫磁碟。

SHOW STATUS LIKE 'created_tmp%';
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| Created_tmp_disk_tables | 30660 |
| Created_tmp_files       | 2     |
| Created_tmp_tables      | 32912 |
+-------------------------+-------+
  • 磁碟臨時表比率 = Created_tmp_disk_tables / Created_tmp_tables。
  • 無絕對標準,視查詢複雜度而定。長期觀察趨勢。
  • 控制上限:tmp_table_size 與 max_heap_table_size 必須同時設定,取較小者生效。

五、調優實務建議

  1. 先建立基準:穩定運行一段時間後收集 SHOW GLOBAL STATUS。
  2. 單一參數微調,觀察狀態變化至少 30 分鐘。
  3. 總記憶體分配不超過實體記憶體 70-80%(留給 OS、連線緩衝、排序緩衝等)。
  4. InnoDB 為主時,重心放在 innodb_buffer_pool_size,而非 key_buffer_size。

總結

緩衝區/快取調優核心在於「監控狀態變量 → 計算命中率/建立率 → 微調參數 → 持續觀察」。本文涵蓋的五大指標是入門必修課,下一篇將深入查詢快取、排序緩衝、檔案描述符與表鎖分析。

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