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