Моему приложению требуется пакетная обработка 10 млн строк — результат сложного SQL-запроса, соединяющего таблицы.
Я планирую повторять набор результатов, читая по сотне за итерацию.
Чтобы запустить это на загруженном производстве OLTP. БД и избегайте блокировок, я решил, что буду запрашивать с уровнем изоляции READ UNCOMMITTED.
Уберет ли это запрос с пути любой БД? пишет? избежать блокировок строк/таблиц?
Моя главная проблема заключается в том, что мой запрос блокирует любую другую активность БД, меня гораздо меньше беспокоит обратное.
Дополнительные примечания:
1. Я буду читать исторические данные, поэтому вряд ли встречу незафиксированные данные. Ничего страшного, если я это сделаю.
2. Процесс итерации может занять несколько часов. Соединение с БД останется открытым во время этого процесса.
3. У меня будет максимум два таких одновременных экземпляра пакета.
4. Я могу допустить повторяющиеся строки. (в результате незафиксированного чтения).
5. Целевой БД является DB2, но мне нужно решение, которое подходит и для других поставщиков БД.
6. Поможет ли мне уровень изоляции моментальных снимков очистить память сервера?
READ UNCOMMITTED
не требуется, потому что читатели никогда не блокируют записи, а писатели никогда не блокируют считывателей в Oracle (и в DB2, начиная с 9.7). - person a_horse_with_no_name   schedule 12.11.2013