Mysql 優化概述

       優化涉及多個級別的配置,調整和評估性能。根據您的工作角色(開發人員,DBA或兩者的組合),您可以在單個SQL語句,整個應用程序,單個數據庫服務器或多個網絡數據庫服務器的級別進行優化。有時,您可以主動並提前計劃性能,而有時,您可能會在問題發生後對配置或代碼問題進行故障排除。優化CPU和內存使用率也可以提高可伸縮性,從而使數據庫能夠處理更多負載而不會降低速度。

       數據庫性能取決於數據庫級別的幾個因素,例如表,查詢和配置設置。這些軟件結構導致在硬件級別執行CPU和I / O操作,您必須將這些操作最小化並使其儘可能高效。在研究數據庫性能時,首先要學習軟件方面的高級規則和準則,並使用時鐘時間來衡量性能。成爲專家後,您將瞭解有關內部情況的更多信息,並開始測量諸如CPU週期和I / O操作之類的東西。

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

  • 在數據庫級別進行優化

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

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

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

  1. 磁盤尋求。磁盤查找一段數據需要時間。對於現代磁盤,這一過程的平均時間通常低於10ms,因此理論上我們可以實現大約100次每秒的查找。這在使用新磁盤時改進很慢,而且很難對單個表進行優化。優化尋道時間的方法是將數據分佈到多個磁盤上。
  2. 磁盤讀寫。當磁盤處於正確的位置時,我們需要讀取或寫入數據。對於現代磁盤,一個磁盤至少提供10-20MB /s的吞吐量。這比查找更容易優化,因爲您可以從多個磁盤並行讀取。
  3. CPU週期。當數據在主存時,我們必須處理它以得到我們的結果。與內存數量相比,擁有較大的表是最常見的限制因素。但對於小表,速度通常不是問題。
  4. 內存帶寬。當CPU需要的數據超過了CPU緩存的容量時,主內存帶寬就會成爲瓶頸。對於大多數系統來說,這是一個不常見的瓶頸,但是需要注意。
  • 平衡便攜性和性能

       要在可移植的MySQL程序中使用面向性能的SQL擴展,可以在/ *!中的語句中包裝特定於MySQL的關鍵字。 * /註釋分隔符。其他SQL Server忽略註釋的關鍵字。

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