1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        SQL 調(diào)優(yōu)三板斧,拿好拿穩(wěn)了!

        共 1895字,需瀏覽 4分鐘

         ·

        2020-07-27 19:19

        Java技術(shù)棧

        www.javastack.cn

        關(guān)注閱讀更多優(yōu)質(zhì)文章



        前言


        這么多年的風(fēng)里雨里多少有些技術(shù)上的技巧可以分享給大家。還記得有個(gè)曾經(jīng)抖落過(guò)一段小插曲嗎,發(fā)生在網(wǎng)管裝機(jī)那個(gè)時(shí)代。


        裝機(jī)對(duì)于那個(gè)年代來(lái)說(shuō),其實(shí)沒(méi)有太大的懸念。但外行看著還是覺(jué)得很高深。我們拿出螺絲刀,把風(fēng)扇,CPU,內(nèi)存,硬盤拔下來(lái)的瞬間,大家都是覺(jué)得不可思議的。我能感覺(jué)到他們的心疼,畢竟一臺(tái)PC還要7,8000的時(shí)候,被我這么折騰,還是心有余悸。


        但是我們老手都知道,洗手,拆箱,插拔,只要不帶電操作,安全得很。甚至只要聽(tīng)到BIOS(年輕人估計(jì)都不知道了吧)的三長(zhǎng)兩短聲,立馬可辨,是內(nèi)存,還是硬盤有問(wèn)題了。拆裝到位,一擊即中。


        上面是硬件部分的維護(hù),那到軟件部分怎么樣呢?網(wǎng)上不去,軟件卡了,黑屏,藍(lán)屏?套路與硬件故障排除一樣,重插網(wǎng)線,重啟電腦(萬(wàn)惡的Windows 98),卸載軟件重裝,最后萬(wàn)靈的一招,PE重裝系統(tǒng),Ghost 備份!


        現(xiàn)專注于數(shù)據(jù)庫(kù)開(kāi)發(fā)了,碰到性能有問(wèn)題,其實(shí)和硬件故障排除并沒(méi)有多大區(qū)別,也有個(gè)套路。



        第一板斧



        跟上不了網(wǎng)一樣,第一件事情,大家會(huì)做什么?對(duì),就是檢查網(wǎng)線。


        SQL查詢太慢,你會(huì)做什么?肯定不是去看網(wǎng)線了,網(wǎng)線一斷,你的SQL直接報(bào)timeout錯(cuò)誤了,根本不給你往下執(zhí)行的機(jī)會(huì)。


        SQL查詢太慢,我們要做的事情當(dāng)然是去檢查,當(dāng)前的SQL是不是在跑?還是在等CPU中央司令員給你機(jī)會(huì)去跑。數(shù)據(jù)庫(kù)有自己的任務(wù)分配系統(tǒng),如果你的線程級(jí)別比較低,分配系統(tǒng)就不給你機(jī)會(huì)去執(zhí)行,那也白搭。那就只能等著了。


        同學(xué)可能不知道為什么要等待,而不是發(fā)完SQL就立即執(zhí)行這個(gè)概念!


        舉例,如果我們的數(shù)據(jù)庫(kù)有分布式的應(yīng)用,比如讀寫(xiě)分離,那么在系統(tǒng)正在執(zhí)行讀寫(xiě)分離的時(shí)候,會(huì)有大量的任務(wù)在跑,而且級(jí)別較高,占用的服務(wù)器資源就會(huì)很多,比如高CPU,高內(nèi)存,高IO.這個(gè)時(shí)候,任何的查詢都會(huì)被掛起,只有等待CPU/Memory/io的分配,才能 運(yùn)行。




        第二板斧


        平時(shí)大家都是寫(xiě) CRUD 的任務(wù)多,很少有人會(huì)去看數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼。所以很多細(xì)節(jié)不會(huì)清楚。但很多廠商為我們做好了可以瞥一眼神秘的數(shù)據(jù)庫(kù)引擎實(shí)現(xiàn)的地方,那就是 execution plan(執(zhí)行計(jì)劃).?


        在執(zhí)行計(jì)劃中,我們可以看到數(shù)據(jù)到底存儲(chǔ)在哪個(gè)硬盤位置,內(nèi)核是如何讀取這些硬盤位置的數(shù)據(jù),數(shù)據(jù)加載到內(nèi)存后,又經(jīng)過(guò)什么算法來(lái)得到我們想要的計(jì)算結(jié)果。



        第三板斧


        第三板斧,有些深入細(xì)節(jié)了。運(yùn)行時(shí)統(tǒng)計(jì)信息的采樣分析。


        我們從IBM的論文中,可以得到這么個(gè)啟示。很多引擎的算法都得益于采集到的元數(shù)據(jù)統(tǒng)計(jì)信息。基于這些信息,引擎會(huì)自動(dòng)選擇最優(yōu)的算法。


        比如一張表的Country字段(存儲(chǔ)國(guó)家信息),經(jīng)過(guò)統(tǒng)計(jì),只有3個(gè)國(guó)家,中國(guó),美國(guó),歐盟。其中包含中國(guó)的記錄數(shù)占據(jù)了85%的數(shù)據(jù),而其他兩國(guó)都只有7%,8%的數(shù)據(jù)。


        如果有查詢需要查詢包含中國(guó)相關(guān)的數(shù)據(jù),那么采用全表/全索引掃描的方式會(huì)快很多,因?yàn)榛乇磉@部分(如果不知道回表,可以往前翻翻我的文章)的成本就被極大的節(jié)約了。一旦查詢其他兩國(guó),那么使用索引搜索更快。你發(fā)現(xiàn)某個(gè)查詢?cè)诓樵儼袊?guó)相關(guān)數(shù)據(jù)時(shí),執(zhí)行計(jì)劃走的是 index seek, 你就可以幫執(zhí)行計(jì)劃調(diào)整成 index scan 或者table scan了。(同樣,如果不知道怎么調(diào)執(zhí)行計(jì)劃,可以翻翻我之前的文章)



        結(jié)尾


        總結(jié)下來(lái),就是檢查等待,分析執(zhí)行計(jì)劃,運(yùn)行時(shí)統(tǒng)計(jì)信息采集。如果能從這三個(gè)方面去分段調(diào)試,肯定能找到80%的性能問(wèn)題。那么,找到問(wèn)題等于解決了問(wèn)題嗎?肯定不是的。

        最近熱文:
        1、盤點(diǎn) 6 個(gè)被淘汰的 Java 技術(shù),曾經(jīng)風(fēng)光過(guò)!
        2、Spring Boot 如何快速集成 Redis?
        3、Spring Boot Redis 實(shí)現(xiàn)分布式鎖,真香!
        4、Mybatis 框架 SQL 注入攻擊的 3 種方式!
        5、Java 14 祭出神器,Lombok 被干掉了?
        6、Java 14 祭出增強(qiáng)版 switch,真香??!
        7、Spring Boot 2.3 優(yōu)雅關(guān)閉新姿勢(shì),真香!
        8、Spring Boot 干掉了 Maven 擁抱 Gradle!
        9、公司來(lái)了個(gè)新同事不會(huì)用 Lombok!
        10、Spring Cloud 2020 版本重大變革!
        掃碼關(guān)注Java技術(shù)棧公眾號(hào)閱讀更多干貨。

        點(diǎn)擊「閱讀原文」獲取面試題大全~

        瀏覽 76
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            日韩精品一区二区三 | 亚洲电影av | 三区视频在线播放 | 欧美午夜免费影院 | 免费高清无码视频在线观看 | 男生的j插入女生的p | 中文无码成人免费视频在线观看 | 中国一级操逼视频 | 美女日b视频 | 另类视频专区 |