主頁 > 資料庫 > Mybatis-SQL分析組件

Mybatis-SQL分析組件

2023-07-07 09:02:36 資料庫

背景

大促備戰,最大的隱患項之一就是慢sql,帶來的破壞性最大,也是日常作業中經常帶來整個應用抖動的最大隱患,而且對sql好壞的評估有一定的技術要求,有一些缺乏經驗或者因為不夠仔細造成一個壞的sql成功走到了線上,等發現的時候要么是造成了線上影響、報警、或者后置的慢sql采集發現,這時候一般無法快速止損,需要修改代碼上線、或者調整資料庫索引,

核心痛點:

1、無法提前發現慢sql,可能惡化為慢sql的陳述句

2、線上出現慢sql后,無法快速止損

解決思路

1、把問題解決在上線之前,最好的辦法就是在測驗階段,甚至在開發階段就發現一個sql的好壞

2、線上發現慢sql后除了改代碼上線、調整資料庫表索引的方式外,支持熱更新的方式替換sql陳述句

部門內部,目前大部分資料庫框架采用的mybatis,然后基于mybatis本身的實作機制中,開發一個mybatis組件,可以自動對運行的sql進行提取和分析,定制一套默認的分析規則,讓sql在開發環境和測驗環境執行的時候,就能夠做初步的評估,把有問題的慢sql在這個階段暴露出來;同時具備sql替換功能,在線上出現問題sql的時候,可以通過ducc配置快速完成對一個sql的在線替換,大大降低線上問題的止損時間,

開源方案調研

目前,主流的sql分析組件,核心功能主要放在了兩個方向:1、慢sql的分析和優化建議 2、sql的優化重寫功能,而且主要偏運維的輔助功能無法做到無侵入的和應用代碼進行集成,也就無法實作我們的核心痛點,慢sql提前分析預警和動態sql替換,

設計方案

核心功能:SQL分析預警能力、SQL替換能力

詳細設計

主要分為8個功能模塊

模塊一:core 主要負責組件的接入到mybatis,以及其它模塊的編排呼叫

模塊二:config 主要負責組件配置資訊的初始化

模塊三:extrat 主要通過決議mybatis 相關物件,提取完整的待執行sql

模塊四:analysis 主要拼接分析陳述句,執行explain分析陳述句并獲取分析結果

模塊五:rule sql分析規則的加載和初始化,支持自定義規則

目前默認規則(持續擴展):

1、查詢未匹配索引

2、匹配索引過濾效果較差

3、回傳行數過多

4、使用了檔案排序

模塊六:score 基于分析結果和配置的評分規則進行匹配打分,優化建議組裝

模塊七:out 輸出模塊,對于輸出結果進行輸出,目前已error日志、MQ兩種輸出方式

模塊八:replace替換模塊,可以對sql陳述句基于ducc配置進行動態替換

使用方法

1、引入依賴jar包

<dependency>
    <groupId>com.jd.sql.analysis</groupId>
    <artifactId>sql-analysis</artifactId>
    <version>1.2-SNAPSHOT</version>
</dependency>

2、配置組件xml

<configuration>
    <plugins>
        <plugin interceptor="com.jd.sql.analysis.core.SqlAnalysisAspect" >
            <!-- 開啟sql分析功能最簡配置 -->
            <property name="analysisSwitch" value="https://www.cnblogs.com/Jcloud/archive/2023/07/06/true"/>

            <!-- 開啟sql替換功能最簡配置 -->
            <property name="sqlReplaceModelSwitch" value="https://www.cnblogs.com/Jcloud/archive/2023/07/06/true"/>
            <property name="duccAppName" value="https://www.cnblogs.com/Jcloud/archive/2023/07/06/workbench-backend"/>
            <property name="duccUri" value="ucc://workbench-backend:[email protected]/v1/namespace/workbench_backend/config/default/profiles/test?longPolling=60000&necessary=false"/>
            <property name="duccMonitorKey" value="https://www.cnblogs.com/Jcloud/archive/2023/07/06/refundBugFlag"/>
        </plugin>
    </plugins>
</configuration>

3、核心配置項

屬性 用途 是否必填 默認值 備注
analysisSwitch 是否開啟分析功能 false
onlyCheckOnce 是否對一個sqlid只分析一次 true
checkInterval 每個sqlid分析間隔 300000毫秒 onlyCheckOnce 為false才生效
exceptSqlIds 需要過濾不分析的sqlid
sqlType 分析的sql型別 默認select、update 支持
scoreRuleLoadClass 評分規則加載器,用于擴展自定義規則
outModel 默認輸出方式 默認值:LOG 支持LOG、MQ兩種方式
outputClass 評分結果輸出類,用于擴展自定義結果輸出方式
sqlReplaceModelSwitch sql替換模塊是否開啟 默認 false
duccAppName ducc配置的應用名稱(jdos)
duccUri ducc uri配置
duccMonitorKey sql替換組態檔對應的key

4、默認分析效果展示

4.1、慢sql分析效果

4.2、sql動態替換效果

5、實踐使用方案

5.1、慢sql分析-日志輸出+關鍵詞告警

<configuration>
    <plugins>
        <plugin interceptor="com.jd.sql.analysis.core.SqlAnalysisAspect" >
            <property name="analysisSwitch" value="https://www.cnblogs.com/Jcloud/archive/2023/07/06/true"/>
        </plugin>
    </plugins>
</configuration>

5.2、慢sql分析-日志輸出+mq輸出+es存盤+Kibana分析

<configuration>
    <plugins>
        <plugin interceptor="com.jd.sql.analysis.core.SqlAnalysisAspect" >
            <property name="appName" value="https://www.cnblogs.com/Jcloud/archive/2023/07/06/workbench-backend"/>
            <property name="analysisSwitch" value="https://www.cnblogs.com/Jcloud/archive/2023/07/06/true"/>
            <property name="outputModel" value="https://www.cnblogs.com/Jcloud/archive/2023/07/06/mq"/>
            <property name="mqApp" value="https://www.cnblogs.com/Jcloud/archive/2023/07/06/qlstation"/>
            <property name="mqUser" value="https://www.cnblogs.com/Jcloud/archive/2023/07/06/qlstation"/>
            <property name="mqPassword" value="https://www.cnblogs.com/Jcloud/archive/2023/07/06/D1BCC547"/>
            <property name="mqAddress" value="https://www.cnblogs.com/Jcloud/archive/2023/07/06/jmq-testcluster.jd.local:50088"/>
            <property name="mqTopic" value="https://www.cnblogs.com/Jcloud/archive/2023/07/06/jdl_kds_key_node_log"/>
        </plugin>
    </plugins>
</configuration>

最終效果

5.3、慢sql替換-ducc配置動態更新sql陳述句

<configuration>
    <plugins>
        <plugin interceptor="com.jd.sql.analysis.core.SqlAnalysisAspect" >
            <property name="sqlReplaceModelSwitch" value="https://www.cnblogs.com/Jcloud/archive/2023/07/06/true"/>
            <property name="duccAppName" value="https://www.cnblogs.com/Jcloud/archive/2023/07/06/workbench-backend"/>
            <property name="duccUri" value="ucc://workbench-backend:[email protected]/v1/namespace/workbench_backend/config/default/profiles/test?longPolling=60000&necessary=false"/>
            <property name="duccMonitorKey" value="https://www.cnblogs.com/Jcloud/archive/2023/07/06/sqlReplaceConfig"/>
        </plugin>
    </plugins>
</configuration>

發現慢sql

ducc配置

線上sql被動態替換

注意:功能正式修復后,需去掉該配置,該功能僅供應急處理線上問題,不建議作為功能長期使用

性能測驗

測驗環境千次普通sql查詢,每種場景進行了5次測驗

未啟用插件耗時:11108ms,10237ms,9482ms,7938ms,8196ms

開啟sql分析耗時:16619ms,17333ms,16321ms,19057ms,18164ms

實際配置,只有首次執行或者間隔時間執行,單次影響10ms左右)

開啟sql替換耗時:10642ms,8803ms,8353ms,8830ms,9170ms

基本無影響

適用場景

1、慢sql預防

2、線上問題止損

優勢

1、核心優勢:執行時分析sql,區別于傳統的依賴sql執行耗時來評估慢sql,直接基于語法和索引進行前置分析,不僅能預防某些壞sql在上線后發現是慢sql,還能給出sql優化建議,可以大限度的避免線上產生慢sql,支持動態對線上sql進行替換,可以對線上問題快速止損,

2、性能:基于性能和不同的使用場景考慮,支持定制化配置,每個sql是否僅進行一次檢查、或者按某個時間間隔進行配置,sql替換幾乎無損耗,

3、擴展:基于后續sql評分規則的擴展、以及分析結果以不同的方式輸出的考慮,支持評分規則、輸出方式的自定義擴展,

4、成本:接入成本低,無代碼侵入,

作者:京東物流 扈海濤

來源:京東云開發者社區

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/556757.html

標籤:其他

上一篇:Mybatis-SQL分析組件

下一篇:返回列表

標籤雲
其他(162185) Python(38266) JavaScript(25527) Java(18291) C(15238) 區塊鏈(8275) C#(7972) AI(7469) 爪哇(7425) MySQL(7290) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5876) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4613) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2438) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) HtmlCss(1992) .NET技术(1985) 功能(1967) Web開發(1951) C++(1942) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1882) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • Mybatis-SQL分析組件

    大促備戰,最大的隱患項之一就是慢sql,帶來的破壞性最大,也是日常作業中經常帶來整個應用抖動的最大隱患,而且對sql好壞的評估有一定的技術要求,有一些缺乏經驗或者因為不夠仔細造成一個壞的sql成功走到了線上,等發現的時候要么是造成了線上影響、報警、或者后置的慢sql采集發現,這時候一般無法快速止損,... ......

    uj5u.com 2023-07-07 09:02:36 more
  • Mybatis-SQL分析組件

    大促備戰,最大的隱患項之一就是慢sql,帶來的破壞性最大,也是日常作業中經常帶來整個應用抖動的最大隱患,而且對sql好壞的評估有一定的技術要求,有一些缺乏經驗或者因為不夠仔細造成一個壞的sql成功走到了線上,等發現的時候要么是造成了線上影響、報警、或者后置的慢sql采集發現,這時候一般無法快速止損,... ......

    uj5u.com 2023-07-07 08:59:55 more
  • clickhouse使用入門

    轉載請注明出處(~ ̄▽ ̄)~嚴禁用于商業目的的轉載~ 導語:同學,你也不想你根本不懂ClickHouse,卻趕鴨子上架使用的事情被其他人知道吧? 寫在前面:本文旨在讓原先有一定SQL基礎的人快速簡單了解ClickHouse的(關鍵)概念/特性,側重于使用方面的介紹比較而非原理/實作挖掘。文章算是個人 ......

    uj5u.com 2023-07-07 08:59:32 more
  • 華為云GaussDB亮相2023可信資料庫發展大會,榮獲三項評測證書!

    摘要:2023可信資料庫發展大會上,華為云資料庫服務產品部總經理蘇光牛圍繞華為云GaussDB的產品能力和實踐進行了分享 本文分享自華為云社區《華為云GaussDB亮相2023可信資料庫發展大會,榮獲三項評測證書!》,作者: GaussDB 資料庫。 近日,由中國資訊通信研究院、中國通信標準化協會指 ......

    uj5u.com 2023-07-07 08:54:03 more
  • mysql安裝zip包詳細教程

    ## 下載網址 1.MySQL官網下載壓縮版檔案,放至安裝路徑下載zip安裝包 [MySQL :: Download MySQL Community Server (Archived Versions)](https://downloads.mysql.com/archives/community/ ......

    uj5u.com 2023-07-07 08:51:35 more
  • 【技識訓累】Mysql中的SQL語言【技術篇】【二】

    博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ......

    uj5u.com 2023-07-07 08:51:25 more
  • 研產供銷資料一體化,解碼汽車集團企業的資料治理之道

    OTA(Over-The-Air,空中下載技術),是汽車使用的一種遠程無線升級技術。車主只要保持聯網的狀態,汽車就可以像手機一樣進行系統升級。OTA升級最大的好處是,不管對車輛進行常規的升級還是大面積出現軟體問題需要修復,都可以通過OTA來解決。 資料顯示,2022年中國乘用車OTA裝配量達到765 ......

    uj5u.com 2023-07-07 08:51:04 more
  • 05、etcd 讀請求執行流程

    > 本篇內容主要來源于自己學習的視頻,如有侵權,請聯系洗掉,謝謝。 ### 1、etcd讀請求概覽 etcd是典型的`讀多寫少`存盤,在我們實際業務場景中,讀一般占據2/3以上的請求。一個讀 請求從client通過`Round-robin(輪詢)`負載均衡演算法,選擇一個etcd server節點,發 ......

    uj5u.com 2023-07-06 09:17:26 more
  • es筆記三之term,match,match_phrase 等查詢方法介紹

    > 本文首發于公眾號:Hunter后端 > 原文鏈接:[es筆記三之term,match,match_phrase 等查詢方法介紹](https://mp.weixin.qq.com/s/3tzD8dEr592WNJFH_1bKRw) 首先介紹一下在 es 里有兩種存盤字串的欄位型別,一個是 ke ......

    uj5u.com 2023-07-06 09:17:16 more
  • Spark的一些重要概念

    # Shuffle的深入理解 什么是Shuffle,本意為洗牌,在資料處理領域里面,意為將數打散。 問題:shuffle一定有網路傳輸嗎?有網路傳輸的一定是Shuffle嗎? ## Shuffle的概念 通過網路將資料傳輸到多臺機器,資料被打散,但是有網路傳輸,不一定就有shuffle,Shuffl ......

    uj5u.com 2023-07-06 09:16:59 more