zoukankan      html  css  js  c++  java
  • 监控存储过程执行

    一、背景

    存储过程执行的结果需要被监控起来,防止一顿操作猛如虎,回头一看表没有;

    有些时候表格出现错误,原因是存储过程跑失败了。这个时间就需要监控起存储过程的执行结果。

    二、监控方式

    2.1 MSSQ

    2.1.1 可以在后台查看上次的执行结果

    2.1.2 发送邮件

    可以根据不同情况给目标人群发邮件

    2.2 Navicate

    2.2.1 定时查看

    在电脑自带的任务程序计划中查看

    2.2.2 发送邮件

    Navicat中有发送邮件的功能,无论结果运行的成功与否,都会发送。无法做到只有执行错误才会发送。

    2.2 埋点

    也是写这篇博客的原因,下面会详细介绍。

    三、埋点监控

    3.1 基本思路

    建立一个表,将运行的开始时间,结束时间等都放到这个表里面。

    3.2 建表

    Drop table if exists test.qiansl.sp_running_monitor;
    Create table test.qiansl.sp_running_monitor
    (
    id int identity(1,2) primary key,
    sp_name  nvarchar(255),
    begin_time    datetime,
    end_time       datetime,
    running_second  int,
    running_time    varchar(20),
    result         int Default 0,
    comment       varchar(500)
    )

    3.3 代码展示

    USE [test]
    GO
    /****** Object:  StoredProcedure [qiansl].[sp_name_1]    Script Date: 2021/7/31 23:48:23 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE  PROCEDURE [qiansl].[sp_name_1]
    AS
    BEGIN
         -- 获取执行开始时间
        insert into [test].[qiansl].sp_running_monitor(sp_name,begin_time) values ('sp_name_1',getdate());
    
        -- 执行内容
        WAITFOR DELAY N'00:00:10.000'    
        ;
    
        -- 获取执行结束时间
        UPDATE [test].[qiansl].sp_running_monitor
        SET end_time =  getdate(),
            running_second = DATEDIFF(SECOND,begin_time,GETDATE()),
            running_time=CONVERT(VARCHAR(8),CONVERT(TIME,DATEADD(ss,DATEDIFF(SECOND,begin_time,GETDATE()),'1900-01-01'))) ,
            result=1
       where sp_name='sp_name_1' and id = (select max(id) from [test].[qiansl].sp_running_monitor where sp_name='sp_name_1' )
    
    
    END

    3.4 进一步处理

    大部分时间我们是想看到最近一次的执行结果,可以用开窗函数在建个视图

    3.4.1 代码展示

    USE [test]
    GO
    
    /****** Object:  View [qiansl].[v_sp_running_monitor_last]    Script Date: 2021/7/31 23:57:31 ******/
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE VIEW [qiansl].[v_sp_running_monitor_last] AS select * from
    (
    select *,row_number() over(partition by sp_name order by id  desc)  as 'id逆排' from [test].[qiansl].sp_running_monitor
    ) as A
    WHERE id逆排=1
    GO

    3.4.2 结果展示

    3.4.2.1 查看表格代码

    select * from [test].[qiansl].sp_running_monitor

    3.4.2.2 查看视图代码

    SELECT  *  FROM [test].[qiansl].[v_sp_running_monitor_last] order by id desc 

    3.5 用途

    主要是两个用途

    • 运行结果是否正确
    • 是否在设定的时间运行

    简单的说:判断是否在正确的时间运行出正确的结果

    3.6 遗憾

    如果能够找到运行代码的电脑IP就更好了。

    如果有哪位同学知道锁定运行代码的IP,请在下方留言。谢谢。

    四、结束

    三种方式各有优劣。各有适用的场景,我一般是组合使用的。

  • 相关阅读:
    Loadrunner脚本自动关联和手动关联
    Linux常用命令大全
    linux软件的安装和卸载
    PL/SQL DEVELOPER执行计划的查看
    利用pl/sql执行计划评估SQL语句的性能简析
    LoadRunner监控Linux与Windows方法
    LR添加Windows和Linux压力机实战
    《JS设计模式笔记》 4,桥接模式
    《ES6基础教程》之 Call 方法和 Apply 方法
    《JS设计模式笔记》 3,观察者模式
  • 原文地址:https://www.cnblogs.com/qianslup/p/15085771.html
Copyright © 2011-2022 走看看