我在运行proc时出错了。通过SSIS..。错误:
执行SQL错误:执行查询"Exec clk.id_Process?,?,?“失败:“此时Server数据库引擎的实例无法获得锁资源。当活动用户较少时,请重新运行您的语句。请数据库管理员检查此实例的锁和内存配置,或检查长期运行的事务。”可能的失败原因:查询出现问题、"ResultSet“属性未正确设置、参数未正确设置或连接未正确建立。
我试图通过加入来找出这个问题。
"sys.dm_exec_sessions AS s
INNER JOIN sys.dm_exec_requests AS r ON r.session_id = s.session_id
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS st"
并发现它在更新表时被结构化了。
UPDATE ta
SET ta.id =
CASE
WHEN ta.id=tmp.MergeoldId THEN tmp.MergenewId
ELSE ta.id
END,
ta.Id2=
CASE
WHEN ta.Id2=tmp.MergeoldId THEN tmp.MergenewId
ELSE ta.Id2
END,
ta.Id3=
CASE
WHEN ta.Id3=tmp.MergeoldId THEN tmp.MergenewId
ELSE ta.Id3
END
--SELECT ta.id ,ta.Id2,ta.Id3, tmp.MergeoldId,*
FROM tel.TranAssemble ta WITH (ROWLOCK)
INNER JOIN clk.id_Process tmp WITH (NOLOCK) on (ta.id = tmp.MergeoldId OR ta.Id2=tmp.MergeoldId OR ta.Id3=tmp.MergeoldId )
WHERE tmp.Id >= @MinId AND tmp.Id < @MINID + @BatchSize
有解决办法吗?
发布于 2016-06-23 11:10:35
这些问题是由于内存压力,因为锁管理器将不使用Server可用内存的60 %以上。
Server无法获得锁定资源。造成这种情况的原因有以下任何一种: Server无法从操作系统中分配更多内存,原因要么是其他进程正在使用它,要么是因为服务器正在使用配置了最大服务器内存选项的操作。 锁管理器将不会使用Server可用内存的60 %以上。
通常,SQL server对所有查询(甚至选择)都使用锁,并且对其持有的每个锁(96字节)使用少量的内存。
根据上述知识,您可以使用以下查询开始故障排除。
--this gives you currently running queries holding more locks
select * from sys.dm_exec_requests ec
cross apply
(SELECT request_session_id, COUNT (*) num_locks
FROM sys.dm_tran_locks trn
where ec.session_id=trn.request_session_id
GROUP BY request_session_id
)b
--this gives you locks for allsessions
SELECT request_session_id, COUNT (*) num_locks
FROM sys.dm_tran_locks trn
where ec.session_id=trn.request_session_id
GROUP BY request_session_id
https://stackoverflow.com/questions/37989528
复制相似问题