服務器性能指標與內核參數優化


MySQL相關的優化

一、CPU資源和可用內存大小

1、如何選用CPU
     問?我們需要更快的cpu還是更多的cpu
     答:我們想要更快的cpu還要更多的cpu顆數(痴心做夢)
    
     解答:首先我們需要判斷我們的服務是否為cpu密集型的業務,如果是,則應該選擇更快的cpu,以加快SQL語句的查詢速度。其次我們應該考慮我們系統的並發量的問題,單個cpu無法利用多核心的資源,我們要提高系統的吞吐量和並發量應該選擇更多的cpu,再有我們應該考慮我們本身業務需要使用過的MySQL的版本,對於5.0以前的MySQL,並不能充分的使用多核心cpu。建議使用5.6+的版本
    
     注意:如果服務器的性能很好,別手殘的選擇安裝32位的操作系統,因為pow(2, 32)=4G,也是我們艹內存,只能最多艹4G,多余的4G的內存無法使用
    
2、內存
     問?內存應該怎么優化
     答:內存越多越好,但是對性能影響有限並不能無限的增加性能

     解答:服務器的內存,我們應該組成購買升級,並且每個通道的內存應選擇相同品牌、顆粒、頻率、電壓、校驗技術和型號,另外我們需要根據數據庫的大小來選擇內存,另外應該配置更多內存以避免內存不足造成性能下降(選用128G或者256G以上的內存)!

二、磁盤的配置和選擇

可用選擇:
 1、使用傳統機器硬盤
    優點:存儲空間大、價格低廉
    缺點:讀寫速度較慢,但是選擇使用的較多
    需要考慮的點:存儲容量、傳統速度、訪問時間、主軸的轉速(7200轉或更高的轉速)、物理磁盤的尺寸

 2、使用RAID增強傳統機器磁盤的性能
     簡介:RAID是磁盤冗余隊列的簡稱(Readundant Arrays of Independent Disks),簡單來說就是RAID的作用就是可以把多個容量小的磁盤組成一組容量更大的磁盤,並提供數據完整性的技術
      raid0:具有讀寫加速的技術,磁盤使用率是3塊磁盤的和,但是磁盤的損壞率是一塊盤的n倍(N塊磁盤),適用於MySQL的salve端
      raid1:具有冗余的功能,磁盤利用率為n/2,因為需要把另外的一半磁盤作為備份盤使用,適用對數據要求安全速度無要求的業務,例如日志或者傳統的監控系統
      raid5:通過分布式奇偶校驗塊的把數據分散到多個磁盤上,這樣如果任何一塊盤數據失效,都可以從奇偶盤中重建,如果兩塊盤掛掉了,整個磁盤陣列就GG了!比較中庸的解決方案,需要損失一塊盤的空間作為奇偶校驗盤~
      raid10:它是對磁盤先做raid1以后再對兩組raid1磁盤做raid0,所以對讀寫都有良好的性能,相對於raid5重建起來更簡單,速度也更快!適用於存儲的主節點或者MySQL的主節點~
        
 3、使用固態存儲SSD和PCIE卡
      優點:相比機械磁盤固態磁盤有更好的隨機讀寫性能,相比機械磁盤能更好的支持並發
      缺點:更容易的損壞,成本高
      使用場景:適用於大量的隨機I/O的場景,使用於解決單線程負載的I/O瓶頸
        
      注意:
          如果只有一塊固態磁盤,我們應該給他放到主服務器還是從服務上?
          如果只有一塊固態磁盤的話,建議放到從服務器上,以減少主從同步的時間,減少固態的讀寫

三、CentOS系統參數調優

相關的參數調整:
 1、內核相關的參數(/etc/sysctl.conf)
    net.coro.somaxconn=65535
    net.coro.netdev_max_backlog=65535
    net.ipv4.tcp_max_syn_backlog=65535
    net.ipv4.tcp_fin_timeout=10
    net.ipv4.tcp_tw__reuse=1
    net.ipv4.tcp_tw_revycle=1
    net.core.wmem_default=87380
    net.core.wmem_max=16777216
    net.core.rmem_default=87380
    net.core.rmem_max=16777216
    net.ipv4.tcp_keepalive_time=120
    net.ipv4.tcp_keppalive_intvl=30
    net.ipv4.tcp_keepalive_probes=3
    kernel.shmmax=4294967295
    注意:這個值的大小對於64位的Linux系統,可取的最大值為物理內存值-1byte,建議值為大於物理內存的一半,一般取值大於Innodb緩存池的大小即可,可以取物理內存-1bytes
            
 2、增加資源限制(/etc/security/limit.conf)
     * soft nofile 65535
     * hard nofile 65535
     解釋:
       *       表示對所有用戶有效
       soft    指的是當前系統生效的設置
       hard    表明系統中所能設定的最大值
       nofile  表示所限的資源是打開文件的最大數目
       65536   就是限制的數量  
        
 3、磁盤調度策略(/sys/block/devname/queue/scheduler)
        cat /sys/block/sda/queue/scheduler
        noop anticipatory deadline [cfq]
        
  noop(電梯式調度策略):
    NOOP實現了一個FIFO隊列,它像是電梯的工作方法一樣對I/O請求進行組織,當有一個新的請求過來時,它將請求合並到最近的請求以后,以此來保證請求同一個介質,NOOP傾向於餓死讀而利於寫,因此NOOP對於閃存設備、RAM及嵌入式系統是最好的選擇。

  deadline(截止時間調度策略)
    Deadline確保了在一個截止時間內服務請求,這個截止時間是可調整的,而默認讀期限短與寫期限。這樣就能防止寫操作因為不能被讀取而餓死的現象,Deadline對數據庫類是最好的選擇
 
  anticipatory(預料I/O調度策略)
    本質上與Deadline一樣,但是最后一次讀操作后,要等待6ms,才能繼續進行對其他I/O請求進行調度。它會在每個6ms,才能中插入新的I/O操作,而會將一些小寫入流合並為一個大寫入流,用寫入延遲換取最大的寫入吞吐量。AS時而好與寫入較多的環境,比如文件系統,AS對數據庫表現極差!
    
  更改調度策略的方法:
      echo "schedulername" /sys/block/devname/deque/scheudler

四、文件系統對性能的相應

EXT3/4系統的掛載參數(/etc/fstab)
   data = writeback | ordered | journal
     writeback:非同步的寫入,速度最快
     ordered:   不記錄元數據,但是提供了一致性的保證,在寫原元數據之前,先寫入數據,使他們保存一致,稍慢與writebak
     journal:   日志

   noatime, nodiratime (掛載選項的時候可以設置的相關參數,例如不更新訪問時間,目錄的時間,以提升I/O的性能)
    
   /dev/sda1/ etx4 notime, nodiratime, data=writeback 1  1  (fstab中的優化參數)
    
   可以通過追加重定向的命令把參數傳遞到fstab中
      #] echo "/dev/sda1/ etx4 notime, nodiratime, data=writeback 1  1" >> /etc/fstab

原創作品,轉載請注明出處:http://www.cnblogs.com/demon89/p/mysql_optimization.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM