MySQL-性能優化_影響MySQL性能的因素分析及解決方案


在這裏插入圖片描述


影響性能的幾個因素

  • 硬件資源(CPU 、內存、磁盤等)

  • 操作系統的區別

  • MySQL的存儲引擎的選擇

    MyISAM: 不支持事務,表級鎖
    InnoDB: 事務級存儲引擎,完美支持行級鎖,事務ACID特性。

    但 比不是說 MyISAM比InnoDB差,看使用場景

  • 數據庫參數設置

  • 數據庫結構設計和SQL語句 ,毫無疑問 這個是最最重要的因素 —> mysql 可以開啓慢查詢監控耗時長的SQL


CPU

更多的CPU or 更快的CPU ?

主要從以下幾個方面考慮:

  • (1)CPU密集型的應用?

分析下我們的應用的類型,是的話,要提高SQL的運行效率,那就需要更快的CPU。

還有一點需要注意 MySQL不支持多CPU對同一SQL的併發處理,也就是說一個SQL只能運行在一個CPU的核上。


  • (2) 系統的併發量如何 ?

一個SQL只能跑在一個CPU上,如果有32個CPU呢 ,是不是同時可以跑32個SQL呢? 就是我們前面說的QPS 。 一般web應用,CPU的核心數量比CPU的主頻更重要。


  • (3) MySQL的版本 ?

5.6、 5.7以上的版本,對多核CPU的支持更好。


  • (4) 64位操作系統 OR 32位操作系統

32的操作系統,進程所能尋址的最大內存也就4G。

總結

  • 對於併發較高的場景,CPU的數量比頻率重要
  • 對CPU密集型場景和複雜的SQL 頻率越高越好

內存

MyISAM : 索引 緩存在內存 ,數據通過OS來緩存

InnoDB : 索引和數據都是通過內存來緩存

舉個例子, 100G的數據量, 內存64G,這個時候增加內存對性能有提高。 如果內存是256G,還是慢,那就是其他問題了。

當然了,內存多了,對於數據的讀和寫都是好處的,都可以利用緩存來提高讀寫性能。

如何選擇內存呢? ----> 建議選擇主板支持的最大內存頻率, 跟CPU一個道理。

內存的型號,保持一致, 單個內存儘可能的大,都是比較好的選擇。

配置的時候,要考慮數據的增長,比如100G的數據, 128G內存可能已經滿足了要求,但數據可能增長較快,這個時候256的更佳。

總結

  • 選擇主板所能使用的最高頻率的內存
  • 內存儘可能的多

磁盤的配置和選擇

主流的4種

  • 使用傳統的機械硬盤
  • 使用RAID增強傳統硬盤的性能
  • 使用固態存儲SSD和PCIe卡
  • 使用網絡存儲NAS和SAN

傳統的機械硬盤

傳統的機械硬盤的讀取數據的過程

  1. 移動磁頭到磁盤表面上正確的位置
  2. 等待磁盤旋轉,使所需的數據在磁頭之下 ----> 訪問時間
  3. 等磁盤旋轉過去,所需的數據被磁頭讀出 ------> 傳輸速度

考慮的話 1. 存儲容量 2.傳輸速度 3 訪問時間 4 主軸的轉速(常見的7200轉、1萬5千轉等等) 5. 物理尺寸


RAID

RAID : 磁盤冗餘隊列 (Redundant Arrays of Independent Disks )

RAID是一種將多個容量較小的磁盤組成一組容量更大的磁盤,並提供數據冗餘來保證數據完整性的技術 。

Linux-Raid0、Raid1、Raid5、Raid10初探


SSD 或者 PCIe卡

SSD

  • 比普通的機械盤有更好的隨機讀寫性能
  • 支持更好的併發, I/O 性能好
  • 缺點: 長時間密集的寫,容易造成損壞

特點:

  • 可以使用SATA接口,可以替換傳統的磁盤而不需要任何的改動。
  • SATA接口的SSD同樣支持RAID
  • SATA的SSD 3.0 接口如果放到了 2.0接口上,受2.0接口的性能影響,性能會下降

舉個例子 SATA3.0接口 6Gbps , 放到SATA2.0接口上 最多隻能用到2.0的 3Gbps


PCIe 卡(Fushion IO)

  • 無法使用SATA接口,需要獨特的驅動和配置
  • 比SSD性能好,但價格也比SSD貴
  • PCIe 也會吃服務器的內存
  • 支持PCIe的Raid控制器比較少,而且成本相當高

固態存儲使用的場景

  • 大量隨機I/O的場景
  • 解決單線程負載的I/O 瓶頸

舉個例子

主從節點的MYSQL, 有一個SSD, 給哪個節點用呢 ?

----> 從節點 上用。 主節點上寫 ,是多線程, 從節點的複製,單線程,爲了減少延遲,建議放到從服務器上。


網絡存儲SAN (光纖傳輸)和 NAS (帶寬傳輸)

SAN: Storage Area Network

NAS: Network Attached Storage

是兩種外部文件存儲設備加載到服務器上的方法。

SAN設備通過光纖連接服務器,設備通過塊接口訪問,服務器可以將其當做硬盤使用。 可以承受大量的順序讀寫,但隨即讀有的時候不如RAID

NAS 使用 寬帶來傳輸,有延遲。

使用場景的話: 數據備份等 。

總結

  • PCIe > SSD > Raid10 > 本地磁盤 > NAS

網絡

網絡帶寬 —> 低延時 、吞吐量達

網絡質量—> 少抖動

建議

  • 採用高性能和高帶寬的網絡接口設備和交換機
  • 對多個網卡進行綁定,增強可用性和帶寬
  • 儘可能的進行網絡隔離

操作系統

windows 和 linux , 大小寫的區別,可以通過修改MySQL的配置來調整。

CentoOS系統的參數優化 /etc/sysctl.conf

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述


資源限制的配置文件 /etc/security/limit.conf

在這裏插入圖片描述

這倆參數,重啓系統才生效。