Существует ли ограничение на количество обновляемых записей, которое может обработать триггер «для обновления»? - PullRequest
2 голосов
/ 05 апреля 2019

Я использую Sql Server 2012, и у меня есть таблица, которая получает от 1000 до 1500 обновлений строк в минуту (количество, отображаемое в мониторе активности - последние дорогие запросы).Эти обновления поступают с устройств GPS в разных местах, и число кажется правильным (каждая строка представляет активное устройство GPS, отправляющее обновления).

Я написал очень простой «триггер обновления» после сбоя с более сложными,Простой триггер тоже не работает.Триггер должен вставить значение «1» в таблицу («Тест») для каждой строки, обновленной в таблице, получающей обновления («LiveInfo»).

После создания и включения триггера я заметил следующее:- никакие записи не вставлены в тестовую таблицу (поскольку у меня должна была быть запись, содержащая значение «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.Я получил запрос от Activity Monitor и имеет около 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
...