日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

MySQL-性能优化_影响MySQL性能的因素分析及解决方案

發布時間:2025/3/21 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL-性能优化_影响MySQL性能的因素分析及解决方案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 生猛干貨
  • 官方文檔
  • 影響性能的幾個因素
    • CPU
    • 內存
    • 磁盤的配置和選擇
      • 傳統的機械硬盤
      • RAID
      • SSD 或者 PCIe卡
      • 網絡存儲SAN (光纖傳輸)和 NAS (帶寬傳輸)
    • 網絡
    • 操作系統
      • 內核相關參數 `/etc/sysctl.conf`
      • 資源限制的配置文件 /etc/security/limits.conf
      • 磁盤調度策略
    • 文件系統
  • 搞定MySQL

生猛干貨

帶你搞定MySQL實戰,輕松對應海量業務處理及高并發需求,從容應對大場面試


官方文檔

https://dev.mysql.com/doc/

如果英文不好的話,可以參考 searchdoc 翻譯的中文版本

http://www.searchdoc.cn/rdbms/mysql/dev.mysql.com/doc/refman/5.7/en/index.com.coder114.cn.html


影響性能的幾個因素

  • 硬件資源(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 訪問時間 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


    如需增加 可以直接追加到該文件的末尾

    net.core.somaxconn=65535 # Linux kernel參數,表示socket監聽的backlog(監聽隊列)上限 net.core.netdev_max_bakclog=65535 # 允許發送到隊列中的數據包數目 net.ipv4.tcp_max_syn_backlog=65535 # #表示SYN隊列長度,默認1024,改成65535,可以容納更多等待連接的網絡連接數。 net.ipv4.tcp_fin_timeout = 10 #表示如果套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間 net.ipv4.tcp_tw_reuse = 1 #表示開啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接,默認為0,表示關閉; net.ipv4.tcp_tw_recycle = 1 #表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認為0,表示關閉。

    TCP/IP及內核參數優化調優

    net.core.wmen_default = 87380 # 表示內核套接字發送緩存區默認的大小。 net.core.wmen_max = 16777216 # 表示內核套接字發送緩存區最大大小。 net.core.rmem_default = 87380 # 默認的TCP數據接收緩沖 net.core.rmem_max=16777216 # 最大的TCP數據接收緩沖 #單位是秒 可適當調整 net.ipv4.tcp_keepalive_time = 120 # 有效時長 net.ipv4.tcp_keepalive_intvl = 30 # 探測失敗時,重發的間隔 net.ipv4.tcp_keepalive_probes = 3 # 最多發送多少次探測消息 kernel.shmmax = 4294967295 # (4G)單個共享內存段的最大值,應該設置的足夠大,以便能在一個共享段下容納整個Innodb緩沖池的大小 。 可以取物理內存-1 byte vm.swappiness = 0 # 除非虛擬內存滿了,否則不會使用交換分區

    其實就是swap交換分區的設置, 當操作系統沒有足夠的內存時,就會將一些虛擬內存寫到磁盤的交換區中,這樣就會發生內存交換。

    然后執行sysctl -p命令,使上述修改生效


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

    # 文件句柄數量 * soft nofile 65535 * hard nofile 65535 * 對所有用戶生效 soft 當前系統生效的設置 hard 系統所能設置的最大值 nofile 表示所限制的資源是打開文件的最大數目 65535 限制的數目

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


    磁盤調度策略

    I/O 調度算法再各個進程競爭磁盤I/O的時候擔當了裁判的角色,以求得盡可能最好的整體I/O性能。

    在linux下面列出4種調度算法

    • CFQ (Completely Fair Queuing 完全公平的排隊)(elevator=cfq) 默認策略
    • Deadline (elevator=deadline): 試圖把每次請求的延遲降至最低
    • NOOP (elevator=noop):FIFO隊列形式處理
    • Anticipatory (elevator=as):對讀操作優化服務時間,在提供一個I/O的時候進行短時間等待,使進程能夠提交到另外的I/O。
    #查看當前IO[root@artisan ~]# cat /sys/block/sd*/queue/scheduler noop [deadline] cfq [root@artisan ~]#

    文件系統

    windows -----> FAT 和 NTFS

    WinServer 只有 NTFS 這種可以選擇

    Linux —> EXT3 EXT4 XFS

    EXT3 EXT4系統的掛載參數 /etc/fstab

    # data的可配置選項data=writeback | ordered |journal noatime nodiratime /dev/sda1/ext4 noatime,nodiratime,data-writeback 1 1


    搞定MySQL

    總結

    以上是生活随笔為你收集整理的MySQL-性能优化_影响MySQL性能的因素分析及解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。