MySQL簡單優化
公司升級了服務器的配置,內存吃緊的問題得以解決,由此想到了幾個優化MySQL的簡單方法。首先明確兩件事,我們的業務場景是常見的高並發web服務,查詢速度是重中之重。還有就是優化前一定要備份數據庫,不然出問題就只能跑路了。
1.使用固態硬盤
這個優化方法毫無技術含量,完全就是花錢買性能,但是不得不說這個方法相當的簡單、粗暴、有效。借助固態硬盤高頻的讀寫速度可以大幅提升MySQL的各項性能
2.添加索引
當數據量達到一定級別時,添加合適的索引是必須的。MySQL是B+樹或者其變種樹,將數據按照索引的數據結構排序以優化查詢效果。如果表中的數據要頻繁的插入、刪除時,這些操作會損害索引,導致索引占用了很大的無效空間。我就見過一張數據表的所以比數據量大很多,查詢速度超慢甚至不及不添加索引,原因就是頻繁的插入刪除導致的,這種場景需要定期刪除索引然後重新生成索引
3.去掉外鍵
大學期間,老師強調了使用外鍵來約束數據一致性是很有必要的。上學時我也嚴格奉行了這一觀點,畢竟這可以讓我少寫代碼,把一致性問題拋給數據庫。工作後結合真正的業務場景,數據庫常常成為性能瓶頸,而服務並不會成為性能瓶頸,所以將數據一致性問題的解決方案寫入服務中以此減少數據庫壓力很有必要。
4.使用InnoDB
很多事實都表明InnoDB比MyISAM更具優勢。InnoDB對內存的使用更全面,內存的訪問速度顯然比磁盤要快
5.設置InnoDB內存
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才能生效
MySQL簡單優化