咱先來掐指一算,分析下SQL語句的結(jié)構(gòu)。此語句一打眼就是個(gè)統(tǒng)計(jì)語句,查詢包括兩張表,是一個(gè)正常的表等值關(guān)聯(lián)的查詢語句。
通過仔細(xì)查看發(fā)現(xiàn)如上執(zhí)行計(jì)劃是錯(cuò)誤的。簡(jiǎn)單啰嗦一下執(zhí)行計(jì)劃。首先通過T1表的DATE字段選擇過濾出結(jié)果集,在將表T通過CUSTMGR字段選擇出結(jié)果集,再將兩個(gè)查詢的結(jié)果集通過NESTLOOP方式返回?cái)?shù)據(jù)。正常情況下如果連接條件不是通過函數(shù)進(jìn)行轉(zhuǎn)換且CUST_ID上有索引的話,會(huì)通過索引CUST_ID進(jìn)行NESTLOOP 返回結(jié)果。
那么我們?cè)趺粗肋x擇這種執(zhí)行計(jì)劃時(shí)不正確的呢?因?yàn)楸戎罢_的執(zhí)行計(jì)劃消耗更高。什么?我怎么知道的消耗更高?往下看就知道了嘛。
通過上面的查詢結(jié)果,我們可以發(fā)現(xiàn)在3:30 ,出現(xiàn)了錯(cuò)誤的執(zhí)行計(jì)劃。那么問題就來了,為什么會(huì)有錯(cuò)誤的執(zhí)行計(jì)劃,為什么在10號(hào)發(fā)生?
我們可以推斷此SQL是在每天3:30的時(shí)候進(jìn)行定時(shí)執(zhí)行,且10號(hào)前執(zhí)行效率很高,所有2500次的執(zhí)行均在秒內(nèi)時(shí)間就完成了。但在10號(hào)后,由于錯(cuò)誤執(zhí)行計(jì)劃出現(xiàn),導(dǎo)致SQL執(zhí)行時(shí)間變長(zhǎng),2500次的執(zhí)行不能在規(guī)定時(shí)間內(nèi)跑完,導(dǎo)致sql取數(shù)拖到了半天,占用白天的資源,進(jìn)而影響正常的白天業(yè)務(wù)。
那么為什么會(huì)發(fā)生這樣的情況呢?我們通過10053來仔細(xì)在查看一下:
可以看到提示:Usingprorated density: 0.000001 of col #9 as selectvity ofout-of-range/non-existent value pred
這個(gè)提示說明出現(xiàn)了越界現(xiàn)象。當(dāng)日期判斷的范圍超出了統(tǒng)計(jì)信息記錄的最大值和最小值的范圍,CBO無法計(jì)算選擇率,得出錯(cuò)誤的結(jié)果集,此時(shí)通過估計(jì)值進(jìn)行選擇,當(dāng)評(píng)估的值與實(shí)際情況差別很大時(shí),就會(huì)出現(xiàn)選擇偏差。
我們看到記錄的最大日志是07-10,在與SQL語句SERVICEDATE>= (SYSDATE -30)執(zhí)行計(jì)劃出錯(cuò)的日期進(jìn)行比較,發(fā)現(xiàn)8月10號(hào)-30天正好超過了記錄的最大日期值。這就是執(zhí)行計(jì)劃變化發(fā)生在8月10日的罪魁禍?zhǔn)住?/span>
執(zhí)行計(jì)劃已正確。
1. 收集表上統(tǒng)計(jì)信息
2. 固定SQL的執(zhí)行計(jì)劃
3. 創(chuàng)建組合索引,CUSTMGR+時(shí)間
3.2 監(jiān)控執(zhí)行計(jì)劃的變化
數(shù)據(jù)是千變?nèi)f化的,作為一個(gè)老司機(jī),我們多伸一下手順帶考慮通過編寫監(jiān)控腳本來預(yù)防問題的后續(xù)發(fā)生,發(fā)生時(shí)第一時(shí)間知曉及介入。
1. 監(jiān)控系統(tǒng)中出現(xiàn)SQL_ID和PLAN_HASH_VALUE,1:N的情況,過濾掉OBJECT_STATUS失效的對(duì)象,正常一個(gè)SQL_ID與一個(gè)當(dāng)前真正使用的PLAN_HASH_VALUE對(duì)應(yīng),比較執(zhí)行時(shí)間進(jìn)行報(bào)警。
2. 比較SQL_ID-PLAN_HASH_VALUE在歷史中是否出現(xiàn)過,比較執(zhí)行時(shí)間進(jìn)行報(bào)警。
3. 使用SQL審核平臺(tái)進(jìn)行監(jiān)控告警。
好了,本新四有好青年的首次春宮秀到此結(jié)束,咱們下回再見。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/130212.html
摘要:但是在這個(gè)判斷的情況下,則會(huì)很神奇的發(fā)現(xiàn)打印出來了,說明此時(shí)為,為什么呢因?yàn)檫@里執(zhí)行了一個(gè)對(duì)象到布爾值的轉(zhuǎn)換故返回。 ????之前做項(xiàng)目的時(shí)候,總會(huì)處理各式各樣的數(shù)據(jù),來進(jìn)行繪圖。但是當(dāng)后臺(tái)返回一個(gè)空數(shù)組的時(shí)候,頁(yè)面中并不會(huì)顯示沒有數(shù)據(jù)的圖。代碼如下: var arr = [] if(arr){console.log(124)}else{console.log(無數(shù)據(jù))} 我明明判斷了...
摘要:在我們向廠商提交漏洞,發(fā)布了相關(guān)的漏洞分析文章后,由于內(nèi)聯(lián)函數(shù)導(dǎo)致的類似安全問題在其他的應(yīng)用程序中陸續(xù)曝出。淺析的函數(shù)自帶了一個(gè)內(nèi)聯(lián)函數(shù)用于在應(yīng)用程序中發(fā)送電子郵件。 前言 在我們 挖掘PHP應(yīng)用程序漏洞 的過程中,我們向著名的Webmail服務(wù)提供商 Roundcube 提交了一個(gè)遠(yuǎn)程命令執(zhí)行漏洞( CVE-2016-9920 )。該漏洞允許攻擊者通過利用Roundcube接口發(fā)送一...
摘要:背景項(xiàng)目中通過遠(yuǎn)程調(diào)用服務(wù)框架調(diào)用了許多其它的服務(wù)其中有一個(gè)服務(wù)需要升級(jí)其升級(jí)不是版本上的升級(jí)而是整個(gè)服務(wù)重新取了一個(gè)名字使用的也是全新的包但是調(diào)用的方法沒有改變因此在升級(jí)時(shí)只是在調(diào)用服務(wù)類中修改了調(diào)用地址和調(diào)用返回實(shí)體由改為該中返回該調(diào)用 背景 項(xiàng)目中通過遠(yuǎn)程調(diào)用服務(wù)框架調(diào)用了許多其它的服務(wù),其中有一個(gè)服務(wù)wx/subscribe/contract/CircleService 需要升...
摘要:除非使用了分塊編碼,否則首部就是帶有實(shí)體主體的報(bào)文必須使用的。 背景 新項(xiàng)目上線, 發(fā)現(xiàn)一個(gè)奇怪的BUG, 請(qǐng)求接口有很小的概率返回400 Bad Request,拿到日志記錄的請(qǐng)求的參數(shù)于POSTMAN中測(cè)試請(qǐng)求接口, 發(fā)現(xiàn)能夠正常響應(yīng). 排查過程 首先服務(wù)器能夠正常響應(yīng)400 Bad Request, 排除接口故障問題. 對(duì)比日志過程中發(fā)現(xiàn) { hello:world ...
閱讀 1346·2023-01-11 13:20
閱讀 1684·2023-01-11 13:20
閱讀 1132·2023-01-11 13:20
閱讀 1858·2023-01-11 13:20
閱讀 4100·2023-01-11 13:20
閱讀 2704·2023-01-11 13:20
閱讀 1385·2023-01-11 13:20
閱讀 3597·2023-01-11 13:20