我有一个具有这种结构的表:
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)
,因此它知道从哪里开始读取自己的日志文件从
我没有在此表上设置索引。创建聚簇索引还是非聚簇索引会有助于这种情况吗?不幸的是,光标是绝对必要的,因为我需要迭代每条记录以处理岛屿和间隙。
任何有关减少死锁或加快速度的帮助都值得赞赏!