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;。高頻查詢下產生大量切換資料庫指令。
mysql_select_db("database") 一次性選擇資料庫(連線建立時)。mysql_query("SQL"),不再重複切換。dbname 參數。| 指標 | 修正前 | 修正後 |
|---|---|---|
| change_db / 秒 | 50 | < 1 |
| Com_ 總量佔比 | 44.4% | ~3% |
| QPS | 32.1 | 穩定提升 |
SELECT DB,不要在每次查詢重複切換。mysql_db_query、mysql_* 系列函數,改用 mysqli 或 PDO。mysqlreport 或 pt-query-digest 觀察 Com_ 分佈,異常峰值即為優化切入點。一行程式碼修正,消除 44% 無效指令,顯著降低 MySQL CPU 與網路開銷。