數據庫優化之實例和故事

數據庫優化之實例和故事數據庫

簡要:每一項技術都離不開數據庫,數據庫猶如人的大腦;密不可分,一旦出了問題(故障),停頓,卡主後果可想而知;潛心學習數據庫優化3個月,如今將學到的經驗分享給你們,但願可以跟各位PHP大神分享和學習探索,若是有不對或者好的建議告知下; ~

1、合理時間備份數據

備份數據,是每一個項目維護的平常工做;有利於數據在系統遭受破壞或其餘特定狀況下,從新加以利用的一個過程;項目的備份時間,大都是根據項目需求來決定,好比:每小時,指定時間等; 

 案例: 某個項目正進行大型活動,數據庫因爲巨大用戶量的訪問以及定時備份;形成帶寬出現峯值,大量執行操做處於隊列狀態,導致數據庫中止工做;後端

 方法:分佈式

  1. 若拓撲結構單一結構(單臺數據庫),中止定時任務(備份);
  2. 若拓撲結構非單一結構(主從/分佈式),可中止定時任務;或主(數據庫)放棄執行定時任務,從(數據庫)執行;

2、避免對大表操做

何謂大表,是指記錄行數巨大,單標超過千萬行;表數據文件巨大,表數據文件超過10G;

(1) 慢查詢
很難在必定時間內過濾出所須要的數據,緣由:來源少->區分度低->大量磁盤IO->下降磁盤效率->大量慢查詢學習

(2)大表對DDL操做優化

 - 創建索引須要很長的時間,過程可能會形成:主從延遲、鎖表甚至於形成死鎖blog

 - 修改表結構須要長時間鎖表,過程可能會形成:主從延遲,鎖表,阻塞索引

方法:
 1. 分庫分表
 2. 數據歸檔:減小先後端業務影響隊列

大事務

大事務,運行時間比較長,操做的數據比較多的事務

(1)風險事務

  • 鎖定太多數據,形成大量的阻塞
  • 回滾時間比較長
  • 執行時間長,容易形成主從延遲

(2)方法get

  • 避免一次處理太多的數據(增刪改查)
  • 移除沒必要要在事務中的select操做

做者:不動峯
博客園: http://www.cnblogs.com/mylly/ 版權全部,歡迎保留原文連接進行轉載:)
相關文章
相關標籤/搜索