MySQL簡單優化

公司升級了服務器的配置,內存吃緊的問題得以解決,由此想到了幾個優化MySQL的簡單方法。首先明確兩件事,咱們的業務場景是常見的高併發web服務,查詢速度是重中之重。還有就是優化前必定要備份數據庫,否則出問題就只能跑路了。web

1.使用固態硬盤數據庫

這個優化方法毫無技術含量,徹底就是花錢買性能,可是不得不說這個方法至關的簡單、粗暴、有效。藉助固態硬盤高頻的讀寫速度能夠大幅提高MySQL的各項性能服務器

2.添加索引數據結構

當數據量達到必定級別時,添加合適的索引是必須的。MySQL是B+樹或者其變種樹,將數據按照索引的數據結構排序以優化查詢效果。若是表中的數據要頻繁的插入、刪除時,這些操做會損害索引,致使索引佔用了很大的無效空間。我就見過一張數據表的因此比數據量大不少,查詢速度超慢甚至不及不添加索引,緣由就是頻繁的插入刪除致使的,這種場景須要按期刪除索引而後從新生成索引多線程

3.去掉外鍵併發

大學期間,老師強調了使用外鍵來約束數據一致性是頗有必要的。上學時我也嚴格奉行了這一觀點,畢竟這可讓我少寫代碼,把一致性問題拋給數據庫。工做後結合真正的業務場景,數據庫經常成爲性能瓶頸,而服務並不會成爲性能瓶頸,因此將數據一致性問題的解決方案寫入服務中以此減小數據庫壓力頗有必要。高併發

4.使用InnoDB性能

不少事實都代表InnoDB比MyISAM更具優點。InnoDB對內存的使用更全面,內存的訪問速度顯然比磁盤要快優化

5.設置InnoDB內存spa

innodb_buffer_pool_size參數表明分配給InnoDB的內存大小,分配內存時要給操做系統留下足夠的內存。根據同事的經驗之談是能夠爲innodb_buffer_pool_size分配服務器80%的內存,固然了,這麼作的前提條件是你的服務上基本只有MySQL,若是服務器上存在數據解析等其餘很費內存的服務時,innodb_buffer_pool_size數值要酌情減小

6.設置InnoDB多任務

若是分配給innodb_buffer_pool_size的內存大於2G時,咱們能夠考慮將InnoDB的緩衝池劃分爲多個,咱們能夠修改配置中的innodb_buffer_pool_instances參數。對於高併發服務,性能瓶頸每每是多線程訪問MySQL,劃分更多的緩衝池能夠有效的緩解這個問題。固然緩衝池也不是越多越好,每一個緩衝池的內存太低的話就不能發揮出多個緩衝池的優點了。官方的建議是每一個緩衝池須要至少1G的內存。

 

最後提醒你們,對MySQL的配置修改須要重啓MySQL才能生效

相關文章
相關標籤/搜索