精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

從此愛上SQL Monitor!記一次反常理的鑒權查詢優化

數據庫
該案例的優化過程甚為曲折,幾近山窮水盡半途而廢。在為幾個exists弄得焦頭爛額一籌莫展之際,幸得SQL Monitor之助,方能撥開云霧,終見青天。從explain plan中,我們能得知Oracle優化器的意圖,而通過SQL Monitor,我們能獲取到運行時的很多信息,比如本案例中涉及到的“實際返回行數”、“執行次數”。

[[211727]]

一、案例

好天氣,壞SQL

金秋10月,如同陽春三月般,是一個令人難以忘懷與期待的季節。而在這個美好的季節了,我拿到了一個不怎么令人愉悅的SQL。

優化小組的測試MM給我發了封關于性能問題的郵件,在郵件里面,問題描述是這樣的:權限配置越少,性能越差,當配置了全部(2萬)du的權限時,只需要2s,當只配置了120個DU的權限時,需要半小時以上。

看到這個描述,我心里也咯噔了一下:這是違背了常理的。一般來說,只有越大越慢,現在反而是越小越慢。

按照習慣,我還是想先見識見識這個一反常理的SQL,看看到底是何方神圣。我找開發人員拿到了SQL,打開代碼如下:     

                                 

從體量上看,這個SQL并不大,總共才130多行。這在I項目組中是比較常見的。而從體型上看,似乎不怎么協調:尾巴太大。在WHERE條件子句,拖著5個EXISTS條件,并且都是OR的關系。這已經很不尋常了,會不會就是問題中描述的問題所在呢?

我向開發人員咨詢了這5個EXISTS子查詢的業務功能,得到的信息是:

1、這5個EXISTS子查詢的功能是鑒權,即權限鑒別;

2、不同EXISTS子查詢代表不同類型的權限集合;

3、鑒權的對象粒度是DU,即每個EXISTS子查詢與EXISTS子查詢的關聯字段都是LINE.DU_ID

從SQL自身看,找不到明顯的“破綻”,我就嘗試著看看執行計劃,在SQL DEV中按下了F5,顯示的執行計劃如下:

執行計劃比較長,我們可以只看exists部分,發現基本上都是索引掃描,cost值也非常低,也就是說執行計劃中也看不出問題。那問題到底出在哪里呢?

笨方法,好效果

當時就在想:是單個exists慢?還是5個放在一起慢呢?

為了弄清楚這個原因,我就逐個注釋掉EXISTS,并觀察注釋后的性能。雖然這個辦法有些笨拙,甚至很多人都不齒于該方法,但有些時候這確實也是定位問題的有效的手段和途徑。

通過反復注釋加測試,詭異的現象出現了:

1、5個exists條件單獨作用時,沒有性能問題;

2、***個和第三個exists條件聯合作用時,也沒有性能問題;

3、第三個、第四個和第五個exists條件聯合作用時,性能問題就凸顯了。

由此看來,問題越來越復雜了。Oracle在執行這條SQL時到底發生了什么呢?千頭萬緒理還亂,一籌莫展想不通。萬般無奈之下,只能祭出必殺神器:SQL Monitor。

神器不出,莫與爭鋒

在拿到SQL Monitor的結果后,似乎一切都明朗起來了,SQL Monitor的截圖如下(由于當時的原始數據丟失,以下僅給出模擬數據):

因為已經明確了是在exists子查詢存在性能問題,我就重點關注了EXISTS的Monitor信息,希望能從中發現有價值的信息與啟示。

在對比了5個exists的執行計劃后,“執行次數”引起了我的注意:5個EXISTS的執行次數及實際行數竟然不一樣!

(1)這組數字之間也有著巧妙的聯系:***個的執行次數為20000,及恰好是總的DU數量,第二個的執行次數等于***個的執行次數-***個實際行數,即滿足如下算法:

其中f(n)為第n個exists的執行次數,e(n)為第n個exists的實際返回行數,并且n>1。

(2)***個和第二個exists的實際返回行數的和是120,恰恰是郵件中提及的權限配置數量;而第三個19880加上120正好等于2萬,又恰恰是全部DU數。難道這一切僅僅是巧合而已?還是另有隱情呢?

基于以上兩點信息,我豁然開朗恍然大悟,個中緣由了然于胸。我們可以大致推斷出Oracle的執行原理如下圖所示:

按照上面的流程與算法,就很容易理解上述那組數字了。同樣的,也明白了為何權限配置越少的時候性能越差,配置越多的時候性能反而越好。

為了更好地理解,這里可以舉兩個極端的例子。如果有沒有配置任何權限,那么每個DU都需要遍歷5個exists子查詢,就意味著總共要執行10萬次(2萬DU,每個DU執行5次)exists子查詢。反過來,如果我們將2萬DU都配置了權限,而且是***類權限(即***個exists的權限),那么每個DU只需要執行***個exists,后面4個exists子查詢不需要執行。因此只需要執行2萬次。2萬次與10萬次的差別(另外還需要考慮不同exists之間本身性能也是有差異的),對性能的影響還是非常明顯的。

撥開云霧不等于立見天日

籠罩在詭異性能問題上的云霧終于被揭開了,但我卻絲毫沒有欣喜之感。問題的原因雖然已經“大白于天下”,但解決方案讓我一籌莫展。

一開始,我嘗試著基于現有SQL通過SQL Hint干預執行計劃,但是性能毫無起色。我又嘗試著改寫這個SQL,將OR EXISTS子查詢改寫成LEFT JOIN,性能問題卻變本加厲。我還嘗試著創建基于該SQL的特定索引,仍舊無濟于事。

回歸本源,方得圓滿

多次嘗試無果,在萬般無奈之下,我又回到了問題的本原。

這個SQL,在本場景中,除了***個exists子查詢執行了100次,第二個exists子查詢執行了20次,其它四個exists子查詢執行的19880*4次都是沒有意義的。既然沒有意義,那是否可以省略掉呢?我很為自己這個天馬行空不著邊際的想法振奮。

因為就如開始測試時,將后面三個exists注釋掉后,性能非常好。也就是說如果能成功避開無用的EXISTS子查詢,也是可以達到性能優化之目標的。

但很顯然,Oracle在執行SQL前,是無法識別哪些EXISTS子查詢是必須執行的?哪些EXISTS子查詢是無須執行的?難道自己的這個想法就這樣夭折了嗎?

不見兔子不撒鷹

我繼續著自己天馬行空的想法。

既然Oracle在執行SQL的時候未卜先知,那么我們在寫這個SQL時,是否可以先卜上一卦,如果某類權限沒有配置,就不在SQL中拼湊對應的EXISTS子查詢。這樣,本案例SQL就會只剩下兩個EXISTS子查詢了。性能也自然能得到滿足。

以上想法僅僅是我一廂情愿的理想主義,其在實際應用中是否可行還是未知之數:這個SQL在Java代碼中是固定的還是拼湊的?某類權限是否配置的判斷是否復雜?是否也會存在性能問題?如此等等,不寒而栗。但就如小馬過河,不去嘗試又怎么知道是否真實可行呢?

于是,我帶著這個不太正經的方案與開發人員溝通。開發人員的表現讓人喜憂參半。喜的是,他并不反對這個方案,如果真的能解決性能問題,他也是樂于接受該方案;憂的是,這段5個exists子查詢的SQL并不是他控制的。原來該案例的SQL所在的系統模塊是任務管理,而5個EXISTS子查詢是鑒權功能,隸屬于權限模塊。這些EXISTS子查詢都是由權限模塊來開發和維護的。用任務管理模塊開發人員的話說就是“這5個EXISTS是通過調用權限模塊的服務獲取的,如果權限模塊給我們3個EXISTS,我們就拼湊三個EXISTS子查詢,如果他們不給我們EXISTS,我就不拼湊EXISTS子查詢。”

于是,我帶著這個方案又去“游說”權限模塊的開發人員。

當我找到權限模塊的開發人員時,我們并沒有直接拖出我的方案,而是把性能問題表述了一邊。意想不到的是,這位開發人員很是淡定,好像這一切早就知道了;卻也滿臉的無奈,他說:“這個性能問題還是暴露出來了,沒有辦法,當初權限這塊的設置就是這么復雜,我們也不想如此復雜。”

見時機成熟,我就把我的方案全盤托出。沒想到,這位開發人員聽完后,兩眼大放異彩,一臉容光煥發,說到:“這很好,非常不錯,我現在就按照你的方案改寫。這不單單是你的這個SQL有問題,其它所有涉及到鑒權的SQL都會有這個問題。”

接下來,一切都水到渠成了。

二、心得

從此愛上SQL Monitor

該案例的優化過程甚為曲折,幾近山窮水盡半途而廢。在為幾個exists弄得焦頭爛額一籌莫展之際,幸得SQL Monitor之助,方能撥開云霧,終見青天。從explain plan中,我們能得知Oracle優化器的意圖,而通過SQL Monitor,我們能獲取到運行時的很多信息,比如本案例中涉及到的“實際返回行數”、“執行次數”。這一些對我們定位問題及原因分析非常有用。

感謝SQL Monitor!

頭疼醫頭,腳疼醫腳

該案例對應的BUG單很快被關閉,但作為優化方案的設計者,我非常清楚這個方案的局限性和漏洞。沒錯,針對該案例,“不見兔子不撒鷹”式的方案的確能***,但也僅僅是適用于該案例的業務場景。該方案還存在一個致命的缺陷:隨著配置的權限類型越多,其對整個SQL的性能影響越大。我們將權限配置對SQL的性能影響設為P,則P的計算公式為:

由公式可見,當N=0時,是沒有影響的,而當N=5時,影響是***的。

 

事后,我將這種隱患口頭上與組長交流過,但組長也是無奈:“我也認真研究過I項目的權限機制,發現存在一定的不合理的地方,要不然也不至于寫出如此復雜的鑒權語句。但是,目前來看,不可能將權限機制推倒重來。先就這樣子吧。” 

責任編輯:龐桂玉 來源: DBAplus社群
相關推薦

2020-02-10 10:15:31

技術研發指標

2021-07-30 07:28:16

SQL優化日志

2011-02-22 09:29:23

jQueryJavaScript

2011-09-27 10:35:44

2021-10-14 10:53:20

數據庫查詢超時

2021-01-08 13:52:15

Consul微服務服務注冊中心

2015-03-18 13:18:45

MySQLSQL優化

2019-09-27 17:24:26

數據庫優化sql

2021-11-11 16:14:04

Kubernetes

2020-08-10 11:00:02

Python優化代碼

2013-01-17 10:31:13

JavaScriptWeb開發firebug

2021-05-13 08:51:20

GC問題排查

2019-03-15 16:20:45

MySQL死鎖排查命令

2013-04-01 10:27:37

程序員失業

2021-12-20 10:15:16

zip密碼命令網絡安全

2023-06-07 07:31:04

PC端app脫殼技巧

2022-03-02 09:01:07

CPU使用率優化

2023-04-06 07:53:56

Redis連接問題K8s

2017-07-07 16:07:41

2014-08-11 09:31:52

點贊
收藏

51CTO技術棧公眾號

视频一区在线| 国产69久久| 在线精品一区| 亚洲欧洲国产一区| 日本在线一二三区| 亚洲91av| 国产天堂亚洲国产碰碰| 成人a级免费视频| 日韩成人一区二区三区| 精品久久久亚洲| 欧美一级欧美一级在线播放| 欧美在线观看www| 免费在线观看黄色| 不卡视频在线看| 国产精品视频自拍| 国产精品第72页| 久久人人88| 日韩国产在线播放| 日本一区二区三区在线免费观看| 国产直播在线| 日韩理论片中文av| 免费日韩电影在线观看| 精品人妻一区二区三区换脸明星| 亚洲欧美视频一区二区三区| 超碰97人人做人人爱少妇| 噜噜噜在线视频| 久久国产精品美女| 欧美探花视频资源| 大j8黑人w巨大888a片| 日本在线播放| 久久免费美女视频| 国产66精品久久久久999小说| 做爰视频毛片视频| 国产日韩免费| 久久久久久国产精品| 国产视频精品免费| 欧美一区电影| 亚洲精品资源在线| 国产激情第一页| 日韩欧美激情电影| 6080日韩午夜伦伦午夜伦| 久久精品免费网站| 国产伦理精品| 亚洲一区二区五区| 日韩a级黄色片| 国产在线激情视频| 国产精品久久久久久久久免费相片 | 中文字幕人妻熟女在线| 四虎国产精品免费久久| 在线免费一区三区| 免费观看成人在线视频| 日韩电影免费看| 精品久久香蕉国产线看观看gif| av在线免费观看国产| jizzjizz亚洲| 亚洲人成在线观看一区二区| 亚洲国产日韩综合一区| 69久久精品| 国产精品女人毛片| 亚洲国产欧美日韩| 91在线品视觉盛宴免费| 国产精品无圣光一区二区| 亚洲高清123| 四虎久久免费| 中文字幕一区二区三区在线播放| 亚洲免费视频一区| 午夜小视频在线| 亚洲欧洲日韩综合一区二区| www.午夜色| 在线三级中文| 亚洲国产sm捆绑调教视频| 人人妻人人做人人爽| 欧美巨大丰满猛性社交| 色婷婷久久久久swag精品 | 中文在线中文资源| 日韩欧美在线观看视频| 一级特黄性色生活片| 国产第一亚洲| 欧美一级二级三级蜜桃| 欧美xxxxx少妇| 亚洲欧洲av| 日韩在线视频国产| 免费在线观看黄视频| 99亚洲伊人久久精品影院红桃| 91国产美女在线观看| 日韩精品成人免费观看视频| 蜜臀久久久99精品久久久久久| 国产日韩中文在线| 俄罗斯嫩小性bbwbbw| 久久久综合网站| 中文字幕剧情在线观看一区| 亚洲大胆人体大胆做受1| 精品日韩中文字幕| 免费看污污网站| 日韩一区二区三区高清在线观看| 亚洲国产精品久久精品怡红院 | 女同久久另类99精品国产| 亚洲香蕉成视频在线观看| 中文字幕无码日韩专区免费 | 一区二区三区免费播放| 日韩欧美一级| 国产一区二区三区免费视频| 中文字幕人妻一区二| 国产亚洲精品v| 国产在线视频一区| 香蕉视频网站在线| 亚洲精品亚洲人成人网在线播放| 无码精品a∨在线观看中文| 精品美女一区| 亚洲国产精彩中文乱码av在线播放 | 91麻豆精品在线观看| 在线观看日韩羞羞视频| 高端美女服务在线视频播放| 欧美美女网站色| 国产精品无码在线| 亚洲天堂一区二区三区四区| 欧美在线一级va免费观看| 国产熟女一区二区丰满| 久久久噜噜噜久久人人看 | 国产伦精品一区二区三区高清版| 国产在线网站| 午夜欧美2019年伦理| 国产美女18xxxx免费视频| 台湾色综合娱乐中文网| 色综合91久久精品中文字幕| 中文字幕在线观看高清| 99精品1区2区| 日韩精品在线视频免费观看| 日韩欧美专区| 亚洲欧美日韩综合| 日本五十路女优| 国产成人综合在线| 懂色av一区二区三区四区五区| 视频在线日韩| 精品伊人久久97| 日本三级片在线观看| 国产综合色在线视频区| 色综合久久88色综合天天提莫| av在线私库| 日韩一区二区在线看片| 精品少妇一区二区三区密爱| 日本欧美加勒比视频| 九色综合日本| 欧美调教sm| 亚洲激情自拍图| 日韩成人免费观看| 不卡的电视剧免费网站有什么| 久久这里只有精品8| 国产美女精品视频免费播放软件| 色久欧美在线视频观看| 中文字幕第三页| 欧美国产激情二区三区| 国产裸体免费无遮挡| 九一成人免费视频| 日本免费一区二区三区视频观看| 视频午夜在线| 色婷婷综合在线| 亚洲av无码国产精品麻豆天美| 亚洲欧美日韩国产一区二区| 青青草国产精品| 视频精品导航| 久久香蕉国产线看观看网| 国产又粗又黄视频| 亚洲女人的天堂| wwwxxxx在线观看| 影音先锋亚洲一区| 久久久久se| 自拍偷自拍亚洲精品被多人伦好爽 | 欧美在线免费视频| 日本国产在线| 欧美影视一区二区三区| 亚洲欧美精品久久| 懂色中文一区二区在线播放| 日日碰狠狠添天天爽超碰97| 小嫩嫩12欧美| 国产精品精品久久久| 麻豆tv入口在线看| 日韩精品在线一区二区| 国产成人在线播放视频| 久久精品日韩一区二区三区| 在线免费av播放| 91精品啪在线观看国产81旧版 | 国产av无码专区亚洲av| 一区二区三区免费| 少妇户外露出[11p]| 青青草精品视频| mm131午夜| 日韩精品免费一区二区三区竹菊| 国产精品欧美激情在线播放| av文字幕在线观看| 亚洲激情视频网| 中文字幕在线一| 亚洲一区二区综合| 日韩精品电影一区二区三区| 国产经典欧美精品| 亚洲国产精品久久久久爰色欲| 热久久天天拍国产| 国产福利久久精品| 国产精品亚洲一区二区三区在线观看| 久久久999精品免费| 婷婷亚洲一区二区三区| 欧美日韩www| 99精品视频99| 亚洲少妇屁股交4| asian性开放少妇pics| 狠狠色丁香九九婷婷综合五月 | 日韩成人免费看| 国产在线视频在线| 青青草综合网| 免费一区二区三区| 999精品视频在这里| 国产精品久久久久久久久久99| 久草免费在线色站| 色偷偷偷综合中文字幕;dd| 全部免费毛片在线播放一个| 欧美猛男超大videosgay| 黄色免费av网站| 一区二区三区精品视频| 亚洲第一视频区| 99精品在线观看视频| 亚洲高清在线不卡| 日韩av网站在线观看| 黄色成人在线看| 午夜日韩在线| 宅男av一区二区三区| 精品日韩欧美一区| 欧美日韩亚洲在线| 都市激情亚洲欧美| 亚洲最大福利视频网| 国产精品久久乐| 日韩av电影手机在线观看| h片精品在线观看| 蜜臀久久99精品久久久久久宅男| 成人性生交大片免费看午夜| 亚洲精品国产精品国自产在线| 亚洲av综合色区无码一区爱av| 欧美人与性动xxxx| 精品国产青草久久久久96| 欧美午夜激情在线| 国产精品suv一区二区三区| 一区二区国产视频| 人妻少妇精品一区二区三区| 日韩美女精品在线| gv天堂gv无码男同在线观看| 国产区在线观看成人精品| 日韩精品卡通动漫网站| 97精品久久久午夜一区二区三区| 四虎成人免费视频| 国产91精品在线观看| 国产男女无遮挡猛进猛出| 精品一区二区三区视频在线观看| 97超碰人人爽| 激情欧美一区二区三区在线观看| 性chinese极品按摩| 久久精品国产精品青草| 91高清国产视频| 国产一区欧美一区| xxx中文字幕| 国产成人av网站| 中文字幕在线国产| aaa亚洲精品| 波多野结衣片子| 中文字幕二三区不卡| 毛片aaaaaa| 亚洲视频香蕉人妖| 久久精品国产av一区二区三区| 午夜精品国产更新| 天天干天天干天天| 欧美日韩成人综合在线一区二区 | 精品久久人人做人人爱| 国精产品乱码一区一区三区四区| 337p日本欧洲亚洲大胆色噜噜| 在线观看xxx| 夜夜躁日日躁狠狠久久88av| 137大胆人体在线观看| 久久综合免费视频影院| 18video性欧美19sex高清| 欧美在线视频在线播放完整版免费观看| 欧美日韩大片| 国产日韩在线看片| 成人黄色av网址| 欧美精品成人一区二区在线观看 | 国产成人免费精品| 欧美在线观看视频| 国产精品亚洲成在人线| 99国精产品一二二线| 色天下一区二区三区| 日本一区网站| 欧美成人亚洲| 蜜臀av午夜一区二区三区| 老司机精品视频在线| 精品人妻二区中文字幕| 久久久精品人体av艺术| 欧美色图亚洲视频| 色偷偷成人一区二区三区91| 国产精品特级毛片一区二区三区| 亚洲第一男人av| 色婷婷av一区二区三区在线观看 | 激情六月综合| 久久精品国产精品亚洲色婷婷| 秋霞电影一区二区| 在线观看一区二区三区视频| 久久嫩草精品久久久精品| 久久精品一区二区三区四区五区| 午夜视频在线观看一区二区| 一级黄色大毛片| 日韩精品视频在线播放| 国产原创精品视频| 欧美在线视频网站| silk一区二区三区精品视频| 日韩尤物视频| 亚洲精品人人| 欧美又黄又嫩大片a级| 久久嫩草精品久久久精品一| 久久精品久久精品久久| 欧美日韩视频专区在线播放| 视频福利在线| 欧美激情乱人伦一区| 四虎视频在线精品免费网址| 久久免费看av| 狠狠色综合网| 成人av片网址| 一级做a爰片久久毛片16| 精品美女在线观看| 一区二区三区视频网站| 热久久免费视频精品| 91蝌蚪精品视频| 亚洲自拍偷拍二区| 日韩精品成人一区二区三区| av无码一区二区三区| 亚洲一区二区三区中文字幕| 国产精品欧美激情在线| 中文字幕无线精品亚洲乱码一区 | 久久福利综合| 国产最新免费视频| 成人在线一区二区三区| 好吊色视频在线观看| 欧美日韩电影在线播放| www.中文字幕久久久| 日韩av电影免费观看高清| 日韩高清一级| 能在线观看的av| av电影天堂一区二区在线| 国产性70yerg老太| 日韩欧美www| 怡红院在线播放| 91免费看网站| 欧美三区美女| 特种兵之深入敌后| 亚洲猫色日本管| 国产福利视频导航| 九色精品美女在线| 日韩亚洲精品在线观看| 真人做人试看60分钟免费| 国产在线精品不卡| 国产一区二区三区在线视频观看| 91精品国产色综合久久不卡电影| 麻豆传媒免费在线观看| 51蜜桃传媒精品一区二区| 中文字幕免费一区二区| 欧美69精品久久久久久不卡| 一区二区三区在线免费| 亚洲精品一区二区三区区别| 久久久亚洲精品视频| 精品亚洲免a| 久久精品.com| 中文字幕欧美三区| 91极品身材尤物theporn| 日韩视频免费大全中文字幕| 欧美一级做a| 亚洲精品影院| 国产精品一区在线| 免费在线观看黄色av| 日韩女优电影在线观看| 嗯啊主人调教在线播放视频 | 亚洲天堂一区二区三区四区| 91视频免费入口| 五月天中文字幕一区二区| 天堂av电影在线观看| 国产精品嫩草视频| 中文字幕一区二区三区欧美日韩| 无码人妻丰满熟妇啪啪网站| 欧美日韩在线视频首页| 91青青在线视频| 99久久精品免费看国产一区二区三区| 一道本一区二区| 一级二级黄色片| 精品乱人伦小说| 国产精欧美一区二区三区蓝颜男同| 亚洲一区综合| 成人综合激情网| 中国黄色一级视频| 欧美大片第1页| 欧美亚洲国产精品久久| 伊人av在线播放| 欧美性videosxxxxx| 国产蜜臀在线| 亚洲国产欧美日韩| 成人禁用看黄a在线| 在线观看一二三区|