1. 程式人生 > >MySql 性能優化

MySql 性能優化

raid卡 finger 職位 iad 通信 png 金錢 系統 執行計劃

MySQL 憑借著出色的性能、低廉的成本、豐富的資源,已經成為絕大多數互聯網公司的首選關系型數據庫。雖然性能出色,但所謂“好馬配好鞍”,如何能夠更好的使用它,已經成為開發工程師的必修課,我們經常會從職位描述上看到諸如“精通 MySQL”、“SQL 語句優化”、“了解數據庫原理”等要求。

什麽是數據庫的性能

  • 用查詢的響應時間度量性能,性能即響應時間。
  • 優化性能,在一定工作負載下,降低查詢的響應時間。
    技術分享圖片

性能趨勢

技術分享圖片

優化方向

技術分享圖片

  • 硬件優化
  • 操作系統優化
  • MySql 配置優化
  • 表結構優化
  • 適用優化
  • 架構優化

硬件優化

垂直擴展、向上擴展,購買強悍的硬件獲取更高的性能。
技術分享圖片

  • 無論使用公有雲的RDS,還是自建MySQL,該優化方向都是代價最小的,性能優化的首選之一。
  • 時間就是金錢。
  • 人力成本遠遠大於硬件成本。

操作系統優化

  • IO 調度策略 - 操作系統與磁盤的通信方式
    技術分享圖片

  • RAID卡策略 – MegaCli工具
  • write back
  • write through
  • BUU
    技術分享圖片

  • swapness,代表權重,即使設置0也有可能會使用swap。
  • NUMA,高版本innodb_numa_interleave。
  • ulimit
    技術分享圖片

MySql 優化配置

技術分享圖片

  • innodb_buffer_pool_size
  • innodb_io_capacity
  • innodb_thread_concurrency
  • innodb_flush_log_at_trx_commit
  • sync_binlog

MySql 版本選擇

  • MySQL
  • Percona
  • MariaDB
    技術分享圖片

表結構優化

  • 最佳實踐 - bigint類型的自增主鍵。
    技術分享圖片

使用優化

  • 分類了四種在使用方面的性能問題原因以及出現場景
    技術分享圖片

使用優化之 慢查詢

  • 現象:負載增加、慢查數據量增加。
  • 解決:分析慢查日誌,優先解決掉掃描行數大的慢查。
  • 預防:
    技術分享圖片

使用優化之 並發量

  • 現象:負載陡增、QPS/TPS增加、thread_running增加。
  • 解決:架構優化,過載保護,安全防護。
  • 業務場景預防:容量壓測、業務評估,找到熱點數據、熱點操作,隔離、緩存、限流。

    使用優化之 數據量

  • 現象:負載增加,某個表慢查數量增加。
  • 解決:分析慢查日誌,定位數據量異常的表。
  • 預防:監控無索引使用的查詢。

    使用優化之 執行計劃

  • 現象:負載增加,某個id的慢查數量增加。
  • 原因:因為采樣誤差、延後,靜態模型,優化器會判斷失誤。
  • 解決:
    • 分析慢查,同一類慢查掃描行數max與min之差如果該值過大,需要註意。
    • SQL中加入提示詞,STRAIGHT_JOIN、FORCE_INDEX等。
  • 預防:避免、監控數據傾斜情況發生。

使用優化之 pt-query-digest

技術分享圖片

  • 為每類SQL生成fingerprint,很方便構建SQL指紋庫。
  • 方便做二次修改或者包一層。

架構優化

  • 演進方向
    技術分享圖片

架構優化-以秒殺為例

  • 熱點操作
    • 讀操作
    • 寫操作
    • 發現熱點數據
    • 靜態數據,可以提前預測的熱點數據。
    • 動態數據,不可預測的熱點數據。
  • 處理熱點數據的常見方法 - 緩存、限流
    技術分享圖片

總結

技術分享圖片

想要做好數據庫優化,就要先做好測量(監控)。
監控盡可能的全面(KV,事件類,日誌類),用數據說話。
技術分享圖片

分享鏈接:https://ke.qq.com/course/404589?taid=3237791161265261&tuin=1d644a5

MySql 性能優化