Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
Необходимо при изменении данных в таблице автоматически обновлялись данные в других таблицах... Лучше делать все в одном триггере или разбивать на несколько? Поделитесь опытом.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2007, 21:51 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
Триггеры никогда не могут быть UR???? Это ведь на самом деле так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 10:05 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
Как найти для процедуры пакет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 10:13 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
TORTНеобходимо при изменении данных в таблице автоматически обновлялись данные в других таблицах... Лучше делать все в одном триггере или разбивать на несколько? Поделитесь опытом....Все равно. TORTТриггеры никогда не могут быть UR???? Это ведь на самом деле так?Триггеры наследуют уровень изоляции вызывающего приложения. Если надо его менять по ходу выполнения - используйте вызов процедуры из триггера. TORTКак найти для процедуры пакет? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 11:19 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
Если есть 2 триггера на одинаковое событие, допустим after update... Какой триггер срабатывает первым? В триггере использую оператор merge, так вот он вызывает блокировку всей таблицы, которую обновляю через merge... Возникают постоянные блокировки... Чего-то никак не могу разрулить.... Кто подскажет выход? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 11:19 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
To Mark: спасибо за информацию.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 11:22 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
TORTЕсли есть 2 триггера на одинаковое событие, допустим after update... Какой триггер срабатывает первым?Тот, который первым создан. TORTВ триггере использую оператор merge, так вот он вызывает блокировку всей таблицы, которую обновляю через merge... Возникают постоянные блокировки... Чего-то никак не могу разрулить.... Кто подскажет выход?Покажите этот merge и ddl таблиц с индексами, которые там участвуют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 11:26 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
Вот триггер: CREATE TRIGGER DB2ADMIN.CHK_SALDO2 AFTER DELETE ON DB2ADMIN.PROVOD REFERENCING OLD_TABLE as old FOR EACH STATEMENT MODE DB2SQL BEGIN atomic 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; merge into DB2ADMIN.saldo as a using (select podrazd_id, kredit_id, kredit_partner_id, kredit_analitika_id, sum(summa) as summa from old group by podrazd_id, kredit_id, kredit_partner_id, kredit_analitika_id) as b on a.podrazd_id = b.podrazd_id and a.subcount_id = b.kredit_id and a.partner_id = b.kredit_partner_id and a.analitika_id = b.kredit_analitika_id when matched then update set summa_kredit = summa_kredit - b.summa; END Вот такая таблица: CREATE TABLE "DB2ADMIN"."SALDO" ( "PODRAZD_ID" BIGINT NOT NULL , "SUBCOUNT_ID" BIGINT NOT NULL , "PARTNER_ID" BIGINT NOT NULL , "ANALITIKA_ID" BIGINT NOT NULL , "SUMMA_DEBET" DECIMAL(20,2) NOT NULL , "SUMMA_KREDIT" DECIMAL(20,2) NOT NULL , "PODRAZD_PARTNER" BIGINT NOT NULL ) IN "DATA" INDEX IN "INDEX_8" ; ALTER TABLE "DB2ADMIN"."SALDO" PCTFREE 20; -- Операторы DDL для индексов таблицы "DB2ADMIN"."SALDO" CREATE INDEX "DB2ADMIN"."IND1_SALDO" ON "DB2ADMIN"."SALDO" ("PODRAZD_PARTNER" ASC) PCTFREE 10 MINPCTUSED 10 ALLOW REVERSE SCANS; -- Операторы DDL для индексов таблицы "DB2ADMIN"."SALDO" CREATE INDEX "DB2ADMIN"."IND2_SALDO" ON "DB2ADMIN"."SALDO" ("PARTNER_ID" ASC) PCTFREE 10 MINPCTUSED 10 ALLOW REVERSE SCANS; -- Операторы DDL для первичных ключей таблицы "DB2ADMIN"."SALDO" ALTER TABLE "DB2ADMIN"."SALDO" ADD CONSTRAINT "CC1166263937297" PRIMARY KEY ("PODRAZD_ID", "SUBCOUNT_ID", "PARTNER_ID", "ANALITIKA_ID"); Вот так пытаюсь сделать.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 11:40 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
сделайте runstats on table db2admin.saldo and indexes all и покажите план запроса для этого merge. Какой процент записей обновляется в db2admin.saldo при удалении из db2admin.provod? И еще: вы не "ослабите" эксклюзивные блокировки уровнем изоляции UR: Если вы изменили некоторую строку, то эксклюзивная блокировка этой строки останется до конца транзакции при любом уровне изоляции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 12:03 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
Так строка - это ничего страшного... Зачем же блокируется целая таблица? Я увеличил locklist, но это не помогает.... После runstats нужно пересобирать триггеры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 12:09 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
Процент очень-очень не большой.... Там и процентом-то нельзя назвать.... А maxlocks стоит 22(по умолчанию)... LOcklist на всякий выставил 4096*4Kb... Вроде все должно хватать..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 12:14 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
TORTПосле runstats нужно пересобирать триггеры?Нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 12:18 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
Explain.sql выдает стоимость 143,76.... При работе с таблицей saldo используется индекс CC1166263937297 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 12:22 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
TORTExplain.sql выдает стоимость 143,76.... При работе с таблицей saldo используется индекс CC1166263937297Как же у вас тогда вся таблица блокируется? Как вы это определили? Может: 1. Уровень изоляции приложения - RR? 2. У таблицы LOCKSIZE сделали TABLE? 3. Приложение коммититься забывает? Сделайте UPDATE MONITOR SWITCHES USING LOCK ON UPDATE COMMAND OPTIONS USING C OFF DELETE FROM DB2ADMIN.PROVOD ... GET SNAPSHOT FOR LOCKS FOR APPLICATION AGENTID ваш_номер_агента Вывод последней команды покажите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 12:42 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
Определил с помощью Quest'а.... В момент когда происходит удаление из db2admin.provod возникает блокировка Exclusive(S) на таблицу SALDO..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 12:50 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
Пардон Exclusive(X) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 12:50 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
И размер блокировки на таблицу - Строка.....:( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 12:53 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
Снимок блокировок программы Отметка времени снимка = 02.02.20 Хэндл прикладной программы = 586 ID прикладной программы = *LOCAL Номер последовательности = 0001 Имя прикладной программы = db2bp. ID авторизации CONNECT = db2adm Состояние прикладной программы = Рабоча Время изменения статуса = Не соб Кодовая страница прикладной программы = 1251 Блокировок поддерживается = 9 Общее время ожидания (мс) = 0 Список блокировок Имя блокировки = 0x050010002D413E010000000052 Атрибуты блокировки = 0x00000000 Флаги освобождения = 0x40000000 Число блокировок = 1 Число удержаний = 0 Имя объекта блокировки = 20857133 Тип объекта = Строка Имя табличного пространства = DATA Схема таблицы = db2admin Имя таблицы = SALDO Режим = X Имя блокировки = 0x050010002E413E010000000052 Атрибуты блокировки = 0x00000000 Флаги освобождения = 0x40000000 Число блокировок = 1 Число удержаний = 0 Имя объекта блокировки = 20857134 Тип объекта = Строка Имя табличного пространства = DATA Схема таблицы = db2admin Имя таблицы = SALDO Режим = X Имя блокировки = 0x0500100040991E010000000052 Атрибуты блокировки = 0x00000000 Флаги освобождения = 0x40000000 Число блокировок = 1 Число удержаний = 0 Имя объекта блокировки = 18782528 Тип объекта = Строка Имя табличного пространства = DATA Схема таблицы = db2admin Имя таблицы = SALDO Режим = X Имя блокировки = 0x0500070045500D020000000052 Атрибуты блокировки = 0x00000020 Флаги освобождения = 0x40000000 Число блокировок = 1 Число удержаний = 0 Имя объекта блокировки = 34426949 Тип объекта = Строка Имя табличного пространства = DATA Схема таблицы = db2admin Имя таблицы = PROVOD Режим = X Имя блокировки = 0x0500070044500D020000000052 Атрибуты блокировки = 0x00000020 Флаги освобождения = 0x40000000 Число блокировок = 1 Число удержаний = 0 Имя объекта блокировки = 34426948 Тип объекта = Строка Имя табличного пространства = DATA Схема таблицы = db2admin Имя таблицы = PROVOD Режим = X Имя блокировки = 0x53514C4332453036BD4A32C841 Атрибуты блокировки = 0x00000000 Флаги освобождения = 0x40000000 Число блокировок = 1 Число удержаний = 0 Имя объекта блокировки = 0 Тип объекта = Внутренн Режим = S Имя блокировки = 0x53514C4445464C5428DD630641 Атрибуты блокировки = 0x00000000 Флаги освобождения = 0x40000000 Число блокировок = 1 Число удержаний = 0 Имя объекта блокировки = 0 Тип объекта = Внутренн Режим = S Имя блокировки = 0x05000700000000000000000054 Атрибуты блокировки = 0x00000000 Флаги освобождения = 0x40000000 Число блокировок = 1 Число удержаний = 0 Имя объекта блокировки = 7 Тип объекта = Таблица Имя табличного пространства = DATA Схема таблицы = db2admin Имя таблицы = PROVOD Режим = IX Имя блокировки = 0x05001000000000000000000054 Атрибуты блокировки = 0x00000000 Флаги освобождения = 0x40000000 Число блокировок = 2 Число удержаний = 0 Имя объекта блокировки = 16 Тип объекта = Таблица Имя табличного пространства = DATA Схема таблицы = db2admin Имя таблицы = SALDO Режим = IX ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 13:08 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
Так это... Все нормально у вас, эксклюзивно таблицы не блокируются. Может, quest не отличает IX блокировки таблицы от X? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 13:23 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
Сам вот сижу и думаю.... В любом случае спасибо за советы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 13:28 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
А если это делается в хранимой процедуре? Монитор блокировки будет фиксировать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 13:39 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
Ну так... На всякий.... Одна процедура = Один пакет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 14:08 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
TORTА если это делается в хранимой процедуре? Монитор блокировки будет фиксировать?Да. TORTОдна процедура = Один пакет?Да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 14:43 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
Кажется нашел момент... Может для вас очевидный, я же его упустил.... В общем дело так.... Записи из таблицы provod удаляются также триггером, повешенным на другую таблицу!!! Так вот, если делать Explain на delete from provod...., то индексы по saldo хватаются.... А если через еще один триггер, то нет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 14:48 |
|
||
|
Триггеры... Поделитесь опытом
|
|||
|---|---|---|---|
|
#18+
Опять на те же грабли.... Где архитектурно могу ошибаться? Есть таблица1, таблица2, таблица3.... При изменении таблицы1, изменяется таблица2. При изменении таблицы2, изменяется таблица3. Все это организовал на триггерах... По-моему очень удобно получилось... Но при тестировании получается, что одна программа, изменяя таблицу1 эксклюзивно блокирует таблицу3... Соответственно все остальные приложения "курят"... К тому же, таблица1 изменяется довольно часто и совсем небольшими порциями... 1.Где чего не так понимаю? И главное.... Так вообще делают или за это руки "отрывают"....? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 14:38 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=34301426&tid=1604744]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
63ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
81ms |
get tp. blocked users: |
2ms |
| others: | 256ms |
| total: | 457ms |

| 0 / 0 |
