坑!火山引擎雲資料庫 MySQL 版節點記憶體只增不減

凌雨尘發表於2024-08-17

火山引擎雲資料庫說明

文件

什麼是雲資料庫 MySQL 版?

雲資料庫 MySQL 版是火山引擎基於開源資料庫 MySQL 打造的彈性、可靠的線上關係型資料庫服務。 MySQL 例項使用雲原生方式部署,結合本地 SSD 儲存型別,提供高效能讀寫能力;完全相容 MySQL 引擎,並提供例項管理、備份恢復、日誌管理、監控告警、資料遷移等全套解決方案,幫助企業簡化繁雜的資料庫管理和運維任務,使企業有更多的時間與資源聚焦於自己的核心業務。

高可用架構

MySQL 提供一主一備高可用架構的雙節點例項型別,在主節點出現故障後,會自動檢測並完成秒級主備切換,業務無感知,保障業務穩定性。 MySQL 提供備份能力,支援資料備份及日誌備份,支援按備份集恢復及按時間點恢復,保障資料可靠性。

讀寫分離架構

MySQL 提供一主多讀的讀寫分離架構型別,最多可支援掛載 10 個只讀節點,可根據業務需求輕鬆實現資料讀取能力的彈性擴充套件;支援讀寫分離,自動將讀請求轉發至只讀節點,分攤主節點資料讀取壓力,有效應對讀多寫少的業務場景。

核心元件

  • 主節點:主節點( Primary Node )是 MySQL 例項對外提供服務的基礎節點,其他元件依賴主節點而發揮作用。在高可用架構下,主節點接收業務的全部讀寫請求;在讀寫分離架構下,主節點接收業務的全部寫請求和部分讀請求。主節點記錄資料修改日誌,並將日誌傳送至其他節點,實現節點間資料同步。
  • 備節點:備節點( Secondary Node )是 MySQL 例項高可用架構的重要節點,保障例項的高可用性。備節點接收主節點傳送的日誌並進行重放,保證主備節點間資料一致;在主節點故障時,備節點可快速切換為主節點並對外提供服務,保障業務穩定執行。
  • 只讀節點:只讀節點( Read-Only Node )是 MySQL 例項讀寫分離架構的重要節點,負責處理只讀請求。只讀節點接收備節點或主節點的日誌並進行重放,保證只讀節點與主備節點間資料一致;在讀多寫少的場景下,可接收並處理只讀請求,分攤主節點資料讀取壓力。

起因

火山引擎的雲資料庫 MySQL 版提供了高效可靠的服務,其一主一備高可用架構和完善的備份功能保障了資料庫的穩定性和資料安全性。

不過最近在使用該產品的時候遇到了一個問題,我們發現其中有節點的記憶體居高不下,記憶體只增不減,且只有其中一個節點的記憶體出現只增不減的情況,導致一直出現告警。問題發生在主節點上,記憶體佔用率飆升至 85% 以上,而備用節點的記憶體佔用率僅為 35%

分析

剛開始的時候鬧了點小烏龍,把記憶體看成 CPU,結果一直去找慢 SQL,後面發現加上索引後還是沒解決問題,不過好在也順手修復了一個潛在的慢 SQL

運維人員發現問題並未解決後,立即將備用節點切換為主節點,但主節點的記憶體佔用率依然持續升高,並未得到釋放。

我們聯絡火山引擎運維人員協助定位問題。對方透過檢視日誌發現,MySQL 的效能模式 (Performance Schema - PSM) 功能佔用了部分記憶體。

火山引擎運維人員建議我們將控制檯中的 performance_schemaloose_rds_performance_schema 引數設定為 OFF

在將這兩個引數設定為 OFF 後,主節點的記憶體佔用率開始下降,最終恢復正常。

結論

這次事件讓我們瞭解到 PSM 功能雖然能夠提供強大的效能分析功能,但也可能佔用大量記憶體, 尤其是在長時間執行的情況下。

擴充套件

PSM 功能的介紹

Performance Schema,簡稱 PSM,是一個可選的 MySQL 模組,它可以收集有關 MySQL 伺服器效能的實時資料,包括:
  • CPU 使用率
  • 記憶體使用率
  • I/O 操作
  • 查詢執行時間

PSM 功能的優缺點

優點:
  • 效能分析:幫助理解 MySQL 效能,例如哪些 SQL 語句導致效能瓶頸,資料庫哪些資源使用較多等
  • 故障診斷:監測資料庫效能,識別問題,並幫助快速定位和解決問題
  • 最佳化設計:分析資料和效能指標,調整資料庫配置和應用程式碼,以提升效能
缺點:
  • 記憶體佔用:PSM 需要消耗一定的記憶體來儲存收集的資料。如果收集的資料量過大,可能會佔用大量的記憶體,甚至導致記憶體不足
  • 效能影響:收集效能資料本身也會佔用部分 CPU 和 I/O 資源,從而略微影響資料庫的效能

後續如何避免此情況發生

  • 合理使用 PSM:根據實際需求啟用 PSM,例如僅在必要時開啟 PSM,例如進行效能分析或故障診斷時。並在使用後及時關閉
  • 合理設定 PSM 引數:包括 collect_interval 和 max_memory_usage,控制資料收集頻率和最大記憶體佔用,避免過度消耗記憶體
  • 定期清理 PSM 資料:定期清理 performance_schema 資料庫中的資料,釋放記憶體空間
  • 監控記憶體使用:定期監控資料庫的記憶體使用情況,及時發現問題,並採取措施

對火山引擎架構特點的點評

火山引擎雲資料庫 MySQL 版的一主一備高可用架構和完善的備份功能確保了資料庫的穩定性和資料安全性。但這次事件也提醒我們需要注意 PSM 功能的潛在風險,並及時採取措施避免記憶體佔用過高。

最終建議

  • 在日常使用中,合理使用 PSM 功能,並根據實際需求設定引數
  • 定期監控資料庫效能,及時發現問題,並採取措施
  • 瞭解雲資料庫的架構特點,並根據其特點選擇合適的配置和使用方式
希望這篇文章能夠幫助你更好地瞭解 PSM 功能,並避免類似的記憶體問題。

相關文章