(譯)MySQL的10個基本效能技巧

2021-09-07 19:39:13 字數 4555 閱讀 9742

原文出處:

mysql的10個基本效能技巧

與所有的關聯式資料庫一樣,mysql正如一頭怪獸一般,

它可能會在接到通知的一瞬間陷入停頓,讓你的應用程式陷入困境,讓你的業務處於危險之中。真是的情況是,常見的錯誤是導致mysql效能問題的根源。

工作負載或配置陷阱中的一些微妙之處常常會掩蓋這些資訊,為了確保mysql伺服器以最快的速度執行,提供穩定一致的效能,消除這些錯誤是很重要的。

幸運的是,很多mysql的效能問題都有相似的解決方案,使的故障排除和調優mysql成為一項易於管理的任務。

mysql效能提示1:配置您的工作負載

了解伺服器究竟把時間花在哪些地方的最佳方法是分析伺服器的工作負載,

通過分析工作負載,您可以匯出最大代價的查詢以進行進一步調優,當向伺服器發出請求的時候,時間就是最重要的指標,

你幾乎不關心任何事情,只關心它完成得有多快。配置工作負載的最佳方法是使用mysql enterprise monitor的查詢分析器或percona工具包中的pt-query-digest之類的工具。

這些工具捕獲伺服器執行的查詢,並返回乙個任務表,按照響應時間的順序進行排序,立即將代價最大和最耗時的任務排在最前面,這樣您就可以看到您的工作重點在**。

工作負載分析工具將類似的查詢組合在一起,允許您檢視緩慢的查詢,以及快速但多次執行的查詢。

譯者注:找到一些top的sql或者說是執行頻率高的sql,這部分是關注的重點

mysql效能提示2:了解四種基本資源

為了完成資料庫服務的功能,資料庫伺服器需要四種基本的資源:cpu,記憶體,磁碟以及網路,

如果其中任意一項是弱項(瓶頸),不穩定或者超負荷,那麼,資料庫伺服器的效能很可能很差。

了解基本資源在兩個特定領域非常重要:選擇硬體和故障排除問題。

在為mysql選擇硬體時,確保所有元件都具有良好的效能。同樣重要的是,要很好地平衡它們。

通常,購買組織會選擇具有快速cpu和磁碟的伺服器,但這些伺服器記憶體不足。在某些情況下,增加記憶體是提高效能的一種廉價方法,尤其是在磁碟繫結的工作負載上。

這看起來似乎違反直覺,但在許多情況下,磁碟被過度使用,因為沒有足夠的記憶體來容納伺服器的工作資料集。

這種平衡的另乙個很好的與cpu有關的例子。

在大多數情況下,mysql在使用快速cpu時表現良好,因為每個查詢在單個執行緒中執行,不能在cpu之間並行化。

在進行故障排除時,請檢查所有4種資源的效能和利用率,並仔細檢查它們的效能是否很差,或者是否出現某些硬體超負載執行。這些知識可以幫助快速解決問題。

譯者注:cpu,記憶體,磁碟以及網路需要匹配,任何乙個短板,都可能造成效能上的問題

mysql效能提示3:不要把mysql當做佇列使用

佇列和類似佇列的訪問模式可以在您不知情的情況下潛入應用程式。

例如,如果您設定了乙個專案的狀態,以便某個特定的工作程序可以在對其進行操作之前宣告它,那麼您無意中建立了乙個佇列。

將電子郵件標記為未傳送,傳送,然後標記為傳送是乙個常見的例子。

佇列導致問題的主要原因有兩個:它們序列化您的工作負載,防止任務被並行執行,並且它們常常導致乙個表,其中包含正在處理的工作以及來自很久以前處理的任務的歷史資料。

既增加了應用程式的延遲,又將其載入到mysql。

譯者注:mysql不是做佇列使用的,不要使用高頻率的定時任務像用佇列一樣去刷資料庫。

mysql效能提示4:先過濾最代價最小的結果

優化mysql的乙個好方法是先做一些廉價的、不精確的工作,然後再對較小的資料集進行艱苦的、精確的工作。

例如,假設您在乙個給定的地理點半徑範圍內尋找某物。

許多程式設計師工具箱中的第乙個工具是計算球體表面距離的大圓公式。

這種技術的問題是,這個公式需要大量的三角運算,這是非常cpu密集型的運算。大圓計算往往執行緩慢,使計算機的cpu利用率飆公升。

在應用大圓公式之前,將您的記錄減少到總數的一小部分,並將結果集修剪到乙個精確的圓。

乙個包含圓(精確或不精確)的正方形是乙個簡單的方法。這樣一來,方塊外的世界就不會受到那些昂貴三角函式的衝擊。

譯者注:沒看懂

mysql效能提示5:了解兩個可伸縮性死亡陷阱

可伸縮性並不像您所認為的那樣模糊。事實上,對於可伸縮性有精確的數學定義,可以用方程表示。這些方程強調了為什麼系統不能像應有的那樣伸縮。

以通用可伸縮性定律為例,該定義在表示和量化系統的可伸縮性特徵方面非常方便。它從兩個基本成本的角度解釋了擴充套件問題:序列化和串擾。

為了實現序列化而必須停止的並行程序在可伸縮性方面天生有限。同樣地,如果並行程序需要一直彼此聊天來協調它們的工作,那麼它們就限制了彼此。

避免序列化和串擾,您的應用程式將更好地擴充套件。這在mysql中意味著什麼?

它會有所不同,但是有些例子會避免排它鎖。由於這個原因,上面第三點的佇列往往難以擴充套件。

譯者注:沒看懂

mysql效能提示6:不要過渡關注配置

dba傾向於花費大量時間來調整配置。結果通常不是很大的改善,有時甚至是適得其反的。

我看到過很多「優化」過(調整過某些配置引數)的伺服器,在負載較重的時候,經常崩潰宕機、記憶體不足、效能表現的很差。

mysql自帶的預設設定是一刀切的,而且已經過時了,但是您不需要配置所有內容,並不意味著任何配置選項都要人為修改。

只有在需要的時候,最好是在了解其背景的情況下再去更改配置項。

在大多數情況下,通過正確設定10個(左右,常用)選項,您可以獲得95%的伺服器峰值效能。只有極少數情況下需要修改一些特殊的配置項。

在大多數情況下,不建議使用伺服器「調優」工具,因為它們往往提供的指導方針對特定情況沒有意義。

有些甚至有危險的、不準確的建議,比如快取命中率和記憶體消耗公式。這些永遠都不對,而且隨著時間的流逝,它們變得越來越不正確。

譯者注:大多數情況下主需要關注幾個基本配置就可以了,不需要關注所有的配置資訊,隨意修改配置,有可能會導致適得其反,

有人會說修改bufferpool配置之後效能怎麼怎麼樣,因為由一些本來就很low的錯誤引起的問題,並不是需要過渡關注配置的理由。

mysql效能提示7:注意分頁查詢

涉及分頁的應用程式往往會使伺服器陷入癱瘓。

應用程式中在向您顯示乙個結果頁面時,有乙個鏈結指向下乙個頁面,

這些應用程式通常以無法使用索引的方式進行分組和排序,導致伺服器消耗大量的資源,然後根據頁面和顯示行數的要求,然後顯示這其中一部分資料。

優化常常可以在使用者介面中找到。您可以只顯示到下乙個頁面的鏈結,而不是顯示結果和每個頁面的鏈結的確切數目。

您還可以防止人們轉到離首頁太遠的頁面。

譯者注:這裡作者應該是想表達,分頁的時候,如果沒有合適的索引,每一次翻頁,都會會造成大量的查詢和排序,分頁查詢需要合理的索引以及一些設計上的技巧。

mysql效能提示8:儲存效能基線資訊,必要時才發出告警

譯者注:正確合理的配置告警以及收集效能基線

mysql效能提示9:學習三種索引規則

索引可能是資料庫中最容易被誤解的話題,因為索引的工作方式有很多種,以及伺服器如何使用它們。

要真正理解索引的工作原理,需要付出很多努力。

如果設計得當,索引在資料庫伺服器中有三個重要用途:

索引允許伺服器查詢相鄰行的組,而不是單個行。

很多人認為索引的目的是找到單獨的行,但是,查詢單個行會導致隨機磁碟操作,這很緩慢。

找到一組行比一次找到一行要好得多,所有行或大部分行都很有趣。

索引可以讓伺服器避免按需要的順序讀取行來進行排序。排序是昂貴的。按需要的順序讀取行要快得多。

索引使伺服器能夠單獨滿足來自索引的所有查詢,從而完全避免訪問表。這被稱為覆蓋索引或索引查詢。

如果您可以設計索引和查詢來利用這三個機會,那麼您可以使您的查詢快幾個數量級。

譯者注:索引,乙個很大的話題,很多時候需要具體情況具體分析,沒有定論,但是絕對不是網上那些low到爆的什麼索引使用1,2,3,4,5……幾條規則。

mysql效能提示10:利用同行的專業知識

不要試圖獨自去做。如果你在苦苦思索乙個問題,並且做著對你來說合乎邏輯和明智的事情,那就太好了。20次中有19次是這樣的。

另一次,你會陷入乙個非常昂貴和耗時的兔子洞,因為你正在嘗試的解決方案似乎很有意義。

構建乙個與mysql相關的資源網路——這超出了工具集和故障排除指南的範圍。有一些知識淵博的人潛伏在郵件列表、論壇、問答**等等。

會議、商展和本地使用者組活動提供了寶貴的機會,可以獲得見解,並與在緊急情況下可以幫助你的同行建立關係

對於那些正在尋找補充這些技巧的工具的人,您可以檢視mysql的percona configuration嚮導、mysql的percona query advisor以及percona監視外掛程式。(注意:您需要建立乙個percona帳戶來訪問前兩個鏈結。它是免費的。)配置嚮導可以幫助您為新伺服器生成乙個基線my.cnf檔案,該檔案優於隨伺服器一起發布的示例檔案。percona監視外掛程式是一組監視和繪圖外掛程式,可以幫助您急切地儲存統計資料,並不情願地發出警告(第8).所有這些工具都是免費的。

譯者注:學無止境,保持謙虛,永遠要向強人學習,不懂的不要瞎逼逼。

MySql效能優化 基本效能優化方向

影響資料庫效能幾個因素,效能優化的兩個出發點 第一類 從現有的軟體和硬體配置中獲得最佳的資料庫效能。第二類 通過改寫mysql原始碼,優化mysql本身,或者開發自己的儲存引擎和硬體裝置來擴充套件mysql資料庫的最基本優化是其基本設計結構的優化。1.每個事物是否有正確的設計資料結構 也就是表是否有...

php提高指令碼效能的4個技巧

在本文中,我想介紹一些替代方案。如果您正在尋找可能減少生產中執行時間的可能性,這將很有用。讓我們看看,哪種php方法可能會被效能更高的方法所取代,以及是否存在成本或折衷的問題。您有乙個包含重複項的大型陣列,並且希望刪除它們,使其僅具有唯一值的陣列。常規 array unique array 替代 a...

防火牆的四項基本效能指標

吞吐量 throughput 吞吐量是衡量一款防火牆或者路由交換裝置的最重要的指標,它是指網路裝置在每一秒內處理資料報的最大能力。吞吐量意味這台裝置在每一秒以內所能夠處理的最大流量或者說 每一秒內能處理的資料報個數。裝置吞吐量越高,所能提供給使用者使用的頻寬越大,就像木桶原理所描述的,網路的最大吞吐...