MySQL數據庫多種優化方案html
1、硬件優化(物理機)前端
a、CPU 8~16顆CPU ,2~4顆mysql
b、mem 96G~128G,3~4個實例。 32~64G內存,2個實例linux
c、disk 數量越多越好,性能上:SSD (高併發)> SAS(普通) > sata (線下)redis
4塊盤爲例:RAID0 > RAID10 > RAID5> RAID1sql
d、網卡,多塊網卡bond,buffer等等。內核調優能夠處理數據庫
2、軟件優化緩存
操做系統:x64,安全
軟件:mysql ,編譯安裝,編譯優化。架構
3、my.cf參數優化(優化的幅度比較小,大部分是架構及SQL語句優化)
參考:http://www.linuxyw.com/a/shujuku/20130506/216.html
http://www.ha97.com/4110.html
思想:
監控:生產參數是通常狀況下的參數
命令監控:show global status\G 而後能夠看到每一個參數用了多少,每一個緩存用了多大。經過監控慢慢調整。
調優工具:mysqlreport ,還有其餘的工具
3、SQL語句的優化
a、索引的優化
1、抓出慢SQL。讓DBA儘可能早的參與的開發裏面和開發共同討論。白名單機制
long_query_time= #
log-slow-queries= /vra/lib/mysql/slow-log
2、慢查詢日誌分析工具 -- mysqlsla ,
pt-query-digest.,mysqldumpslows,
3、天天晚上0:00定時分析慢查詢,發到核心開發,DBA分析,及高級運維,CTO郵箱。
DBA分析給出優化建議--> 核心開發確認更改--->DBA上線操做。
b、大的複雜的SQL語句的拆分爲多個小的SQL語句
子查詢,JOIN連表查詢。一張表數據太大,怎麼拆分都有問題。須要拆表,拆庫
c、數據庫是存儲數據的地方,可是不是計算數據的地方。
計算,應用類處理,都要拿到前端應用解決,禁止在數據庫上處理。
d、搜索功能,like "%51cto%" ,通常不要使用MySQL數據庫。
4、架構上的優化
a) 業務拆分: 搜索功能,like"%51cto%" ,通常不要使用MySQL數據庫。
b) 業務拆分:某些業務應用使用nosql持久化分出,例如:memcachedb.redis,ttserver.
例如:粉絲關注,好友關係等等。
c) 數據庫前端必需要加cache,例如:memcached,用戶登陸,商品查詢等等。
d) 動態的數據靜態化,整個文件靜態化,頁面片斷靜態化
e) 數據庫集羣與讀寫分離,一主多從,經過程序或者dbproxy進行集羣讀寫分離。
f) 單表查過2000萬了,拆庫拆表,不一樣的請求分到不一樣的機器上面,前面hash取模。
5、流程,制度,安全優化。
任何一次認爲數據庫記錄的更新都要走一個流程:
人的流程:開發 --> 核心開發確認 --> 運維或DBA
測試的流程:開發人員內網測試 --> IDC測試 --> 線上執行。
客戶端的管理,客戶端PHPmyadmin。客戶端訪問控制。防患於未然
以上摘自老男孩視頻