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

MySQL mysqlreport 分析:Com_change_db 佔比過高問題診斷與解決

     編輯:MySQL 資料庫相關知識

現象

mysqlreport 輸出顯示:

Com_ 1.04k 50/s 44.4
set_option 523 1.8/s 3.62
change_db 510 50/s 44.4

change_db 佔 Com_ 總量 44.4%,遠高於正常 3% 左右,導致大量無謂 USE database; 消耗資源。

根因分析

程式碼使用 mysql_db_query("database", "SQL"),此函數每次呼叫都會隱式執行 USE database;。高頻查詢下產生大量切換資料庫指令。

解決方案

  1. 改用 mysql_select_db("database") 一次性選擇資料庫(連線建立時)。
  2. 後續查詢統一使用 mysql_query("SQL"),不再重複切換。
  3. 或升級至 mysqli/PDO,建立連線時指定 dbname 參數。

修正前後對比

指標修正前修正後
change_db / 秒50< 1
Com_ 總量佔比44.4%~3%
QPS32.1穩定提升

最佳實踐

  • 連線池初始化時一次 SELECT DB,不要在每次查詢重複切換。
  • 避免使用已棄用的 mysql_db_query、mysql_* 系列函數,改用 mysqli 或 PDO。
  • 定期跑 mysqlreport 或 pt-query-digest 觀察 Com_ 分佈,異常峰值即為優化切入點。

一行程式碼修正,消除 44% 無效指令,顯著降低 MySQL CPU 與網路開銷。

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