####問:影響mysql性能的因素有哪些?
答:
前3者均可通過更換更好的硬盤解決,日常工作中主要通過優化 4-11 這些點來提高服務性能。
但第6點也不是絕對的,比如該表只是記錄日誌,幾乎沒有 update 和 delete 操作,就算超過千萬行數據,對業務影響也不大。
####問:硬件影響性能的方面?
答:
一般來說:對於讀寫比較頻繁的,適合選擇RAID10。對於不頻繁的,比如從庫,可以選擇RAID 0 或者 RAID 5,但要小心 RAID 5 出現磁盤損壞後,帶來 IO 大幅下降,所帶來主從大幅延遲問題。
####問:操作系統對db性能的影響?
答:在選擇操作系統時,要選擇專爲 服務器 設計的版本,而不是桌面版本
下面列舉一些 centos 系統影響db的部分參數:
net.core.somaxconn = 65535
決定最大監聽隊列的長度(tcp連接)
這參數系統默認很小,對於負載大的服務器來說不夠,一般來說設置成2048
*
以上3個主要用於加快tcp連接的回收
*
決定tcp連接 接收和發送 緩衝區大小的默認值和最大值,對於db服務器來說,應該把這幾個參數調整大點
*
用於減少失效連接tcp 所佔用的系統資源,加快資源回收的效率
*
####問:文件系統對性能的影響?
EXT3,EXT4,XFS都是有日誌功能的,日誌功能對日誌的安全性非常重要,更適合db,傳聞XFS性能更高,所以建議使用XFS文件系統
####問:mysql表設計哪些會對性能造成不好的影響?
答
####問:大表對性能的影響?
答:
建立索引需要較長時間
(mysql5.5之前版本建立索引會鎖表,5.5之後不會鎖表但會造成較大主從延遲)
修改表結構會造成長時間的鎖表
問:如何優化?
答:1. 分庫分表; 2. 歷史數據歸檔
分庫分表難度在於分表主鍵的選擇和分表後數據的跨分區查詢和統計。
比如 分表後,如果數據不能比較平均的分佈,還是主要集中在那幾個表,這樣對業務性能的提升並不高,反而還會增加查詢統計的難度。
歷史數據歸檔:將部分數據歸檔到另外的數據數
比如 日誌數據,可以選擇在一個月後將數據歸檔到另一個數據庫
比如 訂單數據,可以選擇一年後的數據歸檔到另一個數據庫
另外,核心數據庫 和 歸檔數據庫 可以放在不同的服務器,減少 核心服務器 的壓力
再在前端增加一個歷史記錄查詢的接口,方便統計人員統計。對後端人員來說,已經歸檔的訂單,一般都是正常完成交易的訂單,對後端的統計也沒什麼影響。
難度在於歸檔操作時,需要將數據剪切到另外的數據庫,操作的數據量教大,有難度,輕則產生主從延遲,重則影響主業務的使用
####問:大事務的影響?
答:鎖定太多的數據,造成大量的阻塞和鎖超時,回滾時所需時間比較長,造成主從延遲。
優化方法是避免一次處理太多數據,另外移出不必要在事務中的 select 操作
####總結:
在日常工作中,一般優化 db 性能的順序如下