MySQL數據庫多種優化方案

硬件優化(物理機)

  • 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
複製代碼
  • 慢查詢日誌分析工具 -- mysqlsla ,
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的筆記。

相關文章
相關標籤/搜索