Mysql
查詢執行中的不同執行緒狀態
我的基於 MySQL 5.1 的 Intranet 系統在高負載期間面臨著非常糟糕的性能。通過 MonYog 觀察時,我發現以下執行緒狀態:
我們可以通過它的名字來簡單的理解不同的執行緒狀態。有人可以提供
- 這些州之間的差異?
- 為什麼“發送數據”佔 76%?
這些州之間的差異?
從您的 MONYog 圖表中,以下是狀態:
發送數據
該執行緒正在讀取和處理 SELECT 語句的行,並將數據發送到客戶端。由於在此狀態期間發生的操作往往會執行大量磁碟訪問(讀取),因此它通常是給定查詢生命週期內執行時間最長的狀態。
複製到 tmp 表
伺服器正在復製到記憶體中的臨時表。
排序結果
對於 SELECT 語句,這類似於創建排序索引,但適用於非臨時表。
釋放物品
執行緒已執行命令。在此狀態期間完成的某些項目釋放涉及查詢記憶體。這種狀態通常伴隨著清理。
為什麼“發送數據”佔 76%?
正如文件所說,數據正在發送給客戶端。
高負載的原因是什麼?
- 返回大量行的查詢
- 很多查詢
返回大量行的查詢
如果您有返回大量行的查詢,請調整您的查詢以返回更少的數據,也許將有效的 WHERE 和 LIMIT 子句添加到 SELECT 中。
很多查詢
如果您沒有返回大量行的查詢,那麼它一定是很多查詢。您可能會發現這令人驚訝,但 MONYog 使用以下任一方式查詢 mysqld 以獲取全域狀態變數
SHOW GLOBAL VARIABLES;
要麼
SELECT * FROM information_schema.global_status;
這些也構成查詢。
也許您可以配置 MONYog 以減少檢索狀態資訊的頻率。