避免触发死锁的最佳方法是什么?非聚集索引? SQL Server 2012

时间:2015-10-14 18:59:44

标签: sql-server tsql indexing sql-server-2012 deadlock

我有一个具有这种结构的表:

CREATE TABLE Log_File
(
    Hostname CHAR(15) NOT NULL, 
    Line_Number INT NOT NULL, 
    Log_Line VARCHAR(8000) NOT NULL, 

    CONSTRAINT pk_Log_File PRIMARY KEY (Hostname, Line_Number)
)

每个服务器每5秒批量插入大约1000行。每当有批量插入时,触发器就会在INSERTED表上运行,并使用游标迭代log_line个记录并更新另一个表。

当我只有一台服务器写入Log_File表时,我没有任何问题。当我尝试同时向表中写入20个服务器时,我偶尔会遇到死锁错误并且某些计算机上的事务关闭,从而导致该线程被终止。

当我在每台服务器上启动应用程序时,这通常是一个问题,因为它必须扫描Log_File表以找到自己的MAX(Line_Number),因此它知道从哪里开始读取自己的日志文件从

我没有在此表上设置索引。创建聚簇索引还是非聚簇索引会有助于这种情况吗?不幸的是,光标是绝对必要的,因为我需要迭代每条记录以处理岛屿和间隙。

任何有关减少死锁或加快速度的帮助都值得赞赏!

0 个答案:

没有答案