1

ストアドプロシージャを実行しようとしています。 SPでは、3つのCTEを使用して2つのテーブル変数を作成します。次に、2つのテーブルを結合し、既存のテーブルにINSERT INTOを挿入します。私はエラーを取得し続けることができませんロックリソースを取得します。どのように私はこれを修正することができる任意のアイデア?それが私のSPを書いたのですか?SQL Serverデータベースエンジンのインスタンスは、この時点でLOCKリソースを取得できません。さらにリソースを解放できません。

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) 
); 

答えて

1

あなたが取得しているエラーは、サーバーがない十分な物理メモリが利用可能であるので、十分なメモリがサーバーで使用するために許可されるか、十分なメモリを持っていない、または他のプロセスがあまりにも使用していることを示しています多くのメモリとSQLは十分な呼吸の余地がありません。

メモリを大量に使用する可能性があるように見えます。@table変数ではなく#tempテーブルを使用して、メモリの負荷を軽減できるかどうかを確認することができます(#tempテーブルはtempdbに入り、ディスクにヒットしますが、テーブル変数はメモリに格納されます)。あなたのデータとクエリの詳細な分析を知らなくても、言うことは本当に難しいです。

MSDNこのエラー:

Explanation

SQL Server cannot obtain a lock resource. This can be caused by either of the following reasons:

  • SQL Server cannot allocate more memory from the operating system, either because other processes are using it, or because the server is operating with the max server memory option configured.
  • The lock manager will not use more than 60 percent of the memory available to SQL Server.

User Action

If you suspect that SQL Server cannot allocate sufficient memory, try the following:

  • If applications besides SQL Server are consuming resources, try stopping these applications or consider running them on a separate server. This will remove release memory from other processes for SQL Server.
  • If you have configured max server memory, increase max server memory setting.

If you suspect that the lock manager has used the maximum amount of available memory identify the transaction that is holding the most locks and terminate it.

The following script will identify the transaction with the most locks:

SELECT request_session_id, COUNT (*) num_locks 
FROM sys.dm_tran_locks 
GROUP BY request_session_id 
ORDER BY count (*) DESC 

Take the highest session id, and terminate it using the KILL command.

+0

ありがとうございました!... #tempTablesに変更されました。 – solarissf