欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

慢sql提前分析預(yù)警和動(dòng)態(tài)sql替換-Mybatis-SQL

 更新時(shí)間:2025年05月02日 15:56:45   作者:京東云開發(fā)者  
為防止慢SQL問題而開發(fā)的MyBatis組件,該組件能夠在開發(fā)、測(cè)試階段自動(dòng)分析SQL語句,并在出現(xiàn)慢SQL問題時(shí)通過Ducc配置實(shí)現(xiàn)動(dòng)態(tài)替換,從而快速止損

背景

大促備戰(zhàn),最大的隱患項(xiàng)之一就是慢sql,帶來的破壞性最大,也是日常工作中經(jīng)常帶來整個(gè)應(yīng)用抖動(dòng)的最大隱患,而且對(duì)sql好壞的評(píng)估有一定的技術(shù)要求,有一些缺乏經(jīng)驗(yàn)或者因?yàn)椴粔蜃屑?xì)造成一個(gè)壞的sql成功走到了線上,等發(fā)現(xiàn)的時(shí)候要么是造成了線上影響、報(bào)警、或者后置的慢sql采集發(fā)現(xiàn),這時(shí)候一般無法快速止損,需要修改代碼上線、或者調(diào)整數(shù)據(jù)庫索引。

核心痛點(diǎn):

1、無法提前發(fā)現(xiàn)慢sql,可能惡化為慢sql的語句

2、線上出現(xiàn)慢sql后,無法快速止損

解決思路

1、把問題解決在上線之前,最好的辦法就是在測(cè)試階段,甚至在開發(fā)階段就發(fā)現(xiàn)一個(gè)sql的好壞

2、線上發(fā)現(xiàn)慢sql后除了改代碼上線、調(diào)整數(shù)據(jù)庫表索引的方式外,支持熱更新的方式替換sql語句。

部門內(nèi)部,目前大部分?jǐn)?shù)據(jù)庫框架采用的mybatis,然后基于mybatis本身的實(shí)現(xiàn)機(jī)制中,開發(fā)一個(gè)mybatis組件,可以自動(dòng)對(duì)運(yùn)行的sql進(jìn)行提取和分析,定制一套默認(rèn)的分析規(guī)則,讓sql在開發(fā)環(huán)境和測(cè)試環(huán)境執(zhí)行的時(shí)候,就能夠做初步的評(píng)估,把有問題的慢sql在這個(gè)階段暴露出來;同時(shí)具備sql替換功能,在線上出現(xiàn)問題sql的時(shí)候,可以通過ducc配置快速完成對(duì)一個(gè)sql的在線替換,大大降低線上問題的止損時(shí)間。

開源方案調(diào)研

目前,主流的sql分析組件,核心功能主要放在了兩個(gè)方向:1、慢sql的分析和優(yōu)化建議 2、sql的優(yōu)化重寫功能,而且主要偏運(yùn)維的輔助功能無法做到無侵入的和應(yīng)用代碼進(jìn)行集成。也就無法實(shí)現(xiàn)我們的核心痛點(diǎn),慢sql提前分析預(yù)警和動(dòng)態(tài)sql替換。

Mybatis-SQL分析組件 | 京東云技術(shù)團(tuán)隊(duì)_sql語句

設(shè)計(jì)方案

核心功能:SQL分析預(yù)警能力、SQL替換能力

Mybatis-SQL分析組件 | 京東云技術(shù)團(tuán)隊(duì)_自定義_02

詳細(xì)設(shè)計(jì)

主要分為8個(gè)功能模塊

模塊一:core 主要負(fù)責(zé)組件的接入到mybatis,以及其它模塊的編排調(diào)用

模塊二:config 主要負(fù)責(zé)組件配置信息的初始化

模塊三:extrat 主要通過解析mybatis 相關(guān)對(duì)象,提取完整的待執(zhí)行sql

模塊四:analysis 主要拼接分析語句,執(zhí)行explain分析語句并獲取分析結(jié)果

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

目前默認(rèn)規(guī)則(持續(xù)擴(kuò)展):

1、查詢未匹配索引

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

3、返回行數(shù)過多

4、使用了文件排序

模塊六:score 基于分析結(jié)果和配置的評(píng)分規(guī)則進(jìn)行匹配打分,優(yōu)化建議組裝

模塊七:out 輸出模塊,對(duì)于輸出結(jié)果進(jìn)行輸出,目前已error日志、MQ兩種輸出方式

模塊八:replace替換模塊,可以對(duì)sql語句基于ducc配置進(jìn)行動(dòng)態(tài)替換

使用方法

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分析功能最簡(jiǎn)配置 -->
            <property name="analysisSwitch" value="true"/>

            <!-- 開啟sql替換功能最簡(jiǎn)配置 -->
            <property name="sqlReplaceModelSwitch" value="true"/>
            <property name="duccAppName" value="workbench-backend"/>
            <property name="duccUri" value="ucc://xxxx@test.ducc.jd.local/v1/namespace/workbench_backend/config/default/profiles/test"/>
            <property name="duccMonitorKey" value="refundBugFlag"/>
        </plugin>
    </plugins>
</configuration>

3、核心配置項(xiàng)

屬性

用途

是否必填

默認(rèn)值

備注

analysisSwitch

是否開啟分析功能

false

onlyCheckOnce

是否對(duì)一個(gè)sqlid只分析一次

true

checkInterval

每個(gè)sqlid分析間隔

300000毫秒

onlyCheckOnce 為false才生效

exceptSqlIds

需要過濾不分析的sqlid

sqlType

分析的sql類型

默認(rèn)select、update

支持

scoreRuleLoadClass

評(píng)分規(guī)則加載器,用于擴(kuò)展自定義規(guī)則

outModel

默認(rèn)輸出方式

默認(rèn)值:LOG

支持LOG、MQ兩種方式

outputClass

評(píng)分結(jié)果輸出類,用于擴(kuò)展自定義結(jié)果輸出方式

sqlReplaceModelSwitch

sql替換模塊是否開啟

默認(rèn) false

duccAppName

ducc配置的應(yīng)用名稱(jdos)

duccUri

ducc uri配置

duccMonitorKey

sql替換配置文件對(duì)應(yīng)的key

4、默認(rèn)分析效果展示

1、慢sql分析效果

Mybatis-SQL分析組件 | 京東云技術(shù)團(tuán)隊(duì)_sql_03

2、sql動(dòng)態(tài)替換效果

5、實(shí)踐使用方案

1、慢sql分析-日志輸出+關(guān)鍵詞告警

<configuration>
    <plugins>
        <plugin interceptor="com.jd.sql.analysis.core.SqlAnalysisAspect" >
            <property name="analysisSwitch" value="true"/>
        </plugin>
    </plugins>
</configuration>

2、慢sql分析-日志輸出+mq輸出+es存儲(chǔ)+Kibana分析

<configuration>
    <plugins>
        <plugin interceptor="com.jd.sql.analysis.core.SqlAnalysisAspect" >
            <property name="appName" value="workbench-backend"/>
            <property name="analysisSwitch" value="true"/>
            <property name="outputModel" value="mq"/>
            <property name="mqApp" value="qlstation"/>
            <property name="mqUser" value="xxx"/>
            <property name="mqPassword" value="xxx"/>
            <property name="mqAddress" value="jmq-testcluster.jd.local:50088"/>
            <property name="mqTopic" value="jdl_kds_key_node_log"/>
        </plugin>
    </plugins>
</configuration>

最終效果

Mybatis-SQL分析組件 | 京東云技術(shù)團(tuán)隊(duì)_sql語句_04

3、慢sql替換-ducc配置動(dòng)態(tài)更新sql語句

<configuration>
    <plugins>
        <plugin interceptor="com.jd.sql.analysis.core.SqlAnalysisAspect" >
            <property name="sqlReplaceModelSwitch" value="true"/>
            <property name="duccAppName" value="workbench-backend"/>
            <property name="duccUri" value="ucc://xxx/v1/namespace/workbench_backend/config/default/profiles/test"/>
            <property name="duccMonitorKey" value="sqlReplaceConfig"/>
        </plugin>
    </plugins>
</configuration>

發(fā)現(xiàn)慢sql

Mybatis-SQL分析組件 | 京東云技術(shù)團(tuán)隊(duì)_sql語句_05

ducc配置

Mybatis-SQL分析組件 | 京東云技術(shù)團(tuán)隊(duì)_mybatis_06

線上sql被動(dòng)態(tài)替換

Mybatis-SQL分析組件 | 京東云技術(shù)團(tuán)隊(duì)_sql_07

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

性能測(cè)試

測(cè)試環(huán)境千次普通sql查詢,每種場(chǎng)景進(jìn)行了5次測(cè)試

未啟用插件耗時(shí):11108ms,10237ms,9482ms,7938ms,8196ms

開啟sql分析耗時(shí):16619ms,17333ms,16321ms,19057ms,18164ms

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

開啟sql替換耗時(shí):10642ms,8803ms,8353ms,8830ms,9170ms

基本無影響

適用場(chǎng)景

1、慢sql預(yù)防

2、線上問題止損

優(yōu)勢(shì)

1、核心優(yōu)勢(shì):執(zhí)行時(shí)分析sql,區(qū)別于傳統(tǒng)的依賴sql執(zhí)行耗時(shí)來評(píng)估慢sql,直接基于語法和索引進(jìn)行前置分析,不僅能預(yù)防某些壞sql在上線后發(fā)現(xiàn)是慢sql,還能給出sql優(yōu)化建議,可以大限度的避免線上產(chǎn)生慢sql。支持動(dòng)態(tài)對(duì)線上sql進(jìn)行替換,可以對(duì)線上問題快速止損。

2、性能:基于性能和不同的使用場(chǎng)景考慮,支持定制化配置,每個(gè)sql是否僅進(jìn)行一次檢查、或者按某個(gè)時(shí)間間隔進(jìn)行配置。sql替換幾乎無損耗。

3、擴(kuò)展:基于后續(xù)sql評(píng)分規(guī)則的擴(kuò)展、以及分析結(jié)果以不同的方式輸出的考慮,支持評(píng)分規(guī)則、輸出方式的自定義擴(kuò)展。

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

總結(jié)

到此這篇關(guān)于慢sql提前分析預(yù)警和動(dòng)態(tài)sql替換-Mybatis-SQL的文章就介紹到這了,更多相關(guān)Mybatis-SQL分析預(yù)警慢sql內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • JavaWeb的監(jiān)聽器和過濾器你了解嗎

    JavaWeb的監(jiān)聽器和過濾器你了解嗎

    這篇文章主要為大家詳細(xì)介紹了JavaWeb的監(jiān)聽器和過濾器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • SpringMVC集成FastJson使用流程詳解

    SpringMVC集成FastJson使用流程詳解

    如果你使用 Spring MVC 來構(gòu)建 Web 應(yīng)用并對(duì)性能有較高的要求的話,可以使用 Fastjson 提供的FastJsonHttpMessageConverter 來替換 Spring MVC 默認(rèn)的 HttpMessageConverter 以提高 @RestController @ResponseBody @RequestBody 注解的 JSON序列化速度
    2023-02-02
  • java中Date日期類型的大小比較方式

    java中Date日期類型的大小比較方式

    這篇文章主要介紹了java中Date日期類型的大小比較方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Spring實(shí)戰(zhàn)之方法級(jí)別緩存用法示例

    Spring實(shí)戰(zhàn)之方法級(jí)別緩存用法示例

    這篇文章主要介紹了Spring實(shí)戰(zhàn)之方法級(jí)別緩存用法,結(jié)合實(shí)例形式分析了spring方法級(jí)別緩存配置、屬性文件、領(lǐng)域模型及相關(guān)使用技巧,需要的朋友可以參考下
    2020-01-01
  • MyBatis入門之增刪改查+數(shù)據(jù)庫字段和實(shí)體字段不一致問題處理方法

    MyBatis入門之增刪改查+數(shù)據(jù)庫字段和實(shí)體字段不一致問題處理方法

    這篇文章主要介紹了MyBatis入門之增刪改查+數(shù)據(jù)庫字段和實(shí)體字段不一致問題處理方法,需要的朋友可以參考下
    2017-05-05
  • MyBatis源碼解析——獲取SqlSessionFactory方式

    MyBatis源碼解析——獲取SqlSessionFactory方式

    這篇文章主要介紹了MyBatis源碼解析——獲取SqlSessionFactory方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java中HashMap的原理分析

    java中HashMap的原理分析

    HashMap在Java開發(fā)中有著非常重要的角色地位,每一個(gè)Java程序員都應(yīng)該了解HashMap。詳細(xì)地闡述HashMap中的幾個(gè)概念,并深入探討HashMap的內(nèi)部結(jié)構(gòu)和實(shí)現(xiàn)細(xì)節(jié),討論HashMap的性能問題
    2016-03-03
  • Spring線程池ThreadPoolExecutor配置并且得到任務(wù)執(zhí)行的結(jié)果

    Spring線程池ThreadPoolExecutor配置并且得到任務(wù)執(zhí)行的結(jié)果

    今天小編就為大家分享一篇關(guān)于Spring線程池ThreadPoolExecutor配置并且得到任務(wù)執(zhí)行的結(jié)果,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Intellij IDEA 2018配置Java運(yùn)行環(huán)境的方法步驟

    Intellij IDEA 2018配置Java運(yùn)行環(huán)境的方法步驟

    這篇文章主要介紹了Intellij IDEA 2018配置Java運(yùn)行環(huán)境的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • IntelliJ IDEA下自動(dòng)生成Hibernate映射文件以及實(shí)體類

    IntelliJ IDEA下自動(dòng)生成Hibernate映射文件以及實(shí)體類

    這篇文章主要介紹了IntelliJ IDEA下自動(dòng)生成Hibernate映射文件以及實(shí)體類,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11

最新評(píng)論