zVlad wrote:Original question was how to run reports without contention with OLTP processing.
Да нет, я спрашивал в чём Ваш был вопрос? А что касается исходного вопроса, начавшего дискуссию, то своё мнение я уже изложил. Могу только повторить, что грязное чтение в подавляющем большинстве непатологических случаев - это самый последний и самый худший вариант, который я бы рассматривал. Необходимость в нём возникает, как правило, только в крайне неудачно или безграмотно спроектированных приложениях БД. А также при миграции с того же ORACLE на DB2 или MS SQL, если приложение на ORACLE писалось чистым ораклистом, не имеющем понятия о том, как устроены блокировочные сервера.
Приемлимый вариант использования грязных чтений - когда администратору нужно быстро продиагностировать какую-либо проблему и когда результаты таких запросов далее не идут ни в какую отчётность, на их основе не принимаются никакие бизнес-решения, и пр. А также, например, когда приложение имеет, скажем, progress indicator, который выполняет что-то типа select count (*) from sometable where processed = true в течение времени пока какая-нибудь большая длинная транзакция трогает строки в sometable и по мере их модификации меняет колонку processed. Но опять же, полученный результат - чисто для информации для нетерпеливых и нервных пользователей.