Stored procedures 如何确定DB2中存储过程的最后执行时间?

Stored procedures 如何确定DB2中存储过程的最后执行时间?,stored-procedures,db2,Stored Procedures,Db2,我想查找存储过程最后一次执行的时间,以便删除未使用的存储过程。一种方法是扫描代码,找出已使用存储过程的列表并删除未使用的存储过程,因为存储过程的数量以千为单位,我想知道DB2中是否有一个选项可以轻松找到它。无需显式记录或跟踪,不可能为数据库中的每个存储过程都获取此信息。但是,通过使用-sys.dm_exec_procedure_stats,我们可以获得存储过程的此详细信息以及其执行计划当前缓存在服务器上的许多其他相关信息。这是一个系统动态视图,返回缓存存储过程的聚合性能统计信息 此视图为每个缓存

我想查找存储过程最后一次执行的时间,以便删除未使用的存储过程。一种方法是扫描代码,找出已使用存储过程的列表并删除未使用的存储过程,因为存储过程的数量以千为单位,我想知道DB2中是否有一个选项可以轻松找到它。

无需显式记录或跟踪,不可能为数据库中的每个存储过程都获取此信息。但是,通过使用-sys.dm_exec_procedure_stats,我们可以获得存储过程的此详细信息以及其执行计划当前缓存在服务器上的许多其他相关信息。这是一个系统动态视图,返回缓存存储过程的聚合性能统计信息

此视图为每个缓存的存储过程计划返回一行,该行的生存期与存储过程保持缓存的时间相同。从缓存中删除存储过程时,相应的行将从此视图中删除

USE DBName    // replace with your DB name
GO  
SELECT   
 O.name,  
 PS.last_execution_time  
FROM   
 sys.dm_exec_procedure_stats PS   
INNER JOIN sys.objects O   
 ON O.[object_id] = PS.[object_id]   
GO  
上面的脚本将返回当前数据库的所有缓存存储过程的名称及其最后一次执行时间

有关更多详细信息,请查看

在DB2中,我认为您可以安排存储过程在特定时间、间隔或指定事件发生时运行。管理任务计划程序管理这些请求

程序

要计划存储过程的执行,请执行以下操作:

Add a task for the administrative task scheduler by using the ADMIN_TASK_ADD stored procedure. When you add your task, specify which stored procedure to run and when to run it. Use one of the following parameters or groups of parameters of ADMIN_TASK_ADD to control when the stored procedure is run: 
间隔—存储过程将按指定的常规间隔执行。 时间点—存储过程将在指定的时间执行。 触发器任务名称-存储过程将在指定任务发生时执行。 trigger task name trigger task cond trigger task code—存储过程将在指定任务和任务结果发生时执行

您还可以选择使用以下一个或多个参数来控制存储过程的运行时间:

开始时间戳 允许的最早执行时间 结束时间戳 最新允许执行时间 最大调用数 最大执行次数

当存储过程运行的指定时间或事件发生时,管理任务调度器将调用DB2®中的存储过程

  • 可选:任务完成执行后,使用ADMIN_task_status功能检查状态。此函数返回一个表,其中一行指示每个计划任务的最后执行状态。如果计划的任务是存储过程,则JOB_ID、MAXRC、COMPLETION_TYPE、SYSTEM_ABENDCD和USER_ABENDCD字段包含空值。在DB2错误的情况下,SQLCODE、SQLSTATE、SQLERRMC和SQLERRP字段包含DB2调用存储过程返回的信息

  • 关于管理任务状态的更多信息

    您没有说明您使用的是什么平台或版本的DB2

    如果您运行的是DB2 for Linux/UNIX/Windows,并且是V9.7或更高版本,那么您可以查看
    SYSCAT.PACKAGES
    中的
    LASTUSED
    列,该列可以通过
    SYSCAT.ROUTINEDEP
    连接到
    SYSCAT.PROCEDURES

    select 
       proc.procschema
      ,proc.procname
      ,pkg.lastused
    from 
       syscat.procedures proc
      ,syscat.routinedep rd
      ,syscat.packages   pkg
    where 
       proc.specificname =  rd.routinename
       and rd.bname      =  pkg.pkgname
       and pkg.lastused  <> '01/01/0001'
    order by 
       pkg.lastused desc;
    
    选择
    proc.procschema
    ,proc.procname
    ,pkg.lastused
    从…起
    syscat.proc程序
    ,syscat.routinedep路
    ,syscat.packages-pkg
    哪里
    proc.specificname=rd.routinename
    和rd.bname=pkg.pkgname
    和包装最新使用的“01/01/0001”
    订购人
    包装最后使用说明;
    
    如果从未执行过过程,则LASTUSED的值为“01/01/0001”。上面的查询过滤掉了这些


    另外,请注意,您可能希望在
    PROCSCHEMA
    上进行筛选,这样您就看不到所有的系统存储过程了…

    看起来很像,这个问题被标记了。这似乎是SqlServer的命令,请让我知道DB2k的表/视图。在db2中如何安排SP的执行时间,我将编辑我的答案。