更新nvarchar(max)时超时到期

时间:2013-10-02 07:21:57

标签: sql sql-server timeoutexception

我有一个有nvarchar(Max)字段的表,它包含大约50,0000的字符 每条记录。当我插入数据时,没关系,但是当更新数据时 发生错误:“超时已到期在编译操作之前经过的超时时间或服务器没有响应”

CREATE TABLE [dbo].[tblJudgementText]( [JudgementID] [int] NOT NULL, 
  [JudgementText] [nvarchar](max) NULL, 
  [Source] [nvarchar](500) NULL, 
  [UserID] [int] NULL, 
  [ModifiedDate] [datetime] NULL, 
  CONSTRAINT [PK_tblJudgementText] PRIMARY KEY CLUSTERED ( [JudgementID] ASC))

我也尝试将连接超时设置为= 100

第二种方式我尝试删除第一条记录并插入新记录但是为了删除记录它会抛出相同的错误

2 个答案:

答案 0 :(得分:0)

SQL Server通常不会丢失错误。无论您使用何种客户端API,客户端都会抛出错误。一些客户端API,例如。托管的SqlClient,将默认请求超时设置为30秒,请参阅SqlCommand.CommandTimeout,在此时间过后,他们中止请求。

所以事实上你似乎遇到了性能问题,你的UPDATE语句可能需要超过30秒。我们无法猜测问题是什么,只有你掌握了正在发生的事情的信息。将此视为性能问题,请阅读Waits and Queues并尝试应用其方法。阅读Understanding how SQL Server executes a query以了解要查找的内容。

我的物理能力告诉我你的UPDATE WHERE子句包含导致扫描的non-sargable条件。这或者阻止锁定或者只是在IO上超时,即使我的pshyhic力量也无法用任何信息来计算这个......

发布extact表定义,确切的UPDATE语句和execution plan(XML!,而不是它的图片)。

答案 1 :(得分:0)

您是从SQL Server客户端更新还是以编程方式进行更新...? 在给出更新说明之前,尝试给'select .. for update'。

如果没有其他限制,您甚至可以考虑删除记录并插入新记录。