teamforce писал(а):
К вопросу о долгоиграющих write'ах - действительно на insert'е еще trigger висит и сразу после хранимая процедурка еще вызывается из нескольких запросов. Посмотрю что можно сделать чтобы их время выполнения уменьшить.
Не, это последнее о чём следует думать. В транзакции должно выполняться столько действий, сколько диктует логика предметной области и их сложность должна быть такой, какой нужно. Но не больше - выполнены действия, которые могут быть валидны только все вместе - коммит немедленно. Фатальный сценарий такой - утром юзер Вася запустил задачу, открыл форму с гридом, активизировал запрос (читай транзакцию, причём она write) и весь день то полистает, то запостит чего-нибудь, то просто в носе поковыряет. А может и не постить, но write-транзакция висит. Если это снапшот (concurrency), то он должен видеть _всю_ базу в таком состоянии, в котором она была на момент его старта по определению. То есть, в течение дня юзера Петя и Маша могли пол-базы три раза проапдейтить и четверть потом удалить, но Васин снапшот держит все версии всех записей по всей базе, которые без него давно признали бы мусором и снесли к чёртовой матери. По данным последних исследований, read_commited write транзакции тоже могут приводить к такому эффекту, хоть и не должны. А ещё есть такой враг народа, как rollback. Если с утра юзер Коля изменил одну запись, потом почесал репу и сказал - а ну его - его отроллбаченная транзакция становится точкой отсчёта, начиная с которой остальные транзакции грузят информацию о других транзакциях в память для собственных нужд, с целью опознания мусора и определения какие версии они должны видеть, какие нет. Мусор он (rollback) не удерживает, но память под Transaction Inventory Pages дуется, дуется, пока не приходит к тому, что скоро лопнет. А это тоже отнюдь не способствует быстрдействию. Вот свип-то и ликвидирует последствия роллбака и заодно прибирает мусор. Последнее с успехом, правда, делает и любая другая транзакция, когда на мусор натыкается. Но при одном условии - если этот мусор уже можно признать мусором (см. юзера Васю). А зловредный Вася и свипу не даст мусор собрать, то есть, если такие возможности у Васи есть, то, пока у него их не отобрали путём пересмотра управления транзакциями в программе, перед свипом его надобно из базы выгнать.