MySQL™ 參考手冊(優化概述)

優化概述

數據庫性能取決於數據庫級別的幾個因素,好比表、查詢和配置設置,這些軟件構造致使了硬件級別的CPU和I/O操做,你必須將其最小化並儘量提升效率。在研究數據庫性能時,首先要學習軟件方面的高級規則和指導原則,並使用壁鐘時間測量性能。數據庫

典型用戶的目標是從現有的軟件和硬件配置中得到最佳的數據庫性能,高級用戶尋找機會來改進MySQL軟件自己,或者開發本身的存儲引擎和硬件設備來擴展MySQL生態系統。緩存

在數據庫級進行優化

使數據庫應用程序快速運行的最重要因素是它的基本設計:服務器

  • 表的結構是否正確?特別是,列是否具備正確的數據類型,每一個表是否具備適合工做類型的列?例如,執行頻繁更新的應用程序經常有不少表只有不多的列,而分析大量數據的應用程序一般只有不多的表有不少列。
  • 是否有適當的索引使查詢高效?
  • 你是否爲每一個表使用了適當的存儲引擎,並利用了所使用的每一個存儲引擎的優勢和特性?特別是,選擇事務性存儲引擎(如InnoDB)或非事務性存儲引擎(如MyISAM)對性能和可伸縮性很是重要。併發

    InnoDB是建立新表的默認存儲引擎,在實踐中,先進的 InnoDB性能特性意味着 InnoDB表一般比簡單的 MyISAM表表現得更好,特別是對於繁忙的數據庫。
  • 每一個表都使用適當的行格式嗎?這種選擇還取決於表使用的存儲引擎,特別是,壓縮表使用更少的磁盤空間,所以讀寫數據所需的磁盤I/O更少,壓縮適用於全部使用InnoDB表的工做負載,也適用於只讀MyISAM表。
  • 應用程序是否使用適當的鎖定策略?例如,在可能的狀況下容許共享訪問,以便數據庫操做能夠併發運行;在適當的狀況下請求獨佔訪問,以便關鍵操做得到高優先級,一樣,存儲引擎的選擇也很重要。InnoDB存儲引擎能夠在不須要你參與的狀況下處理大多數鎖定問題,從而提升數據庫的併發性,減小代碼的實驗和調優量。
  • 全部用於緩存大小的內存區域都正確嗎?也就是說,大到足以容納頻繁訪問的數據,但又不會大到使物理內存過載並致使分頁,要配置的主要內存區域是InnoDB緩衝池和MyISAM鍵緩存。

在硬件級別進行優化

隨着數據庫變得愈來愈忙,任何數據庫應用程序最終都會遇到硬件限制,DBA必須評估是否能夠調優應用程序或從新配置服務器以免這些瓶頸,或者是否須要更多的硬件資源,系統瓶頸一般來自如下來源:性能

  • 磁盤查找,磁盤須要時間才能找到一段數據,對於現代磁盤,這一過程的平均時間一般低於10ms,因此理論上咱們能夠每秒進行100次搜索。對於新磁盤,這個時間提升緩慢,而且很難對單個表進行優化,優化查找時間的方法是將數據分佈到多個磁盤上。
  • 磁盤讀寫,當磁盤處於正確的位置時,咱們須要讀取或寫入數據。對於現代磁盤,一個磁盤至少能夠提供10-20MB/s的吞吐量,這比查找更容易優化,由於你能夠從多個磁盤並行讀取。
  • CPU週期,當數據在主存時,咱們必須處理它以獲得咱們的結果,與內存量相比,擁有較大的表是最多見的限制因素,可是對於小表,速度一般不是問題。
  • 內存帶寬,當CPU須要超過CPU緩存容量的數據時,主內存帶寬就會成爲瓶頸,對於大多數系統來講,這是一個不常見的瓶頸,可是須要注意。

平衡可移植性和性能

要在可移植MySQL程序中使用面向性能的SQL擴展,能夠在/*! */註釋分隔符內的語句中封裝特定於MySQL的關鍵字,其餘SQL服務器忽略已註釋的關鍵字。學習

相關文章
相關標籤/搜索