標籤:mysql
MySQL資料庫多種最佳化方案
1、硬體最佳化(物理機)
a、CPU 8~16顆CPU ,2~4顆
b、mem 96G~128G,3~4個執行個體。 32~64G記憶體,2個執行個體
c、disk 數量越多越好,效能上:SSD (高並發)> SAS(普通) > sata (線下)
4塊盤為例:RAID0 > RAID10 > RAID5> RAID1
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。用戶端存取控制。防患於未然
以上摘自老男孩視頻
本文出自 “用心做事” 部落格,請務必保留此出處http://amyhehe.blog.51cto.com/9406021/1700262
MySQL資料庫多種最佳化方案