Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
И вот еще для уточнения... 99,99% операций над таблицей2 - это insert/delete/select.... Причем как правило вызываются в ХП... Update практически отсутствует... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 14:40 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
TORTОпять на те же грабли.... Где архитектурно могу ошибаться? Есть таблица1, таблица2, таблица3.... При изменении таблицы1, изменяется таблица2. При изменении таблицы2, изменяется таблица3. Все это организовал на триггерах... По-моему очень удобно получилось... Но при тестировании получается, что одна программа, изменяя таблицу1 эксклюзивно блокирует таблицу3... Соответственно все остальные приложения "курят"... К тому же, таблица1 изменяется довольно часто и совсем небольшими порциями... 1.Где чего не так понимаю? И главное.... Так вообще делают или за это руки "отрывают"....? Не проще ли в таком случае сделать это через репликацию данных? Триггеры будут не нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 14:51 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
1. Репликация, по скромному опыту, тоже здорово блокирует данные... 2. Смысл этих изменений (не знаю как по-научному высказаться), в том чтобы сразу отображать сделанные изменения....Например, грохнул документ - удалились(или хотя бы попытались) связанные с ним... Или другой пример, удалил документ - удалились товарные строки, связанные с ним, и как следствие изменились остатки.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 14:59 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
TORTгрохнул документ - удалились(или хотя бы попытались) связанные с ним... Или другой пример, удалил документ - удалились товарные строки, связанные с ним, и как следствие изменились остатки....Вы можете поэкспериментировать с: 1. Уровнями оптимизации (3, 5, 7, может даже 2) 2. сделать триггер for each row на таблицу2 3. merge заменить на update У вас, кстати, версия db2 какая? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 15:23 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
DB2 v.8.1.9 for Win ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 15:25 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
To Mark: 1.Насчет уровня оптимизации... Это где его использовать? В SQL внутри триггера? Или при создании триггера? 2. Вы правильно подметили, я использую в триггерах спецификацию FOR EACH STATEMENT... Вы думаете DB2 из-за нее так распространяет блокировки? 3. А вот с update'ом вообще мыслей нет... Мне кажется в данном случае можно попробовать как-нибудь пары моих merge попробовать объединить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 15:32 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
TORT1. Репликация, по скромному опыту, тоже здорово блокирует данные... 2. Смысл этих изменений (не знаю как по-научному высказаться), в том чтобы сразу отображать сделанные изменения....Например, грохнул документ - удалились(или хотя бы попытались) связанные с ним... Или другой пример, удалил документ - удалились товарные строки, связанные с ним, и как следствие изменились остатки.... Репликация работает по логам. Т.е. как минимум не будет блокировок на первичную таблицу. Да и во время записи во вторичные таблицы блокировок должно быть меньше. Хотя конечно данные во вторичных таблицах будут изменяться с задержкой. А внешние ключи (Foreign Key) с каскадным удалением никак не применить в этом случае? По описанию вроде самое оно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 16:22 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
TORT1.Насчет уровня оптимизации... Это где его использовать? В SQL внутри триггера? Или при создании триггера?Перед операцией изменения данных в table1 TORT2. Вы правильно подметили, я использую в триггерах спецификацию FOR EACH STATEMENT... Вы думаете DB2 из-за нее так распространяет блокировки?Всяко может быть. TORT3. А вот с update'ом вообще мыслей нет... Мне кажется в данном случае можно попробовать как-нибудь пары моих merge попробовать объединить? Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 16:37 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
To Mark: Вот этот "страшный" SQL будет работать быстрее merge? У Вас был подобный опыт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 16:43 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
1. Этот триггер один использует действие update... Есть другие, которые добавляют записи, если их нет.... 2. А как следует делать, если при изменении таблицы нужно изменять несколько таблиц? Лучше все в один триггер или в несколько? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2007, 10:29 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
TORTВот этот "страшный" SQL будет работать быстрее merge? У Вас был подобный опыт?Не надо думать, что если SQL "страшный", то он хуже работает чем "не страшный". Merge, как правило, хуже оптимизируется, чем update, если merge фактически использутся только для update. TORT1. Этот триггер один использует действие update... Есть другие, которые добавляют записи, если их нет.... 2. А как следует делать, если при изменении таблицы нужно изменять несколько таблиц? Лучше все в один триггер или в несколько?1. Update - самая сложная операция. Вы ее уже оптимизировали? 2. Как удобнее, так и делайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2007, 10:49 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
"Страшный" в смысле необычный для меня... Я exists ни разу в жизни не использовал... Пытаюсь перевести триггеры на FOR EACH ROW... Тестирую чего получается... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2007, 11:03 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
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'у это гораздо больше нравится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2007, 11:22 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=34375167&tid=1604744]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
46ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 318ms |

| 0 / 0 |
