Цитата:
Сообщение от
MikeR
допустим в разноске надо обновить два десятка таблиц и вставить в еще пару десятков, то методологически правильно открывать ОДНУ транзакцию, вешать блокировку while select forupdate по обновляемым таблицам?
Если объемы необходимых изменений столь велики, то методологически правильно сначала вне транзакции выполнить все долгие вычисления и получить "грязные" данные, а потом в одной транзакции минимально затратным способом их применить "на чисто", естественно убедившись что с момента вычисления данные не устарели. Конечно поддержка такого рода механизмов изначально должна быть заложена в архитектуру данных. Например, хорошо когда архитектура данных позволяет вместо полного пересчета устаревших данных, учесть в новом расчете только новые изменения, произошедшие с момента предыдущего расчета.
И даже здесь возникает дилемма, что лучше заблокировать два десятка таблиц на 5 минут и гарантированно выполнить разноску? Или пересчитывать постоянно меняющиеся данные до посинения? Это уже организационный вопрос и решать его нужно организационными методами. Например, если оперативность разноски не критична, то выносить такую разноску в пакетное задание на ночь.