powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос о тормазах при применении триггера
8 сообщений из 8, страница 1 из 1
Вопрос о тормазах при применении триггера
    #32037399
Yan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yan
Гость
Кто-нибудб может объяснить в чем проблема?
Ниже приведенный триггер слишком уж тормозит выполнение UPDATE'а.
Триггер обновляет таблицу Complect на изменние таблицы ListDefect.

Выполняю этот UPDATE:

UPDATE dbo.ListDefect
SET G=1, B=1, R=1, Ws='', N=1, O=1
WHERE IDGPA=6 AND IDSTR=1

Проходит в среденем три секунды, а бывает так чтои не дождаться
(покрайней мере до 2-3 минут доходило).

Что не так в триггере или есть какие-то другие проблемы?

А вот и сам злополучный триггер:

CREATE TRIGGER AfterUpdate ON dbo.ListDefect
FOR UPDATE
AS
UPDATE dbo.Complect
SET dbo.Complect.G=LD.G,
dbo.Complect.B=LD.B,
dbo.Complect.R=LD.R,
dbo.Complect.Ws=LD.Ws,
dbo.Complect.N=LD.N,
dbo.Complect.O=LD.O
FROM ListDefect LD
WHERE dbo.Complect.IDGPA=LD.IDGPA AND
dbo.Complect.IDSTR=LD.IDSTR

Вот статистика выполнения

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.
Table 'ListDefect'. Scan count 1, logical reads 23, physical reads 0, read-ahead reads 0.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.
Table 'Complect'. Scan count 1, logical reads 161376, physical reads 0, read-ahead reads 0.
Table 'ListDefect'. Scan count 1, logical reads 555, physical reads 0, read-ahead reads 0.
SQL Server Execution Times:
CPU time = 2391 ms, elapsed time = 2756 ms.
SQL Server Execution Times:
CPU time = 2391 ms, elapsed time = 2757 ms.

(1 row(s) affected)

SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.
...
Рейтинг: 0 / 0
Вопрос о тормазах при применении триггера
    #32037402
Фотография Hermitap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблемму твою не решу, однако я закрыл свои подобные проблеммы переходом на все апдейты через сохраненку и отказ от тригерров. Больше писать, зато проблемм больше не было никогда.
...
Рейтинг: 0 / 0
Вопрос о тормазах при применении триггера
    #32037407
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это настораживает - "logical reads 161376"
Стоит изменить либо алгоритм либо структуру данных, чтобы из триггера не было таких больших телодвижений сервера.
...
Рейтинг: 0 / 0
Вопрос о тормазах при применении триггера
    #32037419
Alexandr Kapustin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем в триггере идет апдейт по всей таблице???
надо использовать inserted/deleted таблицы, чтобы уменьшить кол-во записей...
кроме того, индексы по таблицам есть?
...
Рейтинг: 0 / 0
Вопрос о тормазах при применении триггера
    #32037433
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не покатит?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE TRIGGER AfterUpdate
ON dbo.ListDefect 
FOR UPDATE 
AS 
UPDATE C SET
  C.G = I.G, 
  C.B = I.B, 
  C.R = I.R, 
  C.Ws = I.Ws, 
  C.N = I.N, 
  C.O = I.O 
FROM dbo.Complect C, Inserted I
WHERE
  C.IDGPA=I.IDGPA AND 
  C.IDSTR=I.IDSTR
...
Рейтинг: 0 / 0
Вопрос о тормазах при применении триггера
    #32037473
Yan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yan
Гость
Алгоритм прокатил,спасибо.
Однако выяснилось что триггер должен выполняться при определенных условиях.
Типа:
ListDefect.Kol_str=G+B+R+N+O
ListDefect.CloseDef<>1
Как бы эти условия обработать в томже триггере, и он не производил UPDATE таблицы Complect?
...
Рейтинг: 0 / 0
Вопрос о тормазах при применении триггера
    #32037570
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE TRIGGER AfterUpdate
ON dbo.ListDefect 
FOR UPDATE 
AS 
UPDATE C SET
  C.G = I.G, 
  C.B = I.B, 
  C.R = I.R, 
  C.Ws = I.Ws, 
  C.N = I.N, 
  C.O = I.O 
FROM dbo.Complect C, Inserted I
WHERE
  C.IDGPA=I.IDGPA
  AND C.IDSTR=I.IDSTR
  AND ListDefect.Kol_str=G+B+R+N+O 
  AND ListDefect.CloseDef<> 1  
...
Рейтинг: 0 / 0
Вопрос о тормазах при применении триггера
    #32037572
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... в смысле
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE TRIGGER AfterUpdate
ON dbo.ListDefect 
FOR UPDATE 
AS 
UPDATE C SET
  C.G = I.G, 
  C.B = I.B, 
  C.R = I.R, 
  C.Ws = I.Ws, 
  C.N = I.N, 
  C.O = I.O 
FROM dbo.Complect C, Inserted I
WHERE
  C.IDGPA = I.IDGPA
  AND C.IDSTR = I.IDSTR
  AND I.Kol_str = I.G + I.B + I.R + I.N + I.O 
  AND I.CloseDef !=  1 
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос о тормазах при применении триггера
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]