2016-02-01 34 views
1

我的應用程序加載非常慢。在做了一些研究之後,我得知MySQL導致了這種緩慢。我有大約15-20個用戶訪問此服務器。經過初步調查(谷歌搜索和stackoverflow)後,我發現他們當時正在進行一些查詢,這些都是罪魁禍首。很煩人的是,不時地運行查詢來查找運行了很長時間的查詢。有沒有解決這個問題的方法,還可以獲取電子郵件/短信提醒。我怎樣才能啓用電子郵件/短信提醒過目這些查詢爲MySQL長時間運行的查詢啓用警報

+0

沒有警報準備好。啓用它時可能會記錄緩慢的查詢,然後您可能會分析該日誌以修復查詢(通常通過重寫它們或添加適當的索引)。如果你想要提醒,然後準備一個小腳本(bash/php/python ..),它將發出'show processlist;'語句並分析輸出,然後在任何查詢需要超過X秒時發送電子郵件(或者有更多比Y併發查詢)。 – jkavalik

+0

@jkavalik你能建議任何鏈接到bash腳本,可以幫助我設置郵件提醒 – Sibs

+0

我沒有任何現成的手頭。我們使用PHP的一個類似的東西(檢查連接的數量,並在吹的極限,保存一些信息文件和電子郵件管理員)。 – jkavalik

回答

0

執行下面的命令從管理/ MySQL的root用戶

slow_query_log = ON; 
long_query_time = 2; 

現在得到belowcommand-

SHOW VARIABLES LIKE 'slow_query_log_file'; 
慢查詢日誌文件路徑

現在去你的mysql數據庫機器,並檢查記錄緩慢的查詢,並優化它們。

注意:即使沒有重新啓動mysql服務,您也可以獲得緩慢的查詢,但爲了更好地在conf文件中執行這些條目,以便即使在服務重新啓動後也可以獲取緩慢的日誌。

+0

您可以建議一種自動執行此過程的方法,並且在慢速查詢日誌每次更新時設置郵件警報 – Sibs

0

您可以啓用慢速查詢日誌並將long_query時間設置爲Zafar提到的時間。 另外,如果您希望深入瞭解不使用索引的查詢,則還可以啓用「log_queries_not_using_indexes」。

另一種執行「SHOW FULL PROCESSLIST」並獲取查詢所花時間的方法。但唯一的缺點是您可能會錯過花費更長時間的查詢,但在執行「SHOW FULL PROCESSLIST」之前它已完成執行。

有多種工具可以使上述過程自動化。很少有MySQL Enterprise MonitorMonyog。我個人使用Monyog,因爲您可以通過郵件/ SNMP通知長時間運行的查詢並手動執行操作,或讓工具停止這些查詢。