为特定存储过程删除了SQL Server连接

时间:2014-02-09 11:29:00

标签: sql-server semaphore

执行SQL语句时,我有时会遇到错误

客户:

  

“执行Transact-SQL语句时发生异常或   批量。接收结果时发生传输级错误   从服务器。 (提供者:TCP提供者,错误:0 - 信号量   超时期限已过期)“

SQL Server:

  

“2014-02-09 11:02:31.81服务器发生了致命错误   从网络中读取输入流。会议将是   终止(输入错误:64,输出错误:0)。“

我已经设法从我生成的数据库脚本中找到了一致失败的一段SQL,我在部署新版本时运行该脚本(虽然我也在其他地方间歇性地看到错误):

/*************************************************/
/* [dbo].gspFolderDataCache_SEARCH */
/*************************************************/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id =     OBJECT_ID(N'[dbo].gspFolderDataCache_SEARCH') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].gspFolderDataCache_SEARCH
GO

CREATE PROCEDURE [dbo].gspFolderDataCache_SEARCH (@FolderId AS [uniqueidentifier],   @PerformanceFolderId AS [uniqueidentifier], @ShowFolderId AS [uniqueidentifier], @SpaceFolderId AS [uniqueidentifier], @VenueFolderId AS [uniqueidentifier])
AS

SELECT
FolderId, PerformanceFolderId, ShowFolderId, SpaceFolderId, VenueFolderId
FROM
[dbo].[FolderDataCache]
WHERE
([FolderId] = @FolderId OR @FolderId IS NULL)
 AND ([PerformanceFolderId] = @PerformanceFolderId OR @PerformanceFolderId IS NULL)
 AND ([ShowFolderId] = @ShowFolderId OR @ShowFolderId IS NULL)
 AND ([SpaceFolderId] = @SpaceFolderId OR @SpaceFolderId IS NULL)
 AND ([VenueFolderId] = @VenueFolderId OR @VenueFolderId IS NULL)

GO

虽然这个几乎相同的脚本每次都有效:

/*************************************************/
/* [dbo].gspDiscounts_SEARCH */
/*************************************************/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].gspDiscounts_SEARCH') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].gspDiscounts_SEARCH
GO

CREATE PROCEDURE [dbo].gspDiscounts_SEARCH (@DiscountId AS [uniqueidentifier], @DiscountName AS [nvarchar](50), @DiscountDescription AS [nvarchar](max))
AS

SELECT
    DiscountId, DiscountName, DiscountDescription
FROM
    [dbo].[Discounts]
WHERE
    ([DiscountId] = @DiscountId OR @DiscountId IS NULL)
     AND ([DiscountName] LIKE @DiscountName OR @DiscountName IS NULL)
     AND ([DiscountDescription] LIKE @DiscountDescription OR @DiscountDescription IS NULL)

GO

在此特定示例中,我的数据库维护工具正在执行SQL,我使用SQL Server管理对象来运行脚本,但在使用企业库数据访问块的主应用程序中发生相同的错误,所以我认为它不在C#代码中。

SQL Server(SQL Server v2008 R2)和客户端都位于同一VPC内的Amazon EC2服务器上。当Web服务器位于VPC之外并运行Windows Server 2008时,不会发生此问题。两台服务器现在都在Windows Server 2012上

因为失败的语句与有效的语句非常相似,并且因为它在客户端和服务器上都显示为网络错误,所以我认为它可能介于两者之间......我已经转向了Windows两台服务器上的防火墙关闭这没有帮助。

到底是怎么回事?

2 个答案:

答案 0 :(得分:0)

“你有没有尝试过再打开它?”

不是我第一次使用生产服务器,但现在在午夜过了25分钟,我可以确认(通过应用所有挂起的Windows更新)似乎已经解决了问题。

Tch的。

答案 1 :(得分:0)

看起来像是两件事的组合:

  1. 默认MTU为1500,对于亚马逊服务器来说太高了
  2. 阻止ICMP(AWS安全组的默认设置)会停止协商合适的MTU。
  3. 到目前为止,设置较低的MTU并启用IMCP似乎已经修复了它。