我試圖使用MySQL性能報告來試圖找到什麼是在特殊情況下瓶頸我的讀寫性能,並且它與大量關於其他查詢的舊統計數據混雜在我的表中。如何重置MySQL性能報告?
我想清除所有的性能數據,以便我可以重新看看。
Clear Event Tables
按鈕實際上並沒有看清任何東西。
我該怎麼做?
我試圖使用MySQL性能報告來試圖找到什麼是在特殊情況下瓶頸我的讀寫性能,並且它與大量關於其他查詢的舊統計數據混雜在我的表中。如何重置MySQL性能報告?
我想清除所有的性能數據,以便我可以重新看看。
Clear Event Tables
按鈕實際上並沒有看清任何東西。
我該怎麼做?
(這不回答這個問題是問。相反,它解決了「我怎麼提高查詢性能」更廣泛的問題。)
下面是一個頭腦簡單的方式來獲得有用的指標,甚至快查詢:
FLUSH STATUS;
SELECT ...;
SHOW SESSION STATUS LIKE 'Handler%';
這些數字可能與表大小或結果集大小相匹配。這些是表格掃描和對結果集進行一些操作(例如排序)的良好指示。
表掃描可能意味着沒有索引被使用。弄清楚爲什麼這些指標可能無法告訴你。但是,有時有一種方法可以找到:
EXPLAIN FORMAT=JSON SELECT ...
這會給你(在較新的版本中)各種選項的「成本」。這可能幫助您瞭解爲什麼一個索引被用於另一個。
optimizer_trace
是另一種工具。
但沒有什麼會給你任何線索,INDEX(a,b)
,你沒有,會比INDEX(a)
,你確實有。這是my index cookbook中的主要觀點之一。
這是另一個很難從數字推導出來的例子。有一臺生產服務器用MySQL咀嚼100%的CPU。緩慢的日誌指向一個簡單的SELECT
,這是執行了很多。它有
WHERE DATE(indexed_column) = '2011-11-11'
改變這種下降的CPU到只有2%:
WHERE indexed_column >= '2011-11-11'
AND indexed_column < '2011-11-11' + INTERVAL 1 DAY
表在RAM中完全緩存。 (因此,高CPU,低I/O。)查詢必須執行全表掃描,將DATE
函數應用於每行的索引列。更改代碼後,索引完成了它應該做的事情。
我試圖做到這一點的原因是我的CPU正在使用<2%,我沒有驅動器I/O(表和密鑰在RAM中),並且分配的RAM沒有上限。有很多資源可以利用,但查詢仍然沒有我想要的那麼快。必須掛上一些東西,以便從表面看到。 這些都是非常簡單的查詢。只是試圖根據唯一索引找到單個記錄。 –
什麼是網絡延遲?你在做'SELECT *'嗎?或選擇特定的列?字符集轉換? –
我的意見:放棄perf報告。打開緩慢日誌並追查一些繁忙的查詢。 –
@RickJames我知道查詢是什麼,我想使用性能報告來嘗試並確定它們爲什麼不是更快。我非常懷疑在慢查詢日誌中會顯示50ms以下的查詢。這些是我需要清理某些數據庫和表優化的大量查詢。 –
'long_query_time = 0'將找到50ms的查詢_and_,讓您可以將它們聚合起來,以發現它們在服務器上的累計負載是否高於其他查詢。 –