非技術性 MySQL慢查詢指南

2021-06-09 06:31:12 字數 2474 閱讀 6443

原文:

mysql是無處不在,因此,有許多非技術性使用者依賴於mysql,但又不是mysql的專家。當出現查詢相關的效能問題時,這些使用者都處於無助狀態,因為沒有靈丹妙藥來處理慢查詢,每一種情況下是獨一無二的。

這篇文章是乙個處理慢查詢的非​​技術性使用者指導。你不必是mysql專家,或知道如何分析查詢語句,隔離(即識別)哪個查詢語句造成您的伺服器問題。一旦你已經分離出了這些查詢語句,就可以與mysql專家諮詢如何解決這些問題

。(ps:你只需要按照這個指南提取出有問題的查詢語句,剩下的就交給專家去處理吧。)

第一步:基線

作出任何改變之前,總是要先建立mysql效能基線。否則,它是真的只是一種猜測(是否提高mysql效能的變化)。提取mysql基線效能的最簡單的方法是用mysqlreport。讓mysql的執行至少一整天,然後執行mysqlreport --all ,並儲存報告(它可以很容易的通過電子郵件傳送自己做的報告:mysqlreport --all --電子郵件 --user *** --password ***)。如果mysql沒有持續執行一天以上時,嘗試執行某些引起效能變化的應用,並執行足夠的時間來暴露問題。

2。評估基線

mysqlreport寫的報告包含了大量的資訊,但我們的目的只有三件事情需要關注。 (乙個的mysqlreport報告能夠讓你充分理解mysqlreport這個工具)。

首先是「read ratio」(第6或7行)。這個應該不超過0.01。如果超出的話,mysql需要進行配置,確保mysql可以使用更多的ram。如果您的系統記憶體太少,mysql沒有足夠的ram,mysql會嘗試使用交換分割槽,(使用硬碟空間作為ram)通常使問題變得更糟。

下乙個值在第16行,「slow」,是指慢速查詢。 10秒的預設時間後查詢被認為是緩慢的,如果它需要更長的時間來執行,此行的最後一列和值(如「%的dms:0.44」)一般應小於0.05。你可能會注意到這個值在0.30之上。這就是我們正在努力減少的地方。

最後乙個我們要注意的值是「waited,」在第48行,特別是最後一列和值(類似「%total:0.27」)。這個值是說必須等待得到鎖許可權的鎖表數量。鎖定是在這麼多的使用者同時獲取mysql的共享資料。此值應小於10%。如果不是,通常是慢查詢產生的原因了。

這是沒有必要了解這些價值觀在這一點上的性質,但這些值會給我們乙個想法。如果這些值很高的話,那麼mysql專家將有乙個簡單的工作。如果值低,但mysql是確實執行速度很慢,你的mysql專家仍然能夠確定為什麼會出現這些問題。

3。記錄慢查詢和等待

預設情況下的mysql的慢查詢時間為10秒。需要修改時間的話就在/ etc/my.cnf的 [mysqld]部分中加入:

log-slow-queries

long_query_time = 1

重新啟動mysql,等待至少一整天。這會讓mysql來記錄所有查詢時間超過1秒的查詢語句。

慢速查詢日誌檔名稱是slow_queries.log(預設),位置在你的mysql 程式的 data 目錄中。如果你不知道你的mysql data 目錄,登入到mysql並執行「show variables like 'datadir';「。這將顯示你的mysql目前正在使用的資料目錄。乙個典型的linux系統的資料目錄是/ var/lib/mysql 。因此,慢查詢日誌是/var/lib/mysql/slow_queries.log。

4。識別top10慢查詢

識別慢查詢日誌中排名前10位的查詢的最簡單的方法是使用mysqlsla。執行mysqlsla ,將結果輸出儲存到乙個檔案。例如:「mysqlsla --log-type slow /var/lib/mysql/slow_queries.log > ~/top_10_slow_queries」。該命令將在你的home目錄中建立乙個 top_10_slow_queries 檔案。這個檔案是你將要給mysql專家看的。在大多數情況下前3名的慢查詢,如果是可以被修復的,你的mysql和伺服器的整體效能會急劇提公升。從這裡的的諺語球是在mysql專家的法院。

5。修復後證明

假定你的mysql專家能夠解決大多數的慢查詢,最後一步是證明這種情況不只是巧合。重新啟動mysql和等待足夠長的時間,讓mysql執行了第一步(至少一天)。然後用mysqlreport再次得到mysql的基線效能報告。比較這二份報告,特別是(read ratio, slow, waited)三個值的變化。應該有這三個值明顯減少。如果不是,進一步與mysql專家協商,他們應該能夠告訴你,為什麼這種情況下不是乙個「簡單的修改」。

預警

如果你的mysql伺服器需要在幾個月內再次做這樣的處理,不要驚慌。效能問題是乙個複雜的問題,上面那些做法是可以提高效能的。我經常看到mysql的效能調整後,幾個月裡再次出現問題的案例。這不是乙個mysql的故障,而是經濟增長的***。當你的資料庫的使用者發現它執行得很好的時候,他們會更多地使用它。也許更多的新使用者開始使用它。隨著越來越多的需求,你的mysql伺服器將需要更多的優化。

IT工作者五大非技術性擔憂

1.出國工作。你已經聽到過很多次你的cio對派出國的人這樣說 你出國並不是給我工作 實際上離開家和故土的感覺不好受,再派到非洲那些愛滋氾濫而又極度貧窮的地方,你能做的只有向上帝祈禱了。2.it工作者短缺?看你能幹什麼了。it工作者短缺?不短缺?看你問誰了,不過如果你問足夠多的人你會發現 存在短缺,不...

技術性 Search知識

持續更新。fb search框架 php寫的browse layer,負責同client對話以及param處理和passing等。c 寫的backend,最大的一坨叫做topaggregator,主要負責三件事 a rewrite query to get better search results...

技術性 Search知識

持續更新。fb search框架 php寫的browse layer,負責同client對話以及param處理和passing等。c 寫的backend,最大的一坨叫做topaggregator,主要負責三件事 a rewrite query to get better search results...