Sql server SQL Server数据库引擎的实例此时无法获取锁资源,无法释放更多资源

Sql server SQL Server数据库引擎的实例此时无法获取锁资源,无法释放更多资源,sql-server,tsql,stored-procedures,common-table-expression,table-variable,Sql Server,Tsql,Stored Procedures,Common Table Expression,Table Variable,我正在尝试运行一个存储过程。在SP中,我创建了两个表变量(通过使用3个CTE)。然后连接两个表并插入到现有表中。我不断收到错误消息,无法获取锁资源。有没有办法解决这个问题?这是我写SP的方式吗 ALTER PROCEDURE [dbo].[CreateDailyAttribution] -- Add the parameters for the stored procedure here @day1 varchar(10) ,@day2 varchar(10) AS BEGIN -- SET N

我正在尝试运行一个存储过程。在SP中,我创建了两个表变量(通过使用3个CTE)。然后连接两个表并插入到现有表中。我不断收到错误消息,无法获取锁资源。有没有办法解决这个问题?这是我写SP的方式吗

ALTER PROCEDURE [dbo].[CreateDailyAttribution]
-- Add the parameters for the stored procedure here
@day1 varchar(10)
,@day2 varchar(10)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

DECLARE @tableUnrealized as table
(
    POFFIC varchar(3)
    ,PACCT varchar(5)
    --,PATYPE varchar(3)
    ,PSDSC1 varchar(100)
    ,ShortDesc varchar(100) 
    ,ChangeInOTE decimal(18,0)
    ,tMinus1_Qty integer
    ,tMinus2_Qty integer
    ,Sector varchar(50)
);

DECLARE @tableRealized as table
(
    POFFIC varchar(3)
    ,PACCT varchar(5)
    --,PATYPE varchar(3)
    ,PSDSC1 varchar(100)
    ,ShortDesc varchar(100) 
    ,Realized decimal(18,0)
    ,Sector varchar(50)
);

您收到的错误表明服务器没有足够的内存,这可能是因为没有足够的物理内存可用,服务器不允许使用足够的内存,或者其他进程使用了太多内存,SQL没有足够的喘息空间

您的查询看起来可能会占用大量内存—可以对其进行调优(一件简单的事情可能是使用#temp tables而不是@table variables,看看这是否减轻了一些内存压力(#temp tables将进入tempdb并命中磁盘,而表变量可能存储在内存中)。如果不了解更多数据和对查询进行更深入的分析,很难说清楚

对此错误有一些其他建议:

解释

SQL Server无法获取锁资源。这可能是由以下原因之一造成的:

  • SQL Server无法从操作系统分配更多内存,这可能是因为其他进程正在使用它,或者是因为服务器在运行时配置了“最大服务器内存”选项
  • 锁管理器将不会使用SQL Server可用内存的60%以上
用户操作

如果怀疑SQL Server无法分配足够的内存,请尝试以下操作:

  • 如果SQLServer中的应用程序正在消耗资源,请尝试停止这些应用程序或考虑在单独的服务器上运行这些应用程序。这将从SQLServer的其他进程中删除释放内存。
  • 如果已配置最大服务器内存,请增加最大服务器内存设置
如果您怀疑锁管理器使用了最大可用内存量,请确定持有最多锁的事务并终止它

以下脚本将标识锁最多的事务:

获取最高会话id,并使用KILL命令终止它


谢谢!…最后我改成了“诱惑者”,而且成功了。
SELECT request_session_id, COUNT (*) num_locks
FROM sys.dm_tran_locks
GROUP BY request_session_id 
ORDER BY count (*) DESC