千家信息网

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

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章将为大家详细讲解有关mysql中awesome-stored-procedure发布的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前段时间因为线下
千家信息网最后更新 2026年11月02日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在整个依赖链路的越前端,恢复成本将越高昂。

上述三个问题最终都可以靠一张日志表来解决,另外为了实现序号自增,又多建了一张序号表,总共2张表。

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);


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发布的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

运行 过程 序号 日志 示例 分析 处理 存储 状态 篇文章 类别 不同 互联网 代码 就是 情况 数据 数据库 方式 时间 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海喔噻互联网科技有限公司 厦门中拓互联网络科技有限公司 互联网电商科技 河南真二互联网科技有限公司 互联网与科技金融数据 科技类互联网 金融科技创新监管互联网金融 互联网 科技公司 善班互联网科技有限公司 互联网公司会议桌创意科技软装饰 河南猎农互联网科技有限公司 中国科技创新与世界互联网大会 互联网行业科技股 互联网科技创新的路径 南京一网一红互联网科技有限公司 全球科技与互联网公司市值变化 互联网科技收购价值 杭州科技互联网公司有哪些 优雇互联网科技有限公司 恒生互联网科技趋势 中关村互联网科技集团 互联网与科技发展 未来的互联网科技 菲比寻常互联网科技 互联网科技有哪些公司 重庆互联网医院沙龙医盟信息科技 呼和浩特新华互联网科技学院 中国互联网公司排名锤子科技 中国科技和美国互联网 中国互联网公司的科技投入
0