數據庫性能簡介

下文翻譯自:https://dev.mysql.com/doc/refman/5.7/en/optimize-overview.htmlhtml

  數據庫的性能取決於數據庫級別的幾個因素:如表,查詢,配置設置。這種軟件構造致使在硬件級的CPU和I/O操做必須最小話而且高效。在處理數據庫性能時,首先須要學習軟件端的高級規則和指南,而後使用wall-clock 來衡量性能。mysql

  Tipical 用戶指在經過現有的軟件和硬件配置獲取最佳的性能,Advanced 用戶則尋找改進Mysql軟件自己的機會,或者本身開發存儲引擎和硬件設備來擴展MYSQL的生態體系
數據庫級別的優化sql

  使數據庫查詢快的最重要的因素在於其開始設計階段:數據庫

  一、表的結構是否合理?特別須要指出的是,列在表中是否使用正確的類型?例如:常常須要進行更新的表須要設計成多表少列,而須要大量分析的表須要設計成少表多列。緩存

  二、是否使用索引來讓查詢更加高效?併發

  三、是否爲每一個表選擇適當的存儲引擎,並利用存儲引用的優點和功能?須要強調的是:事務存儲引擎(innodb,myisam:非事務)的選擇對於性能和擴展性是很是重要的性能

  四、每張表是否使用正確的行格式,這個行格式還和存儲引擎有關。強調的是壓縮表使用較少的磁盤空間,所以使用較少的磁盤I/O來讀取和寫入數據,壓縮可用於innodb的表和只讀的myisam表學習

  五、應用程序是否使用了正確的鎖策略?好比,在可能的狀況下,經過容許數據共享的方式,以便數據庫能夠併發運行,並在適當的狀況下獨立請求,以便關鍵操做得到最高的優先級。一樣,存儲引擎的選擇是很重要的,Innodb存儲引擎能夠處理大多的鎖問題,無須要調用程序的參與,在數據庫中實現更好的併發性,並減小參與測試和代碼調試。測試

  六、用於緩存的全部內存區域是否使用正確?也就是說,須要足夠大的內存來容納常常訪問的數據,但這個內存也不能超過物理內存並致使分頁。要配置的內存區域主要有:InnoDB緩存池,myisam密鑰緩存和mysql查詢緩存。優化

硬件級別的優化

  隨着數據庫變得愈來愈繁忙,任何數據庫應用最終都會遇到硬件瓶頸。DBA必須評估是否能夠從新配置來避免這種瓶頸,或是否須要更多的硬件資源。系統的硬件瓶頸一般來自以下幾方面:

  一、磁盤搜索,磁盤找到一條數據須要花費時間。對於現代的磁盤,平均時間一般低於10ms,所以理論上一秒鐘能夠尋找100次。使用磁盤來進行優化會很緩慢而且很難針對單個表進行優化,優化尋道時間的方法是將數據分佈到多個磁盤上。

  二、磁盤讀寫,當磁盤在正確的位置時,咱們須要讀寫數據。對於現代的磁盤,一個磁盤一般能夠提供20M/s的吞吐量,這比查找更容易去優化,能夠經過多個磁盤並行來讀取

  三、CPU週期,當數據存儲在內存中,咱們須要去處理而且獲取結果。內存大小相比大表的數據量,是最多見的限制因素,使用小表,速度一般不是問題。

  四、內存帶寬,當cpu能夠緩存更多的數據的時候,內存帶寬就會成爲瓶頸,這個對於大多數系統來講並不常見,但須要考慮。

相關文章
相關標籤/搜索