{for update}触发器可以处理多少条更新记录?

时间:2019-04-05 10:02:10

标签: sql-server database triggers database-trigger eventtrigger

我正在使用Sql Server 2012,并且我有一个表每分钟接收1000-1500行更新(在“活动监视器-最近的昂贵查询”中看到的数量)。此更新来自不同位置的Gps设备,该数字似乎正确(每行代表正在发送更新的活动gps设备)。

在遇到更复杂的失败后,我写了一个非常简单的“ for update trigger”。简单的触发器似乎也不起作用。对于接收到更新(“ LiveInfo”)的表中的每一行,触发器应在表(“ Test”)中插入值“ 1”。

创建并启用触发器后,我观察到以下内容: -未在“测试”表中插入任何记录(因为我应该有一条记录,其中更新的每一行都包含值“ 1”) -好像LiveInfo表(接收大量更新的表)在触发器启动时就停止接收更新。

我已经在SQLServer的本地实例(尽管版本为2016)上创建了具有完全相同结构的表和触发器,并且我使用手动更新而不是自动更新来测试了所有内容。 使用简单的触发器(即使使用更复杂的触发器),一切似乎都可以正常工作。

触发代码:

Create trigger t_Live
on [Accounting].[dbo].[LiveInfo]
for update
as
Begin
    insert into Test
        (TestUpdate)
    values(1)
End

对于这样一个简单的触发器(根据我的研究),不同版本的SQL Server应该无关紧要,并且我开始相信对于该触发器可能有太多的更新(或几乎同时更新了不同的行)。触发处理。

如果任何人都知道为什么触发器不对更新做出反应并一起停止更新将是一个很大的帮助。

编辑:这是更新LiveInfo表的代码。我从活动监视器获取了查询,每分钟执行次数约为1300次:

UPDATE LiveInfo SET
    [LogTimeUTC] = @logTimeUTC,
    [Latitude] = @lat,
    [Longitude] = @lon,
    [Height] = @height,
    [SolutionType] = @solType,
    [TrackedSats] = @trackedSats,
    [PDOP] = @pdop,
    [MountPointName] = @mountPointName,
    [FixedBEIDOU] = @fixedBEIDOU,
    [FixedQZSS] = @fixedQZSS,
    [FixedIRNSS] = @fixedIRNSS
WHERE [LoginWithOrganization] = @loginWithOrg

0 个答案:

没有答案