MySQL 8.0 參考手冊——8.1優化概述

數據庫性能取決於數據庫級別的幾個因素,例如表、查詢和配置設置。這些軟件結構在硬件級別上產生CPU和I/O操作,您必須最小化和儘可能有效地進行這些操作。在改進數據庫性能時,您首先應學習軟件的高級規則和指南,並使用執行時間測量性能。隨着您成爲專家,您將瞭解更多內部發生的事情,並開始測量諸如CPU週期和I/O操作之類的東西。

典型的用戶旨在最大限度地提高其現有軟件和硬件配置的數據庫性能。高級用戶則尋找改進MySQL軟件本身的機會,或者開發自己的存儲引擎和硬件設備,以擴展MySQL生態系統。

  • 在數據庫級別進行優化

  • 在硬件級別進行優化

  • 平衡移植性和性能

一、在數據庫級別進行優化

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

  1. 表格的結構是否合理?特別是,列的數據類型是否正確,每個表是否都有適合工作類型的列?例如,執行頻繁更新的應用程序通常有許多列數較少的表,而分析大量數據的應用程序通常有列數較多的少數幾個表。
  2. 是否建立了正確的索引,以提高查詢效率?
  3. 您是否爲每個表使用了合適的存儲引擎,並利用了每個存儲引擎的優點和功能?尤其是,選擇 InnoDB 等事務型存儲引擎還是 MyISAM 等非事務型存儲引擎對性能和可擴展性非常重要。
  4. 注意:InnoDB 是新表的默認存儲引擎。實踐中, InnoDB 的高級特性意味着 InnoDB 表的性能往往優於簡單的 MyISAM 表,對於繁忙的數據庫來說尤其如此。
  5. 每個表是否使用合適的行格式?這個選擇也取決於用於表的存儲引擎。特別是,壓縮表佔用更少的磁盤空間,因此只需要更少的磁盤I/O來讀取和寫入數據。InnoDB表和只讀的MyISAM表所有類型的工作負載都可以使用壓縮功能。
  6. 應用程序是否使用了合適的鎖策略?例如,在可能的情況下允許共享訪問,以便數據庫操作可以併發運行;在適當的情況下請求獨佔訪問,以便關鍵操作獲得最高優先級。同樣,存儲引擎的選擇也很重要。InnoDB 存儲引擎可以處理大多數鎖定問題,無需用戶參與,從而提高數據庫的併發性,減少代碼的實驗和調整工作量。
  7. 用於緩存的所有內存區域大小是否正確?也就是說,大到足以容納頻繁訪問的數據,但又不會大到使物理內存超載並導致分頁。需要配置的主要內存區域是 InnoDB 緩衝池和 MyISAM 密鑰緩存。 

二、在硬件級別進行優化

隨着數據庫變得越來越繁忙,任何數據庫應用程序最終都會達到硬件極限。DBA 必須評估是否有可能調整應用程序或重新配置服務器以避免這些瓶頸,或者是否需要更多的硬件資源。系統瓶頸通常來自以下幾個方面:

  1. 磁盤尋道。磁盤查找數據需要一定時間。現代磁盤的平均尋道時間通常低於 10 毫秒,因此理論上我們每秒可以進行約 100 次尋道。新磁盤的尋道時間改善得很慢,而且很難對單個表進行優化。優化尋道時間的方法是將數據分佈到多個磁盤上。
  2. 磁盤讀寫。當磁盤正常掛載時,我們可以按需讀取或寫入數據。對於現代磁盤,一個磁盤的吞吐量至少爲 10-20MB/s 。這比尋道更容易優化,因爲可以從多個磁盤並行讀取。
  3. CPU 週期。當數據在主內存中時,我們必須對其進行處理才能得到結果。與內存容量相比,數據表過大是最常見的限制因素。但對於小表,速度通常不是問題。
  4. 內存帶寬。當 CPU 需要的數據超過 CPU 緩存所能容納的容量時,主內存帶寬就會成爲瓶頸。對於大多數系統來說,這是一個不常見的瓶頸,但也是一個需要注意的問題。 

三、平衡可移植性和性能

要在可移植的 MySQL 程序中使用面向性能的 SQL 擴展,可以在語句中用 /*!*/ 註釋分隔符,其他 SQL 服務器會忽略註釋關鍵字。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章