2012-04-23 14 views
0

SQLストアドプロシージャに間欠的な問題があり、SQL dBから製品を取得しています。私たちには約3500人のアクティブユーザーがいて、通常はこの手順で約15-30人のユーザーが一度にログインします。先週、私は以下のようなタイムアウト期限切れのメッセージを取得しています。SQLタイムアウト期間が経過しました - 断続的な問題

System.Data.SqlClient.SqlException:タイムアウトが切れています。操作が完了する前にタイムアウト時間が経過したか、サーバーが応答していません。 System.Data.SqlClient.SqlConnection.OnError(SqlException例外、ブールブレークコネクション)System.Data.SqlClient.SqlInternalConnection.OnError(SqlException例外、ブールブレークコネクション)at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)at System System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior、SqlCommand cmdHandler、SqlDataReader dataStream、BulkCopySimpleResultSet、bulkCopyHandler、TdsParserStateObject stateObj)System.Data.SqlClient.SqlDataReader.ConsumeMetaData()at System.Data.SqlClient.SqlDataReader.get_MetaData()(System) System.Data.SqlClient.SqlCommandでSystem.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior、RunBehavior runBehavior、Boolean returnStream、Boolean async)の.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds、RunBehavior runBehavior、String resetOptionsString) RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior runBehavior、Boolean returnStream、String meth System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehaviorの動作、Stringメソッド)のSystem.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior runBehavior、Boolean returnStream、Stringメソッド)のSystem.Data.SqlClient.SqlCommand.ExecuteReader(Od、DbAsyncResult結果) System.Data.Common.DbDataAdapter.FillInternalでSqlClient.SqlCommand.ExecuteDbDataReader System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(たCommandBehavior挙動)における(たCommandBehavior動作)(データセット、データセット、データテーブル[]のDataTable、のInt32 startRecordたSystem.Data.Common.DbDataAdapterでSystem.Data.Common.DbDataAdapter.Fill(データセットデータセットのInt32 startRecord、MaxRecordsプロパティのInt32、文字列srcTable、のIDbCommandコマンドのCommandBehavior動作)において、のInt32 MaxRecordsプロパティ、列srcTable、のIDbCommandコマンドのCommandBehavior動作) .Fill(DataSet dataSet、String srcTable)、Clear.PopulateRegularLineList(Int32 PageIndex)(e:\ Websites \

SPは一度に12の製品に戻します(またはそれ以上のドロップダウンボックスが選択されている場合)、そして私はそれを手動で実行するとすぐに実行されます。これは、過去1週間に20時に別のユーザーがいて、1日のうちに異なる時間に発生したため、プロシージャを実行したり、テストアカウントを使用してサイトを参照したりするときにエラーを再現できませんでした。根本的な問題の解決策(NOLOCKの貧弱なデータへの影響はもちろんのこと)ではなく、私はNOLOCKを追加したり、コマンドタイムアウトを増やすと、それを修正することをどこかで読んだことがあるが、それは唯一の迅速なカバーアップです。

製品を表示するSQLの一部はここにある:

INSERT INTO @Products (WWHEAD, WWPROD, WWDESC, CTNQTY, PRC1, PRC4, [FILENAME], DPQIS, QTYL, FileReference, LineId, Price5, PriceGroup, Dimensions)     
(SELECT A.WWHEAD, A.WWPROD, A.WWDESC, A.CTNQTY, 
     CASE WHEN @IsPrice5 = 5 THEN LTRIM(RTRIM(A.Price5)) ELSE LTRIM(RTRIM(A.PRC1)) END,   
     CASE WHEN @IsPrice5 = 5 THEN A.Price5 ELSE A.PRC4 END, 
     [FILENAME], 
     (CAST((DPQIS-DPALOC) AS INT)), 
     D.QTY, 
     'WebImage', 
     LineId, 
     CASE WHEN @IsPrice5 = 5 OR A.Price5 = A.PRC4 THEN NULL ELSE A.PRICE5 END, 
     LTRIM(RTRIM(PG.PriceCode)) + ' ' + LTRIM(RTRIM(PG.GroupDesc)) + ' ' + LTRIM(RTRIM(PG.DiscDesc)), 
     Dimensions 
FROM PRODUCTS A 
     INNER JOIN STOCK C ON A.WWPROD = C.DPPROD AND DPDEPO = 'CH' 
     INNER JOIN PROD_COPY W ON A.WWPROD = W.WWPROD 
     INNER JOIN PRODGRP PD ON PD.GPNUM = W.WWPRGP 
     LEFT OUTER JOIN ORDERS D ON D.OrderID = @OrdId AND A.WWPROD = D.ProdCode 
     LEFT OUTER JOIN PRGRP PG ON A.WWPCGP = PG.PriceCode 
     LEFT OUTER JOIN PRODALT_GRP X ON X.ProdCode = A.WWPROD 
WHERE A.WWBONS = 'B' 
AND  A.WSID = 'WS' 
AND  (LTRIM(RTRIM(A.WWHEAD)) = LTRIM(RTRIM(@CatHead)) OR ISNULL(@CatHead, '0') = '0') 
AND  (LTRIM(RTRIM(A.WWSBHD)) = LTRIM(RTRIM(@CatSub)) OR ISNULL(@CatSub, '0') = '0')  
AND  (LEFT(LTRIM(RTRIM(A.WWPRGP)), 2) = LTRIM(RTRIM(@BrandT1)) OR ISNULL(@BrandT1, '0') = '0') 
AND  (LTRIM(RTRIM(A.GRPTR2)) = LTRIM(RTRIM(@BrandT2)) OR ISNULL(@BrandT2, '0') = '0') 
AND  (LTRIM(RTRIM(A.GRPTR3)) = LTRIM(RTRIM(@BrandT3)) OR ISNULL(@BrandT3, '0') = '0')   
AND  X.AltGroupCode = @ProductFilter 
AND  A.PRC1 BETWEEN @MinValue AND @MaxValue 
AND  A.WWHEAD <> 'B20' 
AND  (A.WWDESC Like ('%' + @SearchString + '%') OR A.WWPROD LIKE ('%' + @SearchString + '%') 
    OR A.WWPROD IN (SELECT Prodcode FROM WDS..Prod_Keywords INNER JOIN WDS..Keywords ON KeyID = KeywordID WHERE Keyword LIKE ('%' + @SearchString + '%')))       
AND  A.WWBRN NOT IN (SELECT * from WDS.dbo.f_BrandExclusionList(@WebUserName, NULL)) 
AND  CAST(CASE WHEN NDATMM = '' THEN '01' ELSE NDATMM END + '-' 
      + CASE WHEN NDATDD = '' THEN '01' ELSE NDATDD END + '-' 
      + CASE WHEN NDATYY = '' THEN '1900' ELSE NDATYY END AS DATETIME) BETWEEN @threemonths AND GETDATE() 
GROUP BY PD.GPSORT, A.WWHEAD, A.WWPROD, A.WWDESC, A.CTNQTY, A.PRC1, A.PRC4, [FILENAME], C.DPQIS, C.DPALOC, D.QTY, 
     LineId, A.Price5, PG.PriceCode, PG.GroupDesc, PG.DiscDesc, A.WWSBHD, A.WWBRN, 
     A.GRPTR2, A.GRPTR3, A.WWSORT, A.WWPCGP, Dimensions 
HAVING ((A.PRC1 > 20.00 AND ((DPQIS-DPALOC) > 2)) OR (A.PRC1 <= 20.00 AND ((DPQIS-DPALOC) > 8)))) 
ORDER BY PD.GPSORT, A.WWBRN, A.GRPTR2, A.GRPTR3, A.WWPCGP DESC, A.WWHEAD, A.WWSBHD, A.WWSORT, A.WWPROD 

任意のアイデア?前もって感謝します。

答えて

0

関連コードはありますか?どのくらいの同時接続が行われ、実行が完了した後に接続が閉じられていることを確認していますか?

+0

こんにちは、私は元の質問にSQLコードを追加しました。ありがとう – odinel

関連する問題