~/blog/wordpress-query-monitor-performance-debugging-guide.md
網站效能與架構優化 · 2026 / 01 / 15

網站卡頓?別只會裝快取!用 Query Monitor 揪出效能殺手

Eric — 浪花科技創辦人 / AI 架構師
Eric
浪花科技創辦人 · AI 架構師
網站卡頓?別只會裝快取!用 Query Monitor 揪出效能殺手
目錄 table-of-contents.md

「網站還開得起來,但就是卡卡的」——客戶這句話比系統掛掉的警報更難處理,因為掛掉重啟就好,慢卻查無實據。別急著再裝一個快取外掛蓋住病灶,先用 Query Monitor 把每一條慢查詢、肥大外掛和重複請求攤在眼前。這篇就教你用它揪出真正的效能殺手。

「卡卡的」是一個工程師最痛恨的形容詞。是網路慢?是資料庫慢?還是你電腦開了五百個分頁?大部分的新手站長遇到這種情況,第一反應就是:「裝快取外掛!」或是「升級主機!」

先等等,別急著掏錢。如果你不知道病因就亂投藥,那叫安慰劑效應。今天我要教大家用工程師的手術刀——Query Monitor,精準切開 WordPress 的肚子,看看裡面到底是哪一段程式碼在搞鬼。這不是一篇單純的外掛介紹文,這是我這幾年來幫客戶「抓鬼」的實戰筆記。

為什麼你需要 Query Monitor?這不是有 WP-Debug 嗎?

WordPress 內建的 WP_DEBUG 雖然好用,但它只能告訴你「哪裡出錯了(Error)」,卻沒辦法告訴你「哪裡慢了(Performance)」。

很多時候,網站沒有噴錯,但就是跑得像烏龜。這通常是因為:

  • 資料庫查詢過多:也就是經典的 N+1 Query 問題,一個頁面撈了 200 次資料庫。
  • 外掛衝突:某個外掛在後台默默執行了耗時的 API 請求。
  • 記憶體洩漏:某個迴圈把 PHP Memory Limit 吃乾抹淨。

Query Monitor (QM) 就是為了解決這些問題而生的。它能掛在你的 Admin Bar 上,即時顯示當前頁面的所有技術指標。作為開發者,如果你的開發環境沒裝這個,那你就像是蒙著眼睛在寫 Code。

第一刀:解剖資料庫查詢 (Database Queries)

安裝好 Query Monitor 後,隨便打開一個前台頁面,看向頂端的 Admin Bar。如果有紅字或橘字,恭喜你,抓到兇手了。點開選單,選擇 Queries

1. 揪出慢查詢 (Slow Queries)

Query Monitor 會列出所有執行時間超過 0.05 秒(可設定)的 SQL 指令。我常看到有些外掛為了撈出「熱門文章」,寫了超級複雜的 JOIN 查詢,結果沒加 Index,直接讓 MySQL 進入「全表掃描 (Full Table Scan)」的地獄。

工程師碎碎念:
看到慢查詢,請先檢查你的資料表有沒有適當的索引。如果是外掛造成的,且你無法修改程式碼,請果斷停用該外掛或尋找替代品。不要試圖用快取去掩蓋一個寫得很爛的 SQL,那只是把炸彈往後延而已。

2. 識別重複查詢 (Duplicate Queries)

這是我最常抓到的問題。請看以下這段範例程式碼:

// 錯誤示範:在迴圈中不斷查詢資料庫
foreach ( $product_ids as $id ) {
    $product_name = $wpdb->get_var( "SELECT post_title FROM wp_posts WHERE ID = $id" );
    echo $product_name;
}

如果你有 50 個商品,這裡就會執行 50 次 SQL 查詢。在 Query Monitor 的「Duplicate Queries」分頁中,如果你看到同一條 SQL 語句出現了幾十次,這就是兇手。解法是改用 WHERE ID IN (1, 2, 3...) 一次撈出來,或是使用 WordPress 的 Object Cache 機制。

第二刀:HTTP API 請求 (HTTP API Calls)

這是一個隱藏的效能殺手。現代的外掛都很喜歡「打電話回家」,比如檢查更新、同步授權、或是抓取 Instagram 的最新貼文。

如果你的網站「偶爾」會卡住 5-10 秒,通常就是 HTTP Request Timeout 造成的。PHP 是單執行緒的,當它在等外部 API 回應時,整個網頁就會卡在那裡轉圈圈。

在 Query Monitor 中點選 HTTP API Calls,檢查:

  • 有沒有回應時間超過 1 秒的請求?
  • 有沒有回應代碼非 200 的請求(如 404, 500, 502)?
  • 是不是在「前台」執行了不必要的 API 呼叫?(這種應該盡量移到背景排程 Action Scheduler 處理)。

第三刀:Hooks 與 Actions (Hooks & Actions)

有時候,資料庫很快,API 也沒問題,但 TTFB (Time To First Byte) 就是很高。這時候就要看 PHP 的執行效率了。

WordPress 是由無數個 Hooks 組成的。Query Monitor 可以告訴你哪個 Hook 掛載了哪些 Function,以及它們被觸發了幾次。雖然 QM 免費版不能像 Xdebug 或 New Relic 那樣精確到微秒級的 Profiling,但它能幫你快速縮小範圍。

實戰案例:
有一次我發現客戶的結帳頁面超慢,透過 QM 發現 woocommerce_checkout_process 這個 Hook 被觸發時,某個行銷自動化外掛一口氣執行了 3 秒鐘的邏輯運算。解決方案?把那個外掛的邏輯改成非同步處理(Asynchronous)。

第四刀:環境與 PHP 相容性

隨著 PHP 8.2、8.3 的普及,很多老舊的 WordPress 外掛開始噴出大量的 Deprecated 警告。雖然這些警告不會直接導致網站掛掉,但大量的 Log 寫入硬碟(error.log)和螢幕輸出,絕對會拖累效能。

Query Monitor 的 PHP Errors 分頁會幫你整理好這些警告。如果某個外掛瘋狂噴錯,這就是一個強烈的訊號:該外掛已經缺乏維護,是時候尋找替代品了。

工程師的總結:數據不會說謊

網站優化不是靠「感覺」,而是靠「證據」。Query Monitor 就是你的搜證工具。在安裝快取外掛(如 WP Rocket 或 LiteSpeed Cache)之前,請務必先用 QM 把底層的病灶找出來。

記住 Eric 的這句話:「快取是為了讓快更順暢,而不是為了掩蓋慢的事實。」如果你的資料庫查詢本身就要跑 5 秒,快取失效的那一瞬間,你的伺服器就會被塞爆。

如果你的網站經過 Query Monitor 診斷後,發現是資料庫架構或客製化程式碼的問題,光靠調整外掛已經無法解決,那麼你可能需要更深度的技術介入。

別讓技術債拖垮你的業績! 歡迎聯繫浪花科技,讓我們資深的工程師團隊為您的 WordPress 進行一次深度的「核磁共振」檢查。

延伸閱讀:

// FAQ

常見問題

Query Monitor 和 WordPress 內建的 WP_DEBUG 有什麼不同?
WP_DEBUG 主要告訴你「哪裡出錯了(Error)」,但無法告訴你「哪裡慢了(Performance)」。Query Monitor 則專注於效能診斷,能掛在 Admin Bar 上即時顯示當前頁面的資料庫查詢、HTTP 請求、Hooks 觸發、PHP 錯誤等技術指標,協助找出網站變慢的真正原因。
用 Query Monitor 揪出網站效能問題該優先看哪些項目?
重點放在三項:慢查詢(Slow Queries)、重複查詢(Duplicate Queries)、以及回應時間過長的 HTTP API 請求,這些最直接影響使用者體驗。若同一條 SQL 在 Duplicate Queries 出現幾十次,通常代表迴圈內重複查詢資料庫(N+1 問題),應改用一次撈取或物件快取。
網站偶爾卡住 5 到 10 秒,通常是什麼原因?
常見原因是外部 HTTP 請求逾時(Timeout)。許多外掛會在背景「打電話回家」檢查更新或抓取外部資料,由於 PHP 是單執行緒,等待外部 API 回應時整個頁面就會卡住。可在 Query Monitor 的 HTTP API Calls 檢查是否有回應過慢或非 200 的請求,並把不必要的呼叫移到背景排程處理。
Query Monitor 可以在正式環境使用嗎?
可以,但建議只在需要除錯時啟用,因為 Query Monitor 本身也會消耗資源記錄這些數據。除錯完畢後應停用外掛,或透過設定 Authentication Cookie 讓它只對管理員生效,避免影響一般訪客的效能。
應該先裝快取外掛還是先用 Query Monitor 找問題?
應先用 Query Monitor 找出底層病灶。快取是為了讓本來就快的頁面更順暢,而不是用來掩蓋慢的事實。如果資料庫查詢本身就要跑好幾秒,一旦快取失效,伺服器仍會被瞬間湧入的請求塞爆,因此務必先解決根本的慢查詢或程式碼問題。
~/roamer-tech/newsletter // FREE
// newsletter

訂閱免費電子報

把 AI 自動化、企業系統設計與 WordPress / Laravel 開發的真實案例和可直接照做的技巧,整理成電子報寄給你。只寄精選內容、不灌垃圾信,一鍵就能退訂。

$
// final.exec()

準備好讓你的網站開始為你工作了嗎?