快速提高MySQL可擴展性的五大絕招

在可擴展性方面,客戶的要求變得愈來愈多,功能列表上常常會出現20條、50條甚至多達100多條要求,但總的來講,咱們能夠把它們縮短爲五個大 類,經過五條途徑來解決可擴展性問題:html

1. 調整查詢操做數據庫

對查詢進行優化可以讓你付出最少的精力就獲得最多的成果。將查詢功能完善的發揮出來,達到業務需求,不會被過多的流量和太重的載荷壓倒。這就是爲什 麼咱們常常看見客戶碰到的麻煩愈來愈多,隨着他們網站的訪問量愈來愈大,可擴展性的挑戰也變得愈來愈嚴重,這就是問題的所在。對網站角落裏那些不經常使用的頁 面作查詢優化是並沒必要要的,那些頁面並不會收到真實世界的流量。根據反映對網絡應用作必定的調整是很廣泛的作法,並且效果很好。緩存

查詢優化須要啓用緩慢查詢日誌而且不斷觀察。使用mk-query-digest這個Maatkit套件中的強大工具來分析日誌,並且要肯定設置了 log_queries_not_using_indexes標籤。一旦你發現某個查詢嚴重佔用資源,那就要優化它。使用EXPLAIN解釋機制,使用 profiler,觀察索引的使用狀況,建立失蹤的索引,理解它是怎麼進行添加和排序的。服務器

2.使用Master-Master複製網絡

Master-Master的active-passive複製模式,或者稱爲循環複製,不只能帶來高可用性,也可以帶來高度的可擴展性。這是由於 你可以即刻給你的應用分配到一塊只讀的從屬盤。許多網絡應用都按照80/20的規律來分割,80%的活動用來進行讀取或SELECT,剩下的分配給 INSERT和UPDATE。配置你的應用或者進行從新架構,把讀取須要的流量發送到從盤,這樣作是可行的,這種類型的橫向可擴展能力能夠進一步延伸,在 必要時可以附加更多塊只讀從盤。架構

3. 使用存儲工具

這聽起來是很基礎的東西,也很直接,可是常常會被忽視,你至少應該確認設置了這些:性能

  • innodb_buffer_pool_size
  • key_buffer_size (MyISAM索引緩存)
  • query_cache_size – 使用大型SMP時須要當心
  • thread_cache & table_cache
  • innodb_log_file_size & innodb_log_buffer_size
  • sort_buffer_size, join_buffer_size, read_buffer_size, read_rnd_buffer_size
  • tmp_table_size & max_heap_table_size

4. 磁盤讀取的RAID優化

你的數據庫下面是什麼?不知道嗎,請找出來。你是在用RAID 5嗎?這對於性能來講但是一個巨大的阻礙。RAID5的插入和更新操做速度很慢,並且若是你丟失了一塊硬盤,RAID 5在重建時幾乎無能爲力。RAID 5實在是太慢了,那麼應該用什麼代替它呢?用RAID 10作鏡像和分段,這就能夠充分利用你的服務器或機箱裏的全部硬盤了。即便你的內存可以容納下整個數據庫,依然須要對硬盤進行許多讀取操做。爲何呢?由於好比排序操做須要 從新安排行列,羣組和聯接等等也同樣,還有添加交易日誌等等這些都是磁盤I/O操做。網站

5. 調整Key參數

另外,有些附加的參數也能夠用來提升性能:

innodb_flush_log_at_trx_commit=2

它能夠極大的提高insert和update的速度,只是在清除innodb日誌緩衝區時有點偷懶。你能夠對它多作些研究,但大多數狀況下是很是值 得推薦的。

innodb_file_per_table

innodb開發就像Oracle,存儲方面使用的是tablespace模式。顯然內核開發者們作的並不完善,由於使用單獨tablespace 的默認設置就會出現性能瓶頸。這個參數設置能夠幫助innodb爲每一個表建立tablespace和數據文件,就像MyISAM所作的同樣。

相關文章
相關標籤/搜索