什麼影響了mysql的性能-硬件資源及系統方面優化

隨着數據量的增大,數據庫的性能問題也是個值得關注的問題,不少公司對mysql性能方面沒有太太重視,致使服務浪費過多資源、mysql服務性能差從而直接影響用戶體驗,這裏咱們簡單的先來聊聊什麼影響了mysql性能,從而能關注這些問題。html

影響性能的幾個方面
  • 服務器硬件
  • 服務器系統
  • 數據庫存儲引擎的選擇(插件形式的)
    • MyISAM: 不支持事務,表級鎖
    • InnoDB: 事務級存儲引擎,完美支持行級鎖,事務ACID特性
  • 數據庫參數配置
  • 數據庫結構設計和SQL語句
    • 慢查詢(數據庫表結構設計)
    • SQL語句的編寫和優化

硬件資源方面的影響有哪些?mysql

CPU資源和可用內存大小
  • 咱們的CPU是否是密集型的,若是是就須要更好的CPU
  • 不支持多CPU對同一SQL併發
  • 咱們的系統併發量如何?
    • 若是是大併發場景下,CPU數量比頻率更重要
    • MYSQL版本決定多核CPU支持(儘可能用最新版)
      • 高版本的mysql更支持多核
  • 選擇32位仍是64位的CPU?
    • 64位使用32位的服務器版本(不能忽視這個問題,測試/開發環境可能會遇到系統版本問題)
    • 32位對性能有限制
  • 內存大小影響性能
    內存的影響不過多解釋,大固然不是說內存越大性能越好,這裏有一片博客介紹參數寫的聽全,感興趣能夠參考https://www.cnblogs.com/xuan52rock/p/4569835.html
磁盤的配置和選擇
  • 使用傳統機器硬盤sql

    • 存儲容量
    • 傳輸速度
    • 訪問時間
    • 主軸轉速(7200轉/15000轉)
    • 物理尺寸
  • RAID增長傳統機器硬盤的性能shell

    • RAID 0(不擔憂數據丟失)
      • 沒有提供冗餘或錯誤修復能裏
      • 成本低
    • RAID 1(可利用率低,能夠提升好的讀操做)
      • 在寫入一個磁盤同時,往另一個鏡像硬盤寫入
    • RAID 5(讀操做多的應用,從數據庫上)
    • RAID 10(分片鏡像,重要的選擇)
      • 一塊磁盤損壞性能會降低
  • 固態存儲(SSD閃存)數據庫

    • 相比機械磁盤固態磁盤有更好的隨機讀寫
    • 有更好的支持併發
    • 相對機械磁盤固態磁盤更容易損壞(缺點)
      • SSD(固態硬盤)
        • 使用SATA接口
        • SATA接口的SSD一樣支持RAID技術
        • 使用場景
          • 適合於大量隨機IO
          • 解決單線程負載IO的瓶頸
          • 只有一塊固態存儲設備,應該放在從服務器上
            • 主服務器上多線程,從服務器單線程
      • PCI-E SSD(Fusion-io)
        • 沒法使用SATA接口
        • 價格相對貴(還要佔用服務器內存和CPU)
  • 網絡存儲SAN和NAScentos

    • 網絡存儲使用的場景(並不適合)服務器

      • 數據庫備份
    • 網絡性能的限制網絡

      • 延遲多線程

      • 帶寬併發

      • 網絡質量

        建議

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

    總結:

    • CPU
      • 64位的CPU必定要工做在64位系統
      • 對於併發比較高的場景CPU的數量比頻率重要
      • 對於CPU密集性場景和複雜SQL則頻率越高越好
    • 內存
      • 選擇主板所能使用最高頻率的內存
      • 內存大小越大越好
    • I/O子系統
      • PCIe卡-》SSD-〉-》Raid10〉磁盤-》SAN
操做系統對性能的影響
  • centos系統參數優化

    • 內核相關參數(/etc/sysctl.conf)

      # net.core.somaxconn是Linux中的一個kernel參數,表示socket監聽(listen)的backlog上限。什麼是backlog呢?backlog就是socket的監聽隊列,當一個請求(request)還沒有被處理或創建時,他會進入backlog。而socket server能夠一次性處理backlog中的全部請求,處理後的請求再也不位於監聽隊列中。當server處理請求較慢,以致於監聽隊列被填滿後,新來的請求會被拒絕
      net.core.somaxconn = 65535
      net.core.netdex_max_backlog = 65535
      net.ipv4.tcp_max_syn_backlog = 65535
      加快TCP鏈接,快速回收TCP鏈接資源
      net.ipv4.tcp_fun_timeout = 10
      net.ipv4.tcp_tw_reuse = 1
      net.ipv4.tcp_te_recycle = 1
      加快資源回收效率
      net.ipv4.tcp_keepalive_time = 120
      net.ipv4.tcp_keepalive_intvl = 30
      net.ipv4.tcp_keepalive_probes = 3
      kernel.shmmax = 4294967295
      這個參數應該設置的足夠大,以便能在一個共享內存段下容納下整個innodb緩衝池的大小
      
      vm.swappiness = 0
      MYsql上保留內存交換分區仍是有必要的
      增長資源限制(/etc/security/limit.conf)
      * soft nofile 65535
      * hard nofile 65535
      * 表示對全部用戶有效
      soft 指的是當前系統生效的配置
      hard 代表系統中所能設定的最大值
      nofile 表示所限制的資源是打開文件的最大數目
      65535 就是限制的數量
      磁盤調度策略(/sys/block/devname/queue/scheduler)
      
      cat /sys/block/sda/queue/scheduler
      noop anticipatory deadline [cfq]
      
      noop(電梯式調度策略)
      deadline(截止時間調度策略) 對數據庫最好選擇
      anticipatory(預料I/O)
      
      改變磁盤調度策略(/sys/block/devname/queue/scheduler)
      echo deadline > /sys/block/devname/queue/scheduler
  • 文件系統對性能的影響

    • XFS對性能最好

      data = writeback | ordered | journal
      經常使用的文件系統的配置
      /dev/sda1/ext4  noatime,nodiratime,data=writeback 1 1
相關文章
相關標籤/搜索