1、影響MySql性能的幾個因素(筆記)

影響MySql性能的幾大因素

  1. SQL語句執行效率低;
  2. 配置未優化;
  3. 表設計不合理;
  4. CPU或內存瓶頸;
  5. 磁盤I/O瓶頸;
  6. 網卡流量瓶頸;
  7. 大型事務操做;

SQL語句執行效率低下

效率的指標是QPS和TPS。數據庫

若是一條查詢的SQL語句執行一次耗時是10ms的話,那麼理論上每秒能執行100次,這時理論上應該是QPS≤100的。緩存

若是一條查詢的SQL語句執行一次耗時是100ms的話,那麼理論上每秒能執行10次,這時理論上應該是QPS≤10的。服務器

MySql默認的鏈接數是100個,若是查詢的請求過多,執行速度慢的話(QPS≤10),會形成鏈接數耗盡,緣由在於大量的鏈接在等待。網絡

配置未優化

配置的優化這裏,就像上面提到的默認的鏈接數,根據軟件的需求來合理的調整配置是很是重要的。性能

表設計不合理

就一些大公司的經驗來看,單表大於一千萬行,或者大於10G都屬於大表範圍,大表會帶來的問題以下:優化

  1. 慢查詢;
  2. 執行DDL等操做,或添加索引等耗時很長;
  3. 修改表結構會形成鎖表,從而致使主從延遲,若是主庫請求阻塞會形成鏈接數猛增,致使沒法獲取數據庫鏈接;

解決方法:spa

  1. 能夠選擇分庫分表,可是要選擇好分片的主鍵,而且準備好分區查詢和統計帶來的複雜度;
  2. 能夠選擇將大表的歷史數據歸檔到歷史表,業務表中只保存短時間內的業務數據;

CPU或內存瓶頸

若是不是由於異常狀況致使CPU使用率耗盡,或者內存空間不足,則須要考慮提高服務器的硬件配置。設計

磁盤I/O瓶頸

要謹慎的在數據庫服務器上執行復雜的計劃任務,複雜的計劃任務可能會帶來大量的磁盤I/O操做,從而致使磁盤I/O打到瓶頸。例如在某些大量用戶線上活動時,最好先暫停那些耗費性能的計劃任務(統計,備份,清理等等)。索引

網卡流量瓶頸

目前服務器的網卡大小大可能是千兆網卡,千兆指的是小b,若是換算成大B能夠約等於100MB,在數據庫服務器上要減小帶來大量網絡傳輸的事件,例如:事件

  1. 減小從服務器的數量,變量減小了數據同步帶來的網絡傳輸消耗;
  2. 減小select *這種SQL查詢操做;
  3. 能夠加入分級緩存機制,避免單級緩存雪崩,形成大量的讀操做,佔滿帶寬;

大型事務操做

事務的特性是A(原子性)C(一致性)I(隔離性)D(持久性)。

其中,隔離性有幾種隔離級別:

  1. 讀未提交,會形成髒讀;
  2. 讀已提交,會形成不可重複度;
  3. 可重複讀,會形成幻讀,MySql默認的隔離界別;
  4. 序列化;

大事務是指,運行時間長的,操做事務較多的執行任務,這會帶來一些風險:

  1. 事務會形成鎖定數據,有可能形成大量鏈接阻塞或執行超時;
  2. 若是事務失敗,回滾的時間會很是長;
  3. 會形成主從延遲的同步;

對於這種狀況,也有一些解決方法:

  1. 對於大量的數據,能夠分批次執行數據處理;
  2. 檢查事務中的SQL語句,看看是否有沒必要要的SELECT操做;
相關文章
相關標籤/搜索