Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 sqlserver数据库事务死锁;VisualStudio插入过程_Visual Studio 2010_Sql Server 2008_Database Deadlocks - Fatal编程技术网

Visual studio 2010 sqlserver数据库事务死锁;VisualStudio插入过程

Visual studio 2010 sqlserver数据库事务死锁;VisualStudio插入过程,visual-studio-2010,sql-server-2008,database-deadlocks,Visual Studio 2010,Sql Server 2008,Database Deadlocks,我有一个sql server数据库设置,它接受使用线程运行的visual studio应用程序中的插入事务。现在事务陷入僵局,我有一个解决办法,当VisualStudio2010代码检测到超时时,它将重新尝试插入数据。 查看我设置的文本日志,这种情况发生得太频繁,并导致性能问题。 一些在线资源表明找到了有问题的事务并将其终止,但是如果我的应用程序依赖于在数据库中获得的结果,那么这可能不是一个选项。有没有关于如何处理这一问题的建议。我在VisualStudion2010中使用并行Taskfacto

我有一个sql server数据库设置,它接受使用线程运行的visual studio应用程序中的插入事务。现在事务陷入僵局,我有一个解决办法,当VisualStudio2010代码检测到超时时,它将重新尝试插入数据。 查看我设置的文本日志,这种情况发生得太频繁,并导致性能问题。 一些在线资源表明找到了有问题的事务并将其终止,但是如果我的应用程序依赖于在数据库中获得的结果,那么这可能不是一个选项。有没有关于如何处理这一问题的建议。我在VisualStudion2010中使用并行Taskfactory,所以在任何给定的时间至少有1000个线程在运行

要查看的一些代码:我的插入代码

任何想法都值得赞赏

sql表模式

Table PostFeed

 id          int    
 entryid     varchar(100)
 feed        varchar(MAX)
 pubdate     varchar(50)
 authorName  nvarchar(100)
 authorId    nvarchar(100)
 age         nvarchar(50)
 locale      nvarchar(50)
 pic         nvarchar(50)
 searchterm  nvarchar(100)
 dateadded   datetime

 PK - entryid + searchterm     
用于插入的存储过程 因此,它会执行一系列插入操作,并依赖主键约束进行重复检查

完成表格创建

USE [Feeds]
GO
/****** Object:  Table [dbo].[PostFeed]    Script Date: 09/21/2011 11:21:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[PostFeed](
[id] [int] IDENTITY(1,1) NOT NULL,
[entryId] [varchar](100) NOT NULL,
[feed] [varchar](max) NULL,
[entryContent] [nvarchar](max) NULL,
[pubDate] [varchar](50) NOT NULL,
[authorName] [nvarchar](100) NOT NULL,
[authorId] [nvarchar](100) NULL,
[age] [nvarchar](50) NULL,
[sex] [nvarchar](50) NULL,
[locale] [nvarchar](50) NULL,
[pic] [nvarchar](100) NULL,
[fanPage] [nvarchar](400) NULL,
[faceTitle] [nvarchar](100) NULL,
[feedtype] [varchar](50) NULL,
[searchterm] [nvarchar](400) NOT NULL,
[clientId] [nvarchar](100) NULL,
[dateadded] [datetime] NULL,
[matchfound] [nvarchar](50) NULL,
[hashField]  AS ([dbo].[getMd5Hash]([entryId])),
  CONSTRAINT [PK_Feed] PRIMARY KEY CLUSTERED 
 (
[entryId] ASC,
[searchterm] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, 
IGNORE_DUP_KEY = OFF,       ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
 GO SET ANSI_PADDING OFF
 GO
我尝试导出死锁图,但无法使其正常工作,因此这里有几行跟踪

Lock:Timeout    60468       sa  0X01    247 G01 sa  2011-09-   21 16:00:44.750   1:4557807  3463314605  .Net SqlClient Data Provider    0   0XEF8B45000100000000000000070006    22164   7   postFeeds    0  2011-09-21 16:00:44.750 1   G02     0 - LOCK    8 - IX          0   72057594075152384   1 - TRANSACTION 0   6 - PAGE        
Lock:Timeout    60469       sa  0X01    478 G01 sa  2011-09-   21 16:00:44.887  (7bf23fc490ce)  3463299315  .Net SqlClient Data Provider    0   0X3802000000017BF23FC490CE070007    17900   7   postFeeds   0   2011-09-21 16:00:44.887 1   G02     0 - LOCK    5 - X           0   72057594075152384   1 - TRANSACTION 0   7 - KEY     
Lock:Timeout    60470       sa  0X01    803 G01 sa  2011-09-   21 16:00:44.887  (379349b72c77)  3463296982  .Net SqlClient Data    Provider 0   0X380200000001379349B72C77070007    17900   7   postFeeds   0   2011-09-21 16:00:44.887 1   G02     0 - LOCK    5 - X           0   72057594075152384   1 - TRANSACTION 0   7 - KEY     
Lock:Timeout    60471       tdbuser 0X048D73EF643661429B907E6106F78358  93  G01 tdbuser 2011-09-21 16:02:41.333 1:14386936  3463346220  .Net SqlClient Data Provider    0   

我也遇到过同样的情况,插入一船平行线程的记录。为了避免死锁问题,我在插入时指定了一个表锁

Insert dbo.MyTable WITH(TABLOCKX) (Column1)
Values ( SomeValue);

我试着使用lowel级别的锁,但仍然出现死锁。TabLockX降低了一些吞吐量,但它仍然比串行插入快一吨,并且没有更多的死锁。

SQL是必需的。导致死锁的表和正在运行的查询的粗略模式。你在用什么,你做过吗?我没有指定隔离级别,我认为它更悲观。就像我说的,我只是在超时时重复insert。我没有设置自动死锁跟踪,只是偶尔手动检查是否有死锁,然后杀死它们。我将集中阅读这些内容。感谢您的应用程序基本上是向数据库中插入大量内容,而没有其他任何东西(没有事先进行查找以检查是否存在或检索id等)导致死锁?抱歉,没有,它会进行插入,如果它收到基于主键的重复错误,则会终止transactionran跟踪,并且无法找到死锁;那么为什么我的事务有时会超时..我将运行更长时间的跟踪并发回