powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Триггеры... Поделитесь опытом
13 сообщений из 38, страница 2 из 2
Триггеры... Поделитесь опытом
    #34374655
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вот еще для уточнения... 99,99% операций над таблицей2 - это insert/delete/select.... Причем как правило вызываются в ХП... Update практически отсутствует...
...
Рейтинг: 0 / 0
Триггеры... Поделитесь опытом
    #34374703
TORTОпять на те же грабли.... Где архитектурно могу ошибаться?
Есть таблица1, таблица2, таблица3....
При изменении таблицы1, изменяется таблица2.
При изменении таблицы2, изменяется таблица3.
Все это организовал на триггерах... По-моему очень удобно получилось...
Но при тестировании получается, что одна программа, изменяя таблицу1 эксклюзивно блокирует таблицу3... Соответственно все остальные приложения "курят"... К тому же, таблица1 изменяется довольно часто и совсем небольшими порциями...
1.Где чего не так понимаю?
И главное.... Так вообще делают или за это руки "отрывают"....?

Не проще ли в таком случае сделать это через репликацию данных?
Триггеры будут не нужны.
...
Рейтинг: 0 / 0
Триггеры... Поделитесь опытом
    #34374748
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Репликация, по скромному опыту, тоже здорово блокирует данные...
2. Смысл этих изменений (не знаю как по-научному высказаться), в том чтобы сразу отображать сделанные изменения....Например, грохнул документ - удалились(или хотя бы попытались) связанные с ним... Или другой пример, удалил документ - удалились товарные строки, связанные с ним, и как следствие изменились остатки....
...
Рейтинг: 0 / 0
Триггеры... Поделитесь опытом
    #34374830
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TORTгрохнул документ - удалились(или хотя бы попытались) связанные с ним... Или другой пример, удалил документ - удалились товарные строки, связанные с ним, и как следствие изменились остатки....Вы можете поэкспериментировать с:
1. Уровнями оптимизации (3, 5, 7, может даже 2)
2. сделать триггер for each row на таблицу2
3. merge заменить на update

У вас, кстати, версия db2 какая?
...
Рейтинг: 0 / 0
Триггеры... Поделитесь опытом
    #34374841
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DB2 v.8.1.9 for Win
...
Рейтинг: 0 / 0
Триггеры... Поделитесь опытом
    #34374866
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Mark:
1.Насчет уровня оптимизации... Это где его использовать? В SQL внутри триггера? Или при создании триггера?
2. Вы правильно подметили, я использую в триггерах спецификацию FOR EACH STATEMENT... Вы думаете DB2 из-за нее так распространяет блокировки?
3. А вот с update'ом вообще мыслей нет... Мне кажется в данном случае можно попробовать как-нибудь пары моих merge попробовать объединить?
...
Рейтинг: 0 / 0
Триггеры... Поделитесь опытом
    #34375071
TORT1. Репликация, по скромному опыту, тоже здорово блокирует данные...
2. Смысл этих изменений (не знаю как по-научному высказаться), в том чтобы сразу отображать сделанные изменения....Например, грохнул документ - удалились(или хотя бы попытались) связанные с ним... Или другой пример, удалил документ - удалились товарные строки, связанные с ним, и как следствие изменились остатки....

Репликация работает по логам. Т.е. как минимум не будет блокировок на первичную таблицу.
Да и во время записи во вторичные таблицы блокировок должно быть меньше.
Хотя конечно данные во вторичных таблицах будут изменяться с задержкой.

А внешние ключи (Foreign Key) с каскадным удалением никак не применить в этом случае? По описанию вроде самое оно.
...
Рейтинг: 0 / 0
Триггеры... Поделитесь опытом
    #34375139
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TORT1.Насчет уровня оптимизации... Это где его использовать? В SQL внутри триггера? Или при создании триггера?Перед операцией изменения данных в table1
TORT2. Вы правильно подметили, я использую в триггерах спецификацию FOR EACH STATEMENT... Вы думаете DB2 из-за нее так распространяет блокировки?Всяко может быть.
TORT3. А вот с update'ом вообще мыслей нет... Мне кажется в данном случае можно попробовать как-нибудь пары моих merge попробовать объединить?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
merge into DB2ADMIN.saldo as a
using (select podrazd_id, debet_id, debet_partner_id, debet_analitika_id, sum(summa) as summa
from old group by podrazd_id, debet_id, debet_partner_id, debet_analitika_id) as b
on a.podrazd_id = b.podrazd_id
and a.subcount_id = b.debet_id
and a.partner_id = b.debet_partner_id
and a.analitika_id = b.debet_analitika_id
when matched then update set summa_debet = summa_debet - b.summa;
эквивалентно
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
update DB2ADMIN.saldo a
set summa_debet=summa_debet-
(
select sum(summa)
from old b
where 
    a.podrazd_id = b.podrazd_id
and a.subcount_id = b.debet_id
and a.partner_id = b.debet_partner_id
and a.analitika_id = b.debet_analitika_id
)
where exists 
(
select sum(summa)
from old b
where 
    a.podrazd_id = b.podrazd_id
and a.subcount_id = b.debet_id
and a.partner_id = b.debet_partner_id
and a.analitika_id = b.debet_analitika_id
);
...
Рейтинг: 0 / 0
Триггеры... Поделитесь опытом
    #34375167
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Mark:

Вот этот "страшный" SQL будет работать быстрее merge? У Вас был подобный опыт?
...
Рейтинг: 0 / 0
Триггеры... Поделитесь опытом
    #34376660
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Этот триггер один использует действие update... Есть другие, которые добавляют записи, если их нет....
2. А как следует делать, если при изменении таблицы нужно изменять несколько таблиц? Лучше все в один триггер или в несколько?
...
Рейтинг: 0 / 0
Триггеры... Поделитесь опытом
    #34376731
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TORTВот этот "страшный" SQL будет работать быстрее merge? У Вас был подобный опыт?Не надо думать, что если SQL "страшный", то он хуже работает чем "не страшный".
Merge, как правило, хуже оптимизируется, чем update, если merge фактически использутся только для update.
TORT1. Этот триггер один использует действие update... Есть другие, которые добавляют записи, если их нет....
2. А как следует делать, если при изменении таблицы нужно изменять несколько таблиц? Лучше все в один триггер или в несколько?1. Update - самая сложная операция. Вы ее уже оптимизировали?
2. Как удобнее, так и делайте.
...
Рейтинг: 0 / 0
Триггеры... Поделитесь опытом
    #34376768
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Страшный" в смысле необычный для меня... Я exists ни разу в жизни не использовал... Пытаюсь перевести триггеры на FOR EACH ROW... Тестирую чего получается...
...
Рейтинг: 0 / 0
Триггеры... Поделитесь опытом
    #34376834
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Mark

Я как-то всегда делал

update DB2ADMIN.saldo a
set summa_debet=summa_debet-
(
select sum(summa)
from old b
where
a.podrazd_id = b.podrazd_id
and a.subcount_id = b.debet_id
and a.partner_id = b.debet_partner_id
and a.analitika_id = b.debet_analitika_id
)
where (a.podrazd_id, a.subcount_id, a.partner_id, a.analitika_id)
in (select b.podrazd_id, b.debet_id, b.debet_partner_id, b.debet_analitika_id
from old b);

И explain'у это гораздо больше нравится
...
Рейтинг: 0 / 0
13 сообщений из 38, страница 2 из 2
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Триггеры... Поделитесь опытом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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