91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql中awesome-stored-procedure發布的示例分析

發布時間:2022-01-14 14:51:48 來源:億速云 閱讀:145 作者:小新 欄目:大數據

這篇文章將為大家詳細講解有關mysql中awesome-stored-procedure發布的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

mysql中awesome-stored-procedure發布的示例分析  

前段時間因為線下分析庫上的存儲過程SP無規范的泛濫,導致ETL和BI報表經常出現各種死鎖阻塞問題。遂決定動手整個簡單的SP編碼規范,其實主要目的就是記錄SP的運行日志和狀態。


存儲過程在很多“互聯網新生代”程序員的觀念里可能已經是上古物件了吧?現而今大部分的互聯網系統實現都不太可能采用存儲過程的實現方式,因為它對數據庫造成的負擔、難于調試、移植性差,以及在分布式、高并發場景下的天然劣勢,都阻礙了它的使用。所以阿里巴巴Java編程規范里明確規定“禁止使用存儲過程”也就不足為奇了。


但是很多公司的線下關系型分析庫上,SP仍舊是相當常用的一種技術手段。SP泛濫后主要容易出現以下幾點病癥:


1. 基于SP創建的Event運行頻率和運行時長設置的盲目且隨意。這會導致:

  • SP自身本次還沒運行完,下一個自己就啟動了,結果自己把自己鎖死; 

  • 不同SP之間有依賴順序,一旦前置SP出現超時,后續的SP執行只能是錯誤的或者鎖死的狀態;


2. SP的執行過程是黑盒、不可見的。準確的說就是SP在運行過程中沒有足夠的日志線索,很多時候只知道卡主了,但不知道卡在那里。


3. SP沒有異常處理。SP運行過程中發生錯誤,若沒有捕獲處理,導致最終運行失敗,那么這個SP在整個依賴鏈路的越前端,恢復成本將越高昂。

mysql中awesome-stored-procedure發布的示例分析    

上述三個問題最終都可以靠一張日志表來解決,另外為了實現序號自增,又多建了一張序號表,總共2張表。

mysql中awesome-stored-procedure發布的示例分析  
mysql中awesome-stored-procedure發布的示例分析  

SP日志工具的代碼我已經上傳到了Github上,方便自己和大家翻閱。又因為本人特別喜歡Github上的Awesome系列,順道碰個瓷,這個代碼庫命名為了


awesome-stored-procedure


https://github.com/NicholasQu/awesome-stored-procedure


目前都是基于MYSQL編寫的,其他數據庫的有空再考慮完善一下吧。接下來簡單介紹下這幾個Function /Procedure。

FUNCTION getSeqNo

/**********************************************

 *  使用示例

 **********************************************/

select getSeqNo('mall'), getSeqNo('pay');


功能:根據序號類別,獲取全局自增序號。

不同類別的交叉運行會導致序號跳空,該函數不保同一類別內序號的連續性。


PROCEDURE logSp*

/**********************************************

 *  使用示例

 **********************************************/

call logSpStart('sp1','testing sp1',100,@sp_exec_no);

call logSpStartAndCheck('sp1','testing sp1',100,'sp2', date_add(now(), interval -1 minute), now(), @sp_exec_no);

call logSpEnd('sp1','end sp1', @sp_exec_no);

mysql中awesome-stored-procedure發布的示例分析  


SP啟動和先決條件檢查

用于記錄SP啟動時間和狀態,并檢查可以繼續運行的條件是否滿足:

1. 自身的運行頻度較高,之前自身是否還未運行完成。該情況調用logSpStart即可;

2. 依賴其他的SP運行完成,自身方能啟動。該情況需調用logSpStartAndCheck;


SP調試信息打印

用于打印Info級別的調試日志, 調用logSpInfo;


SP結束日志打印 logSpEnd

用于表示該SP已運行完成。注意這里只標識SP的完成,并不一定成功,整個SP中間過程可能發生了異常,但是繼續運行完畢了。


SP異常處理

對異常進行處理。有兩種方式:

1. 若該異常無關痛癢,可以繼續后續邏輯的話,使用logSpErrAndContinue;

2. 若該異常直接可以導致SP終止,調用logSpErrAndEnd;


標準SP寫法

參照 p_sp_demo.MYSQL.SP.sql

https://github.com/NicholasQu/awesome-stored-procedure/blob/master/recordSpLogs/p_sp_demo.MYSQL.SP.sql 

mysql中awesome-stored-procedure發布的示例分析    

關于“mysql中awesome-stored-procedure發布的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南丰县| 安岳县| 资兴市| 普陀区| 石台县| 通州市| 柯坪县| 稻城县| 定南县| 东港市| 天柱县| 垦利县| 边坝县| 讷河市| 许昌县| 连山| 香河县| 广饶县| 秦安县| 宜阳县| 阳朔县| 天等县| 金堂县| 黔西县| 屯昌县| 松滋市| 东平县| 巴彦县| 鸡西市| 云南省| 上杭县| 克东县| 花莲市| 丹江口市| 蕲春县| 星子县| 河曲县| 和田市| 卢湾区| 叙永县| 澄城县|