1. 程式人生 > >mysql之 CentOS系統針對mysql參數優化

mysql之 CentOS系統針對mysql參數優化

內核參數 mysq 特殊 app 參數 bsp 緩沖池 dea 磁盤分區

內核相關參數(/etc/sysctl.conf)
  以下參數可以直接放到sysctl.conf文件的末尾:
    net.core.somaxconn = 65535
    net.core.netdev_max_backlog = 65535
    net.ipv4.tcp_max_syn_backlog = 65535

    加快TCP連接的回收:
    net.ipv4.tcp_fin_timeout = 10
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1

    TCP連接接收和發送緩沖區大小的默認值和最大值:
    net.core.wmem_default = 87380
    net.core.wmem_max = 16777216
    net.core.rmem_default = 87380
    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
    Linux內核參數中最重要的參數之一,用於定義單個共享內存段的最大值。
    註意:
      1. 這個參數應該設置的足夠大,以便能在一個共享內存段下容納整個的Innodb
      緩沖池的大小
      2. 這個值的大小對於64位linux系統,可取的最大值為物理內存值-1byte,建議
      值為大於物理內存的一半,一般取值大於Innodb緩沖池的大小即可,可以取物理內存-1byte

    vm.swappiness = 0
    這個參數當內存不足時會對性能產生比較明顯的影響。
    Linux系統內存交換區:
      在Linux系統安裝時都會有一個特殊的磁盤分區,稱之為系統交換分區。
    使用free-m命令可以看到swap就是內存交換區.
    作用:
      當操作系統因為沒有足夠的內存時就會將一些虛擬內存寫到磁盤的交換區中
    這樣就會發生內存交換。
    在MySQL服務器上是否要使用交換分區有一些爭議:
        在MySQL服務所在的Linux系統上完全禁用交換分區。
    帶來的風險:
      1. 降低操作系統的性能
      2. 容易造成內存溢出,崩潰,或都被操作系統kill掉
    結論:
      在MySQL服務器上保留交換區還是很必要的,但是要控制何時使用交換分區。
    Vm.swappiness = 0
    就是告訴Linux內核除非虛擬內存完全滿了,否則不要使用交換區。

增加資源限制(/etc/security/limit.conf)
這個文件實際上是Linux PAM也就是插入式認證模塊的配置文件。
打開文件數的限制:
  soft nofile 65535
  hard nofile 65535
  * 表示對所有用戶有效
  soft 指的是當前系統生效的設置
  hard 表明系統中所能設定的最大值
  nofile 表示所限制的資源是打開文件的最大數目
  65535 限制的數量
  soft不能大於hard
  直接加到limit.conf文件的末尾就可以了。
  結論:把可打開的文件數量增加到65535個以保證可以打開足夠多的文件句柄。
  註意:這個文件的修改需要重啟系統才能生效。

磁盤調度策略(/sys/block/devname/queue/scheduler)
cat /sys/block/devname/queue/scheduler
調度策略: noop anticipatory deadline [cfg]

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/queue/scheduler
  如 echo deadline /sys/block/devname/queue/scheduler

mysql之 CentOS系統針對mysql參數優化