SQL Server代理作业已完成,没有错误,但在计划后无法正常运行,但是在手动运行时可以正常运行

时间:2019-08-12 15:55:14

标签: sql-server sql-server-agent

我有一个SQL Server代理作业,该作业重建了计划每天运行的两个索引。我这样做的原因是为了提高存储过程的性能。

从日程表运行代理作业时,它不会影响存储过程的性能,但是,如果我手动运行该作业,它会影响存储过程的性能。

在日志中查找手动运行和计划运行均已完成而没有错误,甚至花费了相似的时间来完成。日志甚至表明它们都以同一用户身份运行。

排定的实施过程中我缺少什么?排定排定的另一种方式是什么?

工作的T-SQL:

USE [TestingDB]
GO

ALTER INDEX [_dta_index_TestingOrders_randomIndex] 
ON [dbo].[Orders] 
REBUILD PARTITION = ALL 
    WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO

1 个答案:

答案 0 :(得分:0)

这可能只是重建时间与检查时间的伪影。我假设您的日常重建是在凌晨1点运行的,但是性能测试要等到凌晨8点才运行。在这种情况下,可以在重建之后但在测试之前运行其他计划任务(尤其是其他维护任务)和常规的数据库使用。

另一方面,您可能在手动重建后立即测试性能。这样可以在不同的环境中进行测试。

SQL Server运行重建时,它将尝试在内存中执行此操作以提高速度。这将导致表的很大一部分(可能是表的全部)被高速缓存在内存中,此时访问将非常快。但是,随着其他进程的工作,该表的某些部分将从内存中删除,以供其他表缓存其数据。随着越来越多的数据从第一个表的内存中删除,整体性能将下降。因此,几个小时后进行测试可能会产生明显不同的结果。

此外,服务器上的总体负载可能会对测试产生很大影响。即使性能测试是在自动重建之后立即进行的,如果那时还有其他进程正在运行(其他索引重建,夜间数据汇总,大型报告等),那么性能可能与您的手册有很大不同。重建。

我已经经历了您之前看到的模式,并且主要归结为我在这里所说的-用于缓存数据的内存。只要执行缓存分析并定期记录,执行一些缓存分析以查看为每个数据库缓存了哪些数据,就可以排除这种情况,从而使您可以看到一段时间内的缓存。