使用主備復制
因此需要打開Log
Bin
這裡就涉及一個sync
bin的概念
缺省情況下
sync
bin 在mysql中是關閉的
但存在一個風險
因為寫日志沒有刷新到硬盤中去的話
日志是寫在操作系統的文件系統裡的Cache中
這樣若機器斷電
那麼日志信息將部分丟失
為了減少數據丟失
我們測試了sync
bin=
sync
bin=
和sync
bin=
三種情況
sync
bin=
的情況下
丟失數據最壞概率是丟一個事務的數據
但性能非常差
設置sync
bin=
的情況下
性能可以提高
倍左右
設置sync
bin=
時
性能比sync
bin=
又可以提高
倍
設置大於
的值
基本上相差不大
性能提高不了多少
最壞
個事務數據丟失是在我們的允許范圍之內
因此設置
是個合理的值
這個值具體取決於你的系統能夠最壞允許丟少的事務數據
若你的系統對數據丟失不於考慮
可以關閉sync
bin
這時數據刷新到硬盤完全取決於操作系統的配置
相關的配置參數有如下
/proc/sys/vm/dirty_ratio
這個參數控制一個進程在文件系統中的文件系統寫緩沖區的大小
單位是百分比
表示系統內存的百分比
表示當一個進程中寫緩沖使用到系統內存多少的時候
再有磁盤寫操作時開始向磁盤寫出數據
增大之會使用更多系統內存用於磁盤寫緩沖
也可以極大提高系統的寫性能
但是
當你需要持續
恆定的寫入場合時
應該降低其數值
一般缺省是
更新方法
echo
>/proc/sys/vm/dirty_ratio (或則修改/etc/nf文件
增加sys
vm
dirty_ratio=
重起機器)
/proc/sys/vm/dirty_background_ratio
這個參數控制文件系統的pdflush進程
在何時刷新磁盤
單位是百分比
表示系統總內存的百分比
意思是當磁盤的髒數據緩沖到系統內存多少的時候
pdflush開始把髒數據刷新到磁盤
增大會使用更多系統內存用於磁盤寫緩沖
也可以極大提高系統的寫性能
但是
當你需要持續
恆定的寫入場合時
應該降低其數值
一般缺省是
/proc/sys/vm/dirty_writeback_centisecs
Pdflush寫後台進程每隔多久被喚醒並執行把髒數據寫出到硬盤
單位是
/
秒
缺省數值是
也就是
秒
如果你的系統是持續地寫入動作
那麼實際上還是降低這個數值比較好
這樣可以把尖峰的寫操作削平成多次寫操作
設置方法如下
echo
>/proc/sys/vm/dirty_writeback_centisecs
/proc/sys/vm/dirty_expire_centisecs
這個參數聲明Linux內核寫緩沖區裡面的髒數據多
舊
了之後
pdflush進程就開始考慮寫到磁盤中去
單位是
/
秒
缺省是
也就是
秒的數據就算舊了
將會刷新磁盤
對於特別重載的寫操作來說
這個值適當縮小也是好的
但也不能縮小太多
因為縮小太多也會導致IO提高太快
建議設置為
也就是
秒算舊
echo
>/proc/sys/vm/ dirty_expire_centisecs
因此若沒有調整這些參數
全部以缺省值
而且關閉sync
bin的話
那麼最多丟失的數據是
秒種(dirty_writeback_centisecs)之內的
小於
G的數據(dirty_background_ratio
G/
=
G)
當然
實際上
秒之內不太可能寫
G的數據
因此最壞就是
秒鐘之內的數據丟失
因此若要關閉sync
bin
又不想丟失太多數據的話
可以通過調整dirty_writeback_centisecs這個參數
如調整到
(
秒)
這樣最多就丟
秒鐘的數據
又可以提高數據的寫能力
Mysql裡還有一個參數可以調整
提高數據庫的寫能力
那就是
innodb_flush_log_at_trx_commit
這個參數默認是
即每次事務Commit時
都刷新日志
以免數據丟失
因為我們的系統允許丟失少量數據
因此可以把innodb_flush_log_at_trx_commit設置為
允許丟失一個事務的數據
經測試
發現
可以提高
%左右的性能
另外對於文件系統的mount方式
noatime方式也可以提高部分性能(數據庫專用的服務器
一般是noatime)
當數據有刪除更新操作後
時間長後一般有碎片
導致索引空間不緊湊
占用更多的硬盤空間
因此會導致查詢編碼
解決辦法是定期執行下面的語句
ALTER TABLE tbl_name ENGINE=INNODB
另外若sql語句中有sort 和group by之類
需要增大sort_buffer_size
這個參數是每客戶端連接的
當有sort/group查詢時
會分配sort_buffer_size大小的內存
因此若連接很多
則要小心
合適的值可以查看SHOW GLOBAL STATUS裡面Sort_merge_passes的信息以及Created_tmp_tables之類信息
原文地址 ?play=reply&id=
From:http://tw.wingwit.com/Article/program/MySQL/201311/29481.html