1.影響mysql性能的因素

問:影響mysql性能的因素有哪些?

答:

  1. 服務器硬件
  2. 磁盤io
  3. 網(wǎng)卡流量
  4. 操作系統(tǒng)(32位,64位,系統(tǒng)不同性能不同,另外操作系統(tǒng)的一些參數(shù)也會影響db性能)
  5. mysql存儲引擎(一主多從,兩主多從等等)
  6. mysql架構設計( innodb,myisam,archive 等等)
  7. mysql表格設計(影響挺大)
  8. 日志文件格式(二進制日志格式,基于段的格式STATEMENT,基于行的格式ROW)
  9. sql查詢速度(慢查詢,工作中這個接觸較多)
  10. 大事務(運行時間長,或操作數(shù)據(jù)量大)
  11. 大表(記錄行數(shù)巨大,單表超過千萬行?;虮砦募薮螅^10G)

前3者均可通過更換更好的硬盤解決,日常工作中主要通過優(yōu)化 4-11 這些點來提高服務性能。
但第6點也不是絕對的,比如該表只是記錄日志,幾乎沒有 update 和 delete 操作,就算超過千萬行數(shù)據(jù),對業(yè)務影響也不大。



問:硬件影響性能的方面?

答:

  1. 硬盤(機械,固態(tài))
  2. 內(nèi)存
  3. RAID等級

一般來說:對于讀寫比較頻繁的,適合選擇RAID10。對于不頻繁的,比如從庫,可以選擇RAID 0 或者 RAID 5,但要小心 RAID 5 出現(xiàn)磁盤損壞后,帶來 IO 大幅下降,所帶來主從大幅延遲問題。



問:操作系統(tǒng)對db性能的影響?

答:在選擇操作系統(tǒng)時,要選擇專為 服務器 設計的版本,而不是桌面版本

下面列舉一些 centos 系統(tǒng)影響db的部分參數(shù):

net.core.somaxconn = 65535
決定最大監(jiān)聽隊列的長度(tcp連接)
這參數(shù)系統(tǒng)默認很小,對于負載大的服務器來說不夠,一般來說設置成2048

以上3個主要用于加快tcp連接的回收

決定tcp連接 接收和發(fā)送 緩沖區(qū)大小的默認值和最大值,對于db服務器來說,應該把這幾個參數(shù)調整大點

用于減少失效連接tcp 所占用的系統(tǒng)資源,加快資源回收的效率



問:文件系統(tǒng)對性能的影響?

EXT3,EXT4,XFS都是有日志功能的,日志功能對日志的安全性非常重要,更適合db,傳聞XFS性能更高,所以建議使用XFS文件系統(tǒng)



問:mysql表設計哪些會對性能造成不好的影響?

  1. 過度的反范式化為表建立太多的列
  2. 過分的范式化造成太多的表關聯(lián)
  3. 在OLTP環(huán)境中使用不恰當?shù)姆謪^(qū)表
  4. 使用外鍵保證數(shù)據(jù)的完成性


問:大表對性能的影響?

答:
建立索引需要較長時間
(mysql5.5之前版本建立索引會鎖表,5.5之后不會鎖表但會造成較大主從延遲)
修改表結構會造成長時間的鎖表

問:如何優(yōu)化?
答:1. 分庫分表; 2. 歷史數(shù)據(jù)歸檔

分庫分表難度在于分表主鍵的選擇和分表后數(shù)據(jù)的跨分區(qū)查詢和統(tǒng)計。
比如 分表后,如果數(shù)據(jù)不能比較平均的分布,還是主要集中在那幾個表,這樣對業(yè)務性能的提升并不高,反而還會增加查詢統(tǒng)計的難度。

歷史數(shù)據(jù)歸檔:將部分數(shù)據(jù)歸檔到另外的數(shù)據(jù)數(shù)
比如 日志數(shù)據(jù),可以選擇在一個月后將數(shù)據(jù)歸檔到另一個數(shù)據(jù)庫
比如 訂單數(shù)據(jù),可以選擇一年后的數(shù)據(jù)歸檔到另一個數(shù)據(jù)庫
另外,核心數(shù)據(jù)庫歸檔數(shù)據(jù)庫 可以放在不同的服務器,減少 核心服務器 的壓力
再在前端增加一個歷史記錄查詢的接口,方便統(tǒng)計人員統(tǒng)計。對后端人員來說,已經(jīng)歸檔的訂單,一般都是正常完成交易的訂單,對后端的統(tǒng)計也沒什么影響。
難度在于歸檔操作時,需要將數(shù)據(jù)剪切到另外的數(shù)據(jù)庫,操作的數(shù)據(jù)量教大,有難度,輕則產(chǎn)生主從延遲,重則影響主業(yè)務的使用



問:大事務的影響?

答:鎖定太多的數(shù)據(jù),造成大量的阻塞和鎖超時,回滾時所需時間比較長,造成主從延遲。

優(yōu)化方法是避免一次處理太多數(shù)據(jù),另外移出不必要在事務中的 select 操作



總結:

在日常工作中,一般優(yōu)化 db 性能的順序如下

  1. 數(shù)據(jù)庫表結構設計和 sql 語句
  2. 數(shù)據(jù)庫 存儲引擎 的選擇和 參數(shù)配置
  3. 系統(tǒng)選擇 及 優(yōu)化
  4. 硬件升級
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容