和開發人員討論一個業務需求和簡單實現

531968912發表於2015-12-23
前幾天一個開發的同事來找我諮詢一個問題,說是諮詢,其實是開發的同事也不是非常清楚裡面的邏輯,因為歷史系統,歷史原因,各種原因吧,所以我也是帶著試試看的態度來幫助了這位同事。
這位同事知道這個諮詢我的是一個儲存過程。基本思路是從千萬級的表table1中查出結果集,然後在table2,table3,table4都插入資料。
這個儲存過程是怎麼觸發的呢,從開發同事那裡得到的資訊是在大概每週三凌晨執行一次,但是具體怎麼觸發的他們就無從得知了。要確認這個資訊也花了一點時間。首先排除crontab,然後在scheduler中開始查詢。

因為scheduler不像pl/sql還可以直接從dba_source裡面可以模糊匹配出來需要的資訊。所以這個時候藉助了dba_scheduler_jobs這個資料字典,直接找到近半個月的執行情況。
select owner,job_name,last_start_date,end_date,NEXT_RUN_DATE from dba_scheduler_jobs where last_start_date between to_timestamp('2015-12-01 05:00:00','yyyy-mm-dd hh24:mi:ss') and to_timestamp('2015-12-10 08:00:00','yyyy-mm-dd hh24:mi:ss') and owner='XXXX' order by LAST_START_DATE;
通過這個語句得到了一個粗略的job執行列表,如果想檢視更多的明細可以使用,比如job為test_vip_v3,則可以通過下面的方式來得到job的定義語句。
select dbms_metadata.get_ddl('PROCOBJ', 'TEST_VIP_V3',SCHEMA=>'XXXX') from dual;
其實也是花了一些功夫,總算定位到了,其實最後回過頭來看,其實通過dba_scheduler_jobs中的另外幾個欄位也能夠定位到。
得到的執行頻率定義為 'FREQ=WEEKLY;BYDAY=WED;BYHOUR=1;BYMINUTE=3;BYSECOND=25' 這個資訊和開發同學的描述是一致的,而且經過確認確實是。
好了,問題基本清楚了,他們開始嘗試提出一些想法,其實也算是需求吧。


目前的業務實現,在每次dml操作table 2之後,還是需要對比修改前和修改後的資料變化,把一部分過濾後的資料插入到一個新的日誌表中。
按照這種情況那就是需要在每次操作前都需要把表table2的資料做一個邏輯備份或者邏輯複製了。所以這個工作比較簡單,就是建立一套同樣的表結構,然後每次操作前做一個基本的備份即可。
後面的操作就如下所示了。其實按照之前描述的,其實就是需要建立一個表table5,table6,而兩者做minus運算的部分,因為他們目前還評估不了,所以我就建議他們這個步驟先設定為手動,如果兩個表資料量太大,但是minus運算結果集不大,可以考慮在備庫做這類查詢,把結果集快取出來,從備庫反推到主庫。
如果資料量不大,那麼就可以直接考慮在主庫做這類操作。所以這個步驟考慮到手工觸發,我就建議他們提供一個儲存過程來代替,再手工也不能純手工操作。到時候開發同事或者DBA都可以代勞。

所以這個簡單的需求,最後就可以分解出下面幾件需要做的事情
1.開發同學提供table 5,table 6的ddl語句
2.開發同事提供兩個表minus運算的語句和條件,DBA來檢視是否有更多的優化空間
3.根據優化建議,可以建議補充哪些相關的索引,一起確認哪些索引在table5,table6中是否需要,是否需要再新增。
4.開發同學提供minus的細節,把這個包裝成獨立的儲存過程
5.table5在每次更新前需要truncate,然後重新初始化,開發同學提供初始化邏輯。
6.DBA對現有流程進行效能評估,檢視是否有改進的空間。
大體聊了十多分鐘,然後就達成了上面的共識,然後就是分階段來完成了。
今天已經週三了,從目前的情況來看,
table5資料量在千萬,但是minus的過濾結果集不大,所以這個操作就放到主庫執行即可,
minus資料merge進入table 6的過程耗時在2分鐘,已經達到了預期目標。所以可以考慮把這個儲存過程直接揉入原有的儲存過程中,就不用單獨在定義一個job來觸發了。
沒有其它業務受到影響
所以這麼一個簡單的業務需求就基本劃上了句號。聽開發同事反饋,以前有的時候job會執行幾個小時,那麼這種活就是優化的部分了,我還是比較喜歡這種提升空間大的活。距離下次週三還有幾天,還有很大的空間可以改善。
可以看到一個本來開發也不熟悉的流程經過我們的討論和確認逐漸清晰起來,也確實解決了不少的潛在問題,畢竟我們只是做一個方案的執行者,我們也可以引導他們。給他們適當的建議。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1873639/,如需轉載,請註明出處,否則將追究法律責任。

相關文章