并发 SQL 插入正在阻塞到表

Posted

技术标签:

【中文标题】并发 SQL 插入正在阻塞到表【英文标题】:Concurrent SQL Insert Are Blocking to a Table 【发布时间】:2013-09-27 11:54:38 【问题描述】:

我正在将 SQL 2005 用于应用程序。就我而言,通过不同的进程生成了许多请求,并将记录插入到一​​个表中。但是当我通过 sp_who2 活动过程检查数据库中运行的进程时,我发现插入被其他插入语句阻塞并导致进程变慢。有什么方法可以避免并发插入到一张表中的阻塞/死锁。下面是我的表的结构。

`CREATE TABLE [dbo].[Tbl_Meta_JS_Syn_Details](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [EID] [int] NULL,
    [Syn_Points_ID] [int] NULL,
    [Syn_ID] [int] NULL,
    [Syn_Word_ID] [int] NULL,
    [Created_Date_Time] [datetime] NULL CONSTRAINT [DF_Tbl_JS_Syn_Details_Created_Date_Time]  DEFAULT (getdate()),
 CONSTRAINT [PK_Tbl_JS_Syn_Details] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]`

【问题讨论】:

@Andomar 您能否解释一下“ID 上的主键可能有帮助”。我已经在 ID 列上使用主键 你说得对,我删评论! 如果对您有帮助,请查看以下链接:[在此处输入链接描述][1] [1]:***.com/questions/14913953/… 【参考方案1】:

如果许多进程试图插入一张表,总会出现阻塞。但是,可以使用一些设置来限制时间。

您使用什么隔离级别?默认? http://technet.microsoft.com/en-us/library/ms173763.aspx

您能否在这篇文章中包含以下信息:

1 - 有多少进程同时运行(插入)?

2 - 您使用的是什么类型的磁盘子系统? RAID 5 或只是一个简单的磁盘。

3 - 您使用的是哪个版本的 SQL Server?

4 - 数据库的增长选项是什么?

5 - 当前数据库有多满?

6 - 实例文件初始化是否开启?

鉴于以上问题的答案,您可以优化插入过程。

【讨论】:

以上是关于并发 SQL 插入正在阻塞到表的主要内容,如果未能解决你的问题,请参考以下文章

错误查询从 jTextField 插入到表 sql

sql将查询结果插入到表的每一列中

C#/SQL 监听器告诉我一行是不是已插入到表中

将对象值插入到表 PL/SQL 中而不需要指定属性

sql 将查询的结果集一次性插入到表变量中

使用快照隔离防止 SQL 视图被冗长的删除/插入事务阻塞