天天看點

mysql 性能優化

檔案系統:

 優化檔案系統挂載參數:檔案系統挂載參數是在/etc/fstab檔案中修改,重新開機時候生效。noatime表示不記錄通路時間,nodiratime不記錄目錄的通路時間。barrier=0,表示關閉barrier功能。其中nobarrier是xfs檔案系統特有,ext4檔案系統并無此參數。

擴大檔案描述符:

    1、動态修改,重新開機失效,隻能使用root,并且目前session有效:ulimit -n 65535

    2、修改配置檔案,永久生效,在/etc/security/limits.conf配置檔案中增加:          

       soft nofile 65535

       soft nproc 65535

       hard nofile 65535

       hard nproc 65535

sync_binlog:

sync_binlog=0,當事務送出之後,MySQL不做fsync之類的磁盤同步指令重新整理binlog_cache中的資訊到磁盤,而讓Filesystem自行決定什麼時候來做同步,或者cache滿了之後才同步到磁盤。

sync_binlog=n,當每進行n次事務送出之後,MySQL将進行一次fsync之類的磁盤同步指令來将binlog_cache中的資料強制寫入磁盤。

innodb_flush_log_at_trx_commit:

如果innodb_flush_log_at_trx_commit設定為0,log buffer将每秒一次地寫入log file中,并且log file的flush(刷到磁盤)操作同時進行.該模式下,在事務送出的時候,不會主動觸發寫入磁盤的操作。

如果innodb_flush_log_at_trx_commit設定為1,每次事務送出時MySQL都會把log buffer的資料寫入log file,并且flush(刷到磁盤)中去.

如果innodb_flush_log_at_trx_commit設定為2,每次事務送出時MySQL都會把log

buffer的資料寫入log file.但是flush(刷到磁盤)操作并不會同時進行。該模式下,MySQL會每秒執行一次

flush(刷到磁盤)操作。

強烈建議關閉query cache。通過配置檔案設定query_cache_size = 0、query_cache_type = 0即可。

分布式優化

分庫分表:

這裡也可以分為2類:

(1)通過前端應用代碼邏輯實作的方式,實作表分拆的方式。這樣做對應用程式的侵入性比較大,但是資料處理邏輯的過程把控在自己手上,有異常可以自主定位。

(2)通過中間件的方式實作,目前常用的mycat、cobar實作資料分片。

讀寫分離:

繼續閱讀