mysqsl優化

使用主備複製,因此需要打開Log-Bin,這裏就涉及一個sync-bin的概念,缺省情況下,sync-bin 在mysql中是關閉的,但存在一個風險,因爲寫日誌沒有刷新到硬盤中去的話,日誌是寫在操作系統的文件系統裏的Cache中,這樣若機器斷電,那麼日誌信息將部分丟失。爲了減少數據丟失,我們測試了sync-bin=1,sync-bin=5和sync-bin=20,三種情況,sync-bin=1的情況下,丟失數據最壞概率是丟一個事務的數據,但性能非常差;設置sync-bin=5的情況下,性能可以提高1倍左右;設置sync-bin=20時,性能比sync-bin=5又可以提高1倍,設置大於20的值,基本上相差不大,性能提高不了多少,最壞20個事務數據丟失是在我們的允許範圍之內,因此設置20是個合理的值,這個值具體取決於你的系統能夠最壞允許丟少的事務數據。 若你的系統對數據丟失不於考慮,可以關閉sync-bin,這時數據刷新到硬盤完全取決於操作系統的配置,相關的配置參數有如下: /proc/sys/vm/dirty_ratio 這個參數控制一個進程在文件系統中的文件系統寫緩衝區的大小,單位是百分比,表示系統內存的百分比,表示當一個進程中寫緩衝使用到系統內存多少的時候,再有磁盤寫操作時開始向磁盤寫出數據。增大之會使用更多系統內存用於磁盤寫緩衝,也可以極大提高系統的寫性能。但是,當你需要持續、恆定的寫入場合時,應該降低其數值,一般缺省是 40。更新方法 echo 30 >/proc/sys/vm/dirty_ratio (或則修改/etc/sysctl.conf文件,增加sys.vm.dirty_ratio=30 重起機器) /proc/sys/vm/dirty_background_ratio 這個參數控制文件系統的pdflush進程,在何時刷新磁盤。單位是百分比,表示系統總內存的百分比,意思是當磁盤的髒數據緩衝到系統內存多少的時候,pdflush開始把髒數據刷新到磁盤。增大會使用更多系統內存用於磁盤寫緩衝,也可以極大提高系統的寫性能。但是,當你需要持續、恆定的寫入場合時,應該降低其數值,一般缺省是10。 /proc/sys/vm/dirty_writeback_centisecs Pdflush寫後臺進程每隔多久被喚醒並執行把髒數據寫出到硬盤。單位是 1/100 秒。缺省數值是500,也就是 5 秒。如果你的系統是持續地寫入動作,那麼實際上還是降低這個數值比較好,這樣可以把尖峯的寫操作削平成多次寫操作。設置方法如下: echo 200 >/proc/sys/vm/dirty_writeback_centisecs /proc/sys/vm/dirty_expire_centisecs 這個參數聲明Linux內核寫緩衝區裏面的髒數據多“舊”了之後,pdflush進程就開始考慮寫到磁盤中去。單位是 1/100秒。缺省是 30000,也就是 30 秒的數據就算舊了,將會刷新磁盤。對於特別重載的寫操作來說,這個值適當縮小也是好的,但也不能縮小太多,因爲縮小太多也會導致IO提高太快。建議設置爲 1500,也就是15秒算舊。 echo 1500 >/proc/sys/vm/ dirty_expire_centisecs 因此若沒有調整這些參數,全部以缺省值,而且關閉sync-bin的話,那麼最多丟失的數據是: 5秒種(dirty_writeback_centisecs)之內的,小於1.6G的數據(dirty_background_ratio,16G/10=1.6G) 當然,實際上5秒之內不太可能寫1.6G的數據,因此最壞就是5秒鐘之內的數據丟失。因此若要關閉sync-bin,又不想丟失太多數據的話,可以通過調整dirty_writeback_centisecs這個參數,如調整到200(2秒),這樣最多就丟2秒鐘的數據。又可以提高數據的寫能力。 Mysql裏還有一個參數可以調整,提高數據庫的寫能力,那就是 innodb_flush_log_at_trx_commit 這個參數默認是1,即每次事務Commit時,都刷新日誌,以免數據丟失。因爲我們的系統允許丟失少量數據,因此可以把innodb_flush_log_at_trx_commit設置爲2,允許丟失一個事務的數據,經測試,發現2可以提高25%左右的性能。 另外對於文件系統的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之類信息。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章