Ren*_*ger 0 sql-server sql-server-agent
我正在使用 SQL 代理来安排过程的执行。
第一次执行该过程时,它运行没有问题。第二次执行作业(步骤)时,它不会完成。
以下 SQL 语句的变体告诉我正在运行的语句是create procedure xyz...
(其中xyz
是作业应该运行的过程的名称)。
select
prc.loginame,
prc.program_name,
sql.text sql_text
from
sys.sysprocesses prc cross apply
sys.dm_exec_sql_text(prc.sql_handle) sql
Run Code Online (Sandbox Code Playgroud)
我在程序(或其他方式)中没有执行任何 DDL,并且想知道是什么导致作业尝试创建程序以及作业为何挂起?
看到弹出的 procedure create 语句是这里的预期行为,它与作业代理本身无关。并且作业步骤不是重新创建过程,它只是运行它。
例子
如果我创建这个过程:
CREATE PROC dbo.Waitfordelay
as
WAITFOR DELAY '00:00:10';
SELECT 5;
Run Code Online (Sandbox Code Playgroud)
然后在查询窗口中运行它:
EXEC dbo.Waitfordelay;
Run Code Online (Sandbox Code Playgroud)
然后运行您的查询:
loginame program_name sql_text
Domain\User Microsoft SQL Server Management Studio - Query CREATE PROC dbo.Waitfordelay as WAITFOR DELAY '00:00:10'; SELECT 5
Run Code Online (Sandbox Code Playgroud)
创建过程也会显示。
如果您想了解有关过程调用的更多信息,您可以使用类似dbcc inputbuffer
dbcc inputbuffer(spid)
Run Code Online (Sandbox Code Playgroud)
对我来说这返回:
EventType Parameters EventInfo
Language Event 0 EXEC dbo.Waitfordelay
Run Code Online (Sandbox Code Playgroud)
或者运行sp_whoisactive并将参数@get_outer_command
设置为 1。
exec [dbo].[sp_WhoIsActive]
@get_outer_command = 1;
enter code here
Run Code Online (Sandbox Code Playgroud)
结果示例:
dd hh:mm:ss.mss session_id sql_text sql_command
00 00:00:00.733 54 <?query --WAITFOR DELAY '00:00:10'; --?> <?query --EXEC dbo.Waitfordelay --?>
Run Code Online (Sandbox Code Playgroud)
运行 sp_whoisactive 还可能为您提供有关程序卡在哪个部分的更多信息。
我在程序(或其他方式)中没有执行任何 DDL,并且想知道是什么导致作业尝试创建程序以及作业为何挂起?
创建过程部分已清除,工作挂起的实际问题将是猜测,没有可重现的示例或更多信息。
该作业正在运行查询吗?参数嗅探会成为这里的问题吗?
运行作业时有哪些等待类型?CPU 时间/读取量是多少?
当作业步骤卡住时运行以下查询(您的已调整)可能会提供更多信息:
SELECT
req.total_elapsed_time,
req.cpu_time,
req.reads,
req.last_wait_type
,req.wait_type,
req.wait_time,
sql.text sql_text
FROM
sys.dm_exec_requests req
cross apply sys.dm_exec_sql_text(req.sql_handle) sql;
Run Code Online (Sandbox Code Playgroud)
我们需要更多细节才能知道实际问题是什么。
归档时间: |
|
查看次数: |
95 次 |
最近记录: |