国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

10個提升MySQL性能的小技巧

瀏覽:19日期:2023-10-16 14:43:09

10個提升MySQL性能的小技巧

從工作量分析到索引的三條規(guī)則,這些專家見解肯定會讓您的MySQL服務器尖叫。

在所有的關系數(shù)據(jù)庫中,MySQL已經(jīng)被證明了完全是一頭野獸,只要通知停止運行就絕對不會讓你多等一秒鐘,使你的應用置于困境之中,你的工作也承受極大的風險。

不過事實是,普通的錯誤都在MySQL性能錯誤的射程之內。所以為了使你的MySQL服務器能夠高速運轉,提供穩(wěn)定且持續(xù)的服務,消除這些錯誤是非常有必要的,但是這可能常常會被你的繁忙工作或配置陷阱微妙地遮蔽了。

幸運的是,許多MySQL性能問題其實都有相似的解決辦法,發(fā)現(xiàn)并解決問題,然后你的MySQL用起來就順手多啦。

接下來就和大家分享一下10個使MySQL性能提升的小技巧。

MySQL性能提升小技巧1:對你的工作進行配置

想要了解你的服務器到底如何支配時間,最好的辦法就是對服務器的工作進行配置。通過配置你的服務器,你可以expose最昂貴的query來為將來的調優(yōu)做準備。從這個角度,時間就是最重要的衡量標準,因為當你對你的服務器發(fā)起一個query之后,除了它到底多塊的完成之外你不會關心任何其他事。

配置你的工作文件的最優(yōu)解就是MySQL Enterprise Monitor的query分析儀或者Percona Toolkit的pt-query-digest。這些工具可以幫助你捕捉你的服務器正在執(zhí)行的詢問以及返回按響應時間遞減順序排序的任務表,它還會持續(xù)不斷地把最昂貴、費時的任務更新在最上方,這樣你就能知道你的精力應該更加集中在什么地方了。

工作文件配置工具會把相似的詢問分在一個組,你可以很方便地查看低速運行或者是告訴運行但是多次進行的詢問。

MySQL性能提升小技巧2: 深入理解四個基本資源

一個數(shù)據(jù)庫服務器需要以下4種資源才能正常運轉:CPU,內存,硬盤以及網(wǎng)絡。如果這其中任何一種性能不足,運轉不力或者超負荷運轉的話,那么數(shù)據(jù)庫服務器就非常可能表現(xiàn)不佳。

理解基礎的資源是非常重要是以下兩個層面:選擇硬件以及疑難問題解答。

當為MySQL選擇硬件的時候,確保所有的組件都表現(xiàn)良好。同樣重要的是把它們進行合理的配置。大多是時候,一些機構會選擇高轉速的CPU以及硬盤,但是他們通常來講內存都不夠用。在某些情況下,按照數(shù)量級增加內存是提升性能最廉價的辦法,尤其是工作負載是綁定磁盤的情況下。這聽起來可能違反常識,但是在許多情況下,硬盤都是過度使用的,因為沒有足夠的內存來儲存數(shù)據(jù)工作集。

另外一個平衡的典范當屬CPU。在大多數(shù)情況下,MySQL使用高轉速的CPU會運轉得很好,因為每一個詢問都是在單線程中運行而不能在CPU之間并行。

當要解答疑難問題的時候,請了解清楚所有資源的性能和使用情況,用你審慎的目光來判斷它們到底是本來就性能差勁還是因為承載了過多的任務。這個姿勢應該能讓你解決問題快一些。

MySQL性能提升小技巧3:別吧MySQL當成一個隊列使

隊列和隊列訪問模式可以在你完全沒有察覺的情況下偷偷進入你的應用。舉個栗子,如果你設置了某個項的狀態(tài),以便某個特定的工作進程在調用它之前可以聲明它,那么你就在無意中創(chuàng)建了一個隊列。把郵件標記為未發(fā)送,發(fā)送它們,然后它們被標記為已發(fā)送就是一個很好理解的栗子。

隊列會產(chǎn)生問題主要有2個原因:它們連續(xù)運轉你工作,防止它們并行,那么這通常就會產(chǎn)生一個表格,里面包含了進程中的工作還有很久以前已完成工作的歷史數(shù)據(jù)。這不僅會使你的應用產(chǎn)生延遲而且也會給MySQL增加不必要的負荷。

MySQL性能提升小技巧4: 花費最少的結果先過濾

優(yōu)化MySQL性能最好的辦法就是先完成廉價、不確定的工作,然后在最小的結果數(shù)據(jù)集中完成艱難、準確的工作。

例如你要通過一個給定的地理位置半徑來找到你想要的東西。在大多數(shù)程序員的工具箱里,他們首先會想到的一定是計算球面上的距離的大圓公式(Haversine)。但是用這個公式的問題在于可能要用到很多三角方面的運算,這對CPU的要求是非常高的。大圓的計算往往運行緩慢,使得機器的CPU使用率飆升。

在你開始應用大圓公式之前,在總集當中將你的記錄減少成最小的子集,并把結果集整合成一個確切的圓。一個包含圓(確切或不確切的)的正方形是解決這個問題最簡單的方法。這樣的話,正方形之外的一切都不回碰上這些成本昂貴的三角函數(shù)。

MySQL性能提升小技巧5:了解兩種伸縮性死亡陷阱

伸縮性其實并不像你想象的那樣捉摸不定。實際上在數(shù)學當中已經(jīng)有非常明確的將伸縮性表示為方程式的定義。這些方程式突出展現(xiàn)了為什么系統(tǒng)并沒有如預期那樣的良好伸縮。

參見通用可擴展法(Universal Scalability Law)—非常清晰地解釋和量化了一個系統(tǒng)的伸縮性特性。它從兩個基礎成本方面對伸縮性問題進行了闡釋:序列化(serialization)和串擾(crosstalk)。

多進程必須為在伸縮性上具有固有限制的序列化停止工作。相似地,如果多個進程必須時時刻刻互相交流才能配合他們的工作的話,他們就是在互相限制。

避免序列化以及串擾,你的應用伸縮性將會大大提升。那么在對MySQL來說意味著什么呢?因情況而異,但有些示例可以避免對行進行排它鎖定。關于隊列,參見技巧3,往往會因為隊列伸縮性就變得很差。

MySQL性能提升小技巧6:不要太關注配置

DBA常常耗費大量的時間來調整配置。換來的結果有時卻是傷害而不是大的提升。我看到過許多的最優(yōu)化的服務器時不時就崩潰,內存不足,而且在工作負載稍微多一點的時候就表現(xiàn)很差。

MySQL上搭載的默認配置是一刀切并且嚴重過時的,但是它們也不需要完全重新配置。只要把最基礎的設置正確,有需要的話再做小幅調整即可。在大多數(shù)情況下,通過正確設置大約10個選項,你可以獲得服務器峰值性能的95%。其他無法應用此方法的的情況的話應該是非常特殊的情況,所以就不用去管他了。

在大多數(shù)情況下,服務器“轉換”工具是不推薦的,因為它們常常會有一些在特定情況下并不適用的規(guī)則。有些甚至存在危險且不準確編碼—例如緩存命中率和內存消耗公式。這些都是不對的,而且隨這時代的進步他們變得更加地不對。

MySQL性能提升小技巧7: 小心分頁詢問

分頁應用常常會把服務器搞癱瘓。在向你展示結果的頁面當中,有翻到下一頁的鏈接,這類應用通常不以索引的方式進行分類整理,然后他們使用一種 LIMIT和 offset使得服務器做大量的工作生成,然后丟棄行。

優(yōu)化選項在用戶界面常常自己就能找到。而不是展示確切的頁數(shù)結果以及每個頁面的單獨鏈接,只展示下一列的鏈接就好。你也可以防止大家翻到太后面的頁數(shù)。

從質詢方面來看,你可以比你想要的多選取一行,然后當你點擊“下一頁”鏈接的時候,你可以指定最后一行作為下一組結果的起點,而不是使用帶offset的 LIMIT。舉個栗子,當用戶在查看120行中的第101行時,你會同時select第121行;為了遞交下一頁,你可以向服務器詢問第121行或者超過121的行,限定在21。

MySQL性能提升小技巧8: 及時保存數(shù)據(jù),審慎警告

監(jiān)管和預警是必不可少的,但是典型的監(jiān)控系統(tǒng)到底怎么了?它開始發(fā)送一些錯誤的手勢,然后系統(tǒng)管理員就設置了垃圾郵件過濾規(guī)則來停止這些煩擾。然后很快你的監(jiān)管系統(tǒng)就會完全癱瘓。

我傾向于從兩個方面來看待監(jiān)管;獲取指標以及發(fā)出預警。盡可能的獲取并保存指標是非常重要的,因為當你想要知道系統(tǒng)到底改變了什么的時候你會很慶幸你當初保存了它們。有一天會突然出現(xiàn)一個很奇怪的錯誤,然后你就會很高興你有能力指出服務器的工作負載中的一段然后展示這個改變。

相比之下,警告就可能有點多了。人們常常會對緩存命中率或者短期內每秒所創(chuàng)建的表格發(fā)出警告。問題是對這種緩存命中率并沒有一個合適的閾值。正確的閾值并不是隨著服務器的不同而變化,而是隨著你工作負載的不同,每一個小時都是不一樣的。

這就導致,警告只能有節(jié)制地并且只能在預示一個具體、可操作的問題時才是可行的。一個低緩存命中率并不是可操作的問題,而且他也不指向一個實在的問題,但對連接嘗試沒有響應的服務器才是真正需要結局的問題。

MySQL性能提升小技巧9: 學習index的三條法則

Index可能是數(shù)據(jù)庫匯總最難理解的概念,因為很容易就對Index到底如何工作以及服務器如何使用它們感到困惑。確實要花些力氣才能真正理解它到底是怎么回事。

Index經(jīng)過適當設計后,主要在數(shù)據(jù)庫服務器中提供如下三種服務:

Index讓服務器查找相鄰行的集合而不是單獨的行。許多人可能會認為index的作用就是為了查找單獨的行,但是查找單獨的行會導致混亂的硬盤操作,速度就會變慢。而且查找行的集合要容易多了,所有或者說大多數(shù)都比一次只查找一個行要有趣多了。

Index通過按照閱讀喜好進行排列省去了整理的過程。整理是耗費巨大的。按照自己的喜好進行閱讀效率也更高。

Index完全滿足了服務器的詢問,根本就不需要再連接表格。這是眾所周知的覆蓋索引或僅索引查詢。

如果你可以定義自己的索引和詢問來利用這三個機會,你就可以使查詢速度快幾個數(shù)量級。

MySQL性能提升小技巧10: 利用同行的專業(yè)知識

不要一個人冒險。如果你對一個問題感到煩惱,同時也在做一些對你來說有邏輯且隔離的解決方式,那很好。這在20次中可能會有19次是有效的。但是剩下的1次,你可能會掉進兔子洞里,會非常費時費力,這完全是因為你現(xiàn)在所做的努力只是看起來可能是有意義的。

建立與MySQL相關的資源網(wǎng)絡,這超越了工具和故障排除指南。有一些非常有知識的人潛伏在郵件列表、論壇、問答網(wǎng)站上,等等。會議、展會和本地用戶團體活動都提供了寶貴的機會,讓你能與那些在緊要關頭幫助你的同行建立聯(lián)系。

如果你們想要找工具對上述的技巧進行實踐,你可以看看 Percona Configuration Wizard for MySQL , Percona Query Advisor for MySQL , 以及 Percona Monitoring Plugins 。(你需要注冊一個Percona賬號才可以免費進入前兩個鏈接。)配置向導可為新的服務器生成一個基準my.cnf文件,這個文件優(yōu)于服務器上的樣本文件。Query advisor會分析你的SQL查詢來檢測潛在的壞模式,如分頁查詢(技巧7)。Percona Monitoring Plugins是一系列的監(jiān)管和圖形繪制插件,它們可以幫助你及時保存數(shù)據(jù)并且警惕預警(技巧8)。所有這些工具都是免費的哦。

來自:http://www.cocoachina.com/programmer/20170731/20067.html

相關文章:
主站蜘蛛池模板: 成人免费毛片观看 | 国产欧美亚洲精品一区 | 美女被免费网站在线软件 | a国产片| 三级理论手机在线观看视频 | 三级中文字幕永久在线视频 | 成人做爰全过程免费看网站 | 欧美一级高清黄图片 | 免费看一级做a爰片久久 | 99久久精品免费看国产一区二区 | 日本免费在线一区 | 亚洲精品高清久久 | 国产成人精品日本亚洲网站 | 农村寡妇偷毛片一级 | 9久久99久久久精品齐齐综合色圆 | 久久久久欧美精品网站 | 免费午夜不卡毛片 | 国产妇乱子伦视频免费 | 国产区更新 | 日韩成人小视频 | 女人张开腿让男人桶个爽 | 亚洲欧美卡通成人制服动漫 | 一级特级aaaa毛片免费观看 | 亚洲欧美一级久久精品 | 国产亚洲精品自在久久77 | 色国产精品 | 一级做a级爰片性色毛片视频 | 成人午夜免费观看 | 永久免费不卡在线观看黄网站 | 99久久国内精品成人免费 | 伊人婷婷色香五月综合缴激情 | 久久国产中文字幕 | 欧美一二区 | 91视频综合网 | 深夜福利网址 | 色狠狠色综合吹潮 | 亚洲国产欧美在线人成 | 一级一级毛片看看 | 成人免费毛片一区二区三区 | 久久精品a | 男人天堂成人 |