powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Тормоза в триггере
8 сообщений из 8, страница 1 из 1
Тормоза в триггере
    #38208317
ankalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток!
Простейший update в after statement триггере выполняется более секунды. Если вынести его из триггера, то он выполняется за 0,008 сек. Как можно увидеть план выполнения триггера? Выполнить rebind для trigger package с опцией explain(yes)?
DB2 10 for z/OS
...
Рейтинг: 0 / 0
Тормоза в триггере
    #38208342
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ankalexДоброго времени суток!
Простейший update в after statement триггере выполняется более секунды. Если вынести его из триггера, то он выполняется за 0,008 сек. Как можно увидеть план выполнения триггера? Выполнить rebind для trigger package с опцией explain(yes)?
DB2 10 for z/OS

А можно код триггера сюда прикрепить?
...
Рейтинг: 0 / 0
Тормоза в триггере
    #38208380
ankalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TRIGGER T1_U
AFTER UPDATE ON T1
REFERENCING    NEW TABLE AS NEW_T
  	           OLD TABLE AS OLD_T
FOR EACH STATEMENT MODE DB2SQL
NOT SECURED
BEGIN ATOMIC
UPDATE T2
SET OK=0
WHERE ID IN (SELECT ID FROM T3 WHERE ID_SEARCH IN (SELECT ID_SEARCH FROM NEW_T WHERE ID_SEARCH IS NOT NULL));	
END;



По всем используемым в запросе полям есть индексы.
Кроме того, если в условие WHERE написать константу, а
Код: sql
1.
SELECT ID FROM T3 WHERE ID_SEARCH IN (SELECT ID_SEARCH FROM NEW_T WHERE ID_SEARCH IS NOT NULL)

перенести в блок присваивания значения переменной OK, то триггер отрабатывает также за 0,008 сек.
...
Рейтинг: 0 / 0
Тормоза в триггере
    #38208400
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ankalex
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TRIGGER T1_U
AFTER UPDATE ON T1
REFERENCING    NEW TABLE AS NEW_T
  	           OLD TABLE AS OLD_T
FOR EACH STATEMENT MODE DB2SQL
NOT SECURED
BEGIN ATOMIC
UPDATE T2
SET OK=0
WHERE ID IN (SELECT ID FROM T3 WHERE ID_SEARCH IN (SELECT ID_SEARCH FROM NEW_T WHERE ID_SEARCH IS NOT NULL));	
END;



По всем используемым в запросе полям есть индексы.
Кроме того, если в условие WHERE написать константу, а
Код: sql
1.
SELECT ID FROM T3 WHERE ID_SEARCH IN (SELECT ID_SEARCH FROM NEW_T WHERE ID_SEARCH IS NOT NULL)

перенести в блок присваивания значения переменной OK, то триггер отрабатывает также за 0,008 сек.

А каков размер (кол-во строк) в таблице T3, может быть индекс не подтягивается ID_SEARCH IN - сопоставимо множеству условий or.

Условие нельзя без In переписать как то так?
Код: plsql
1.
2.
3.
4.
SELECT T2.ID FROM T2,T3, NEW_T 
WHERE T3.ID_SEARCH  = NEW_T.ID_SEARCH 
and NEW_T.ID_SEARCH IS NOT NULL
and T2.ID = T3.Id
...
Рейтинг: 0 / 0
Тормоза в триггере
    #38209433
m72
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m72
Гость
ankalexКроме того, если в условие WHERE написать константу, ...
Как в db2 for z/OS не знаю,
но в db2 LUW была аналогичная проблема при сравнении полей, допускающих NULL
с полями NOT NULL или константами.

Решилась явным приведением NULL-able полей, т.е. вместо
some_table.some_filed = some_declared_variable
использовал
COALESCE(some_table.some_filed, 0) = some_declared_variable
...
Рейтинг: 0 / 0
Тормоза в триггере
    #38210480
ankalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу переписывания запроса - пробовал, ускорялось в 2 раза, а надо - в 100.
По поводу использования COALESCE - в этом случае ведь индекс не подхватится.
А вообще, для теста я делал update, при котором
Код: sql
1.
SELECT ID_SEARCH FROM NEW_T WHERE ID_SEARCH IS NOT NULL

не возвращает строк, и, тем не менее, триггер всегда выполнялся более полусекунды.
...
Рейтинг: 0 / 0
Тормоза в триггере
    #38210500
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ankalexПо поводу переписывания запроса - пробовал, ускорялось в 2 раза, а надо - в 100.
По поводу использования COALESCE - в этом случае ведь индекс не подхватится.
А вообще, для теста я делал update, при котором
Код: sql
1.
SELECT ID_SEARCH FROM NEW_T WHERE ID_SEARCH IS NOT NULL

не возвращает строк, и, тем не менее, триггер всегда выполнялся более полусекунды.

Можно было бы посоветовать поиграться с Optimization level или уровень изоляции понизить, но хрен там - это же DB2 м в триггере это запрещено!
...
Рейтинг: 0 / 0
Тормоза в триггере
    #38213078
sadsad_at_tomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ankalex,

Можно сделать EXPLAIN PACKAGE для пакета триггера и посмотреть план запроса.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Тормоза в триггере
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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