2017-02-18 90 views
1

我試圖使用MySQL性能報告來試圖找到什麼是在特殊情況下瓶頸我的讀寫性能,並且它與大量關於其他查詢的舊統計數據混雜在我的表中。如何重置MySQL性能報告?

我想清除所有的性能數據,以便我可以重新看看。

Clear Event Tables按鈕實際上並沒有看清任何東西。

我該怎麼做?

+0

我的意見:放棄perf報告。打開緩慢日誌並追查一些繁忙的查詢。 –

+0

@RickJames我知道查詢是什麼,我想使用性能報告來嘗試並確定它們爲什麼不是更快。我非常懷疑在慢查詢日誌中會顯示50ms以下的查詢。這些是我需要清理某些數據庫和表優化的大量查詢。 –

+0

'long_query_time = 0'將找到50ms的查詢_and_,讓您可以將它們聚合起來,以發現它們在服務器上的累計負載是否高於其他查詢。 –

回答

1

(這不回答這個問題是問。相反,它解決了「我怎麼提高查詢性能」更廣泛的問題。)

下面是一個頭腦簡單的方式來獲得有用的指標,甚至快查詢:

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函數應用於每行的索引列。更改代碼後,索引完成了它應該做的事情。

+0

我試圖做到這一點的原因是我的CPU正在使用<2%,我沒有驅動器I/O(表和密鑰在RAM中),並且分配的RAM沒有上限。有很多資源可以利用,但查詢仍然沒有我想要的那麼快。必須掛上一些東西,以便從表面看到。 這些都是非常簡單的查詢。只是試圖根據唯一索引找到單個記錄。 –

+0

什麼是網絡延遲?你在做'SELECT *'嗎?或選擇特定的列?字符集轉換? –