mysql 获取昨天凌晨_MySQL慢日志体系建设
慢查詢日志是MySQL提供的一種日志記錄,用來記錄在MySQL中響應時間超過閾值的SQL語句,在很大程度上會影響數據庫整體的性能,是MySQL優化的一個重要方向。在58的云DB平臺建設中,慢SQL系統作為一個非常重要功能模塊,不僅是DBA日常運維使用,我們也希望通過該功能可以協助開發人員更快速定位業務問題。
目前我們的慢日志系統主要包括兩個核心功能:慢日志報表和實時慢SQL。
慢日志報表主要基于上一天的所有慢SQL進行匯總分析,最后獲得慢SQL數量的變化趨勢、執行次數、執行平均時長等統計結果;
實時慢SQL就是實時獲取線上生產數據庫產生的慢SQL語句,并提供給開發人員查閱。
慢日志分析工具
MySQL的慢日志分析工具主流有官方自帶的mysqldumpslow和第三方的pt-query-digest,由于后者有更多的額外屬性和附加能力,我們的慢日志分析工具選擇使用pt-query-digest。
pt-query-digest有兩個比較好用的功能:query review和query history。在使用review功能時,會將慢日志中的查詢語句去參數化后進行分組統計,并可將結果直接保存到數據庫中。使用history時,則會將慢SQL的查詢度量(如查詢時間、鎖時間等)保存到數據庫中,這些數據將來可用于趨勢分析和查詢性能分析。
慢日志報表
我們定義的慢查詢閾值(long_query_time) 標準為0.1s,不過不同的集群可以個性化定制。為了獲取數據庫每天的慢日志報表,后臺程序會根據云DB平臺的cmdb信息,對所有的數據庫集群每天凌晨進行切割,生成一個上一整天的慢查詢日志文件,大體格式如下:
整個58集團有幾千套數據庫集群,為了整體統計所有數據庫集群的慢SQL報表,我們內部開發了一套完善的慢SQL分析流程,主要包含SQL流水計算、全局分析、診斷優化、建議推送、跟蹤反饋等各個功能模塊。
通過收集模塊收集所有集群的慢SQL文件,計算模塊消費分析每天產生的慢日志文件,并將計算結果保存到MySQL中。篩選后的數據,由云DB平臺展示,并根據慢SQL的數量排行,將topN的郵件推送給開發人員。之后開發人員可使用云DB平臺,獲取慢SQL調優建議,并可借助工單系統,自助修改表索引,達到優化的目的。
我們的處理流程的大體如下:
慢SQL分析計算流程:
? 根據數據庫集群cmdb信息,獲取需要分析慢日志的數據庫列表并進行切割;
? 通過ansible將相應的慢日志文件拉取到慢日志分析服務器;
? 通過pt-query-digest分析慢日志并將結果寫入慢SQL詳情庫;
? 在數據庫管理平臺展示相應數據;
? 調用SQLAdvisor,獲取優化建議;
核心模塊為調用pt-query-digest的分析,此處采用信息入庫的方式,結果會保存到兩個結果表tb_slowlog_review和tb_slowlog_review_history中,分析的具體命令如下:
經過流水計算后,慢SQL分析的結果信息存儲在MySQL中,之后由數據庫云平臺開發相應的功能對外展示。目前我們主要抽象了如下幾個功能:
慢SQL數量統計及優化建議
對每個集群的慢SQL總數量進行趨勢圖展示,并包括該集群下所有慢SQL的執行次數、執行平均時間等維度的排序,以及對應的慢SQL優化建議,如下圖:
單條慢SQL詳情追蹤
針對產生的每一條慢SQL給出數量趨勢統計,并會統計該慢SQL的第一次出現時間、最新一次出現時間、來源IP、所屬業務集群、負責人、執行次數等詳細信息,最大程度的協助用戶快速定位該慢SQL的來源。具體見下圖:
除了上面兩個主要的模塊外,我們還支持每日慢SQL報表郵件推送,新增慢SQL匯總統計,通過多種方式協助高效進行慢SQL的優化,提高數據庫的訪問性能。
實時慢SQL系統
慢SQL報表系統,用于分析前一日產生的慢查詢日志文件,但一個非常大缺陷是不能分析當日實時產生的慢SQL,特別對于實時的線上調優效果,非常不方便。所以為解決該問題,我們實現支持了實時慢SQL功能,開發人員可在平臺中實時查看生產環境產生的每一條慢SQL語句。我們這里引入了ELK和Kafka相關技術,實時慢SQL系統結構如下:
實時慢SQL的收集工作流程如下:
通過filebeat,實時采集慢查詢日志的文件變化;
采集到的慢日志數據實時上報到kafka中;
Logstash消費kafka中數據,并進行過濾、切割,存入ES;
云DB平臺讀取ES數據,進行數據展示
這樣在用戶端,開發人員即可所負責的MySQL集群中查看實時產生的慢SQL了:
總結
MySQL慢查詢,作為影響性能關鍵因素,應被DBA、開發人員重視,并及時處理。云DB平臺從總體報表、實時流水、定量分析等多個維度,打造MySQL慢查詢體系建設,為DBA以及開發人員提供有力支持。
總結
以上是生活随笔為你收集整理的mysql 获取昨天凌晨_MySQL慢日志体系建设的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 散户做期货的技巧,简单又有效!
- 下一篇: mysql workbench中文设置_