Navicat 部落格

識別費時查詢 2021 年 8 月 23 日,由 Robert Gravelle 撰寫

通常,當資料庫長時間執行較慢時,罪魁禍首往往是「壞」査詢。也就是說,査詢沒有完全最佳化,寫得不好,或者使用者能夠從資料庫中擷取無限數量的列。我們可以透過在伺服器上投入更多的資源來減輕一些痛苦,但這實際上是一個短期修復,不能解決根本問題。最好的做法是識別並修復有問題的査詢,只要花點時間和精力,這應該不會太難。當然,第一步是識別哪些査詢是沒有問題的。有幾種方法可以實現這一點,具體取決於你的特定資料庫類型。今天的文章將重點介紹 MySQL 的一些策略。

使用 MySQL PROCESSLIST 資料表

PROCESSLIST 資料拪是 INFORMATION_SCHEMA 資料庫中許多中繼資料資料表之一。顧名思義,它維護資料庫執行個體中執行的所有程序的資訊。有幾種方法可以存取它,如下面幾節所示。

使用 mysqladmin 命令列工具

Mysqladmin 命令列工具隨 MySQ L一起提供。使用標誌「processlist」(簡稱「proc」)執行它以查看目前正在執行的程序。此外,加入「statistics」標誌(簡稱「stat」)將顯示自 MySQL 上次重啓以來査詢的執行統計資訊:

以下是一些範例輸出:

+-------+------+-----------+-----------+---------+------+-------+--------------------+----------+
| Id    | User | Host      | db        | Command | Time | State | Info               | Progress |
+-------+------+-----------+-----------+---------+------+-------+--------------------+----------+
| 77255 | root | localhost | employees | Query   | 150  |       | call While_Loop2() | 0.000    |
| 77285 | root | localhost |           | Query   | 0    | init  | show processlist   | 0.000    |
+-------+------+-----------+-----------+---------+------+-------+--------------------+----------+
Uptime: 781398  Threads: 2  Questions: 18761833  Slow queries: 0  Opens: 2976  Flush tables: 1  Open tables: 101  Queries per second avg: 26.543

由於此命令在 shell 介面上執行,因此可以透過管道將輸出傳輸到其他指令碼和工具。缺點是 PROCESSLIST 資料表的 info 欄總是被截斷,因此它不能提供較長査詢的完整査詢。

查詢 MySQL PROCESSLIST 資料表

査詢 PROCESSLIST 資料表的方法是從 MySQL 的互動模式提示字元中執行「show processlist;」查詢。與執行其他査詢一樣,Navicat 使用者可以在 SQL 編輯器中直接執行 show processlist 査詢:

show_processlist (47K)

請注意,有時需要在命令中加入「full」修飾詞才能停用 Info 欄的截斷(檢視長査詢時,這是必需的。)

使用監控工具

為了更深入地分析査詢效能,許多專業資料庫管理員(DBA)會使用資料庫監控器,如 Navicat Monitor。它有一個查詢分析器,可以即時監控査詢,以快速提高伺服器的效能和效率。它顯示所有執行査詢的摘要資訊,並應讓你輕鬆發現有問題的査詢。如下圖所示,Navicat Monitor 可以根據執行時間排序査詢,以便一眼就能找到最慢的査詢:

query_analyzer (125K)

總結

在這篇文章中,我們學習了一些使用 MySQL PROCESSLIST 資料表和 Navicat Monitor 識別慢速査詢的簡單方法。

按一下此處了解有關 Navicat Monitor 所有功能的更多詳細資料,或下載為期 14 天的全功能免費試用版!

Navicat 文章
頻道記錄
分享
部落格封存檔