公司公升級了伺服器的配置,記憶體吃緊的問題得以解決,由此想到了幾個優化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簡單優化
日誌類 long query time 1 和 log slow queries usr local mysql logs log slow.log 設定慢查詢日誌記錄路徑和超時時間。ln s dev null mysql history 指定日誌檔案到黑洞,日誌檔案在使用者家目錄下,名字是.mys...
MySQL簡單的優化
最近在看mysql的優化,就做了下筆記,就當給自己一次理論知識上的提公升 通過不同的方式達到提高資料庫效能的目的。優化包括多個方面,比如查詢速度 更新速度 mysql伺服器效能等分析查詢語句 desc 查詢語句 1 select type 查詢語句的型別。表示簡單查詢 primary 表示主查詢 u...
mysql簡單優化思路
作為開發人員,資料庫知識掌握的可能不是很深入,但是一些基本的技能還是要有時間學習一下的。作為乙個資料庫菜鳥,厚著臉皮來總結一下 mysql 的基本的不能再基本的優化方法。為了更好的說明,我假想出來了乙個業務場景,可能在實際業務中並不存在這樣的場景,只為舉例說明問題 統計出年齡大於 30 歲,性別為女...