Mysql

查詢執行中的不同執行緒狀態

  • December 18, 2014

我的基於 MySQL 5.1 的 Intranet 系統在高負載期間面臨著非常糟糕的性能。通過 MonYog 觀察時,我發現以下執行緒狀態:

執行緒狀態

我們可以通過它的名字來簡單的理解不同的執行緒狀態。有人可以提供

  • 這些州之間的差異?
  • 為什麼“發送數據”佔 76%?

這些州之間的差異?

MySQL 文件提供了這些狀態的列表。

從您的 MONYog 圖表中,以下是狀態:

發送數據

該執行緒正在讀取和處理 SELECT 語句的行,並將數據發送到客戶端。由於在此狀態期間發生的操作往往會執行大量磁碟訪問(讀取),因此它通常是給定查詢生命週期內執行時間最長的狀態。

複製到 tmp 表

伺服器正在復製到記憶體中的臨時表。

排序結果

對於 SELECT 語句,這類似於創建排序索引,但適用於非臨時表。

釋放物品

執行緒已執行命令。在此狀態期間完成的某些項目釋放涉及查詢記憶體。這種狀態通常伴隨著清理。

為什麼“發送數據”佔 76%?

正如文件所說,數據正在發送給客戶端。

高負載的原因是什麼?

  • 返回大量行的查詢
  • 很多查詢

返回大量行的查詢

如果您有返回大量行的查詢,請調整您的查詢以返回更少的數據,也許將有效的 WHERE 和 LIMIT 子句添加到 SELECT 中。

很多查詢

如果您沒有返回大量行的查詢,那麼它一定是很多查詢。您可能會發現這令人驚訝,但 MONYog 使用以下任一方式查詢 mysqld 以獲取全域狀態變數

SHOW GLOBAL VARIABLES;

要麼

SELECT * FROM information_schema.global_status;

這些也構成查詢。

也許您可以配置 MONYog 以減少檢索狀態資訊的頻率。

引用自:https://dba.stackexchange.com/questions/58667