Имеет ли смысл начинать транзакцию, когда будут только некоторые операции поиска данных? - PullRequest
0 голосов
/ 24 июня 2011

Имеет ли смысл начинать транзакцию, когда будут выполняться только некоторые операции извлечения данных и не произойдет ОБНОВЛЕНИЕ или ВСТАВКА?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 24 июня 2011

Не нормально.

Если у вас есть 2 SELECT, они могут стать несовместимыми в доли секунды между чтениями.

Транзакция не исправит это для блокировки типа SQL Server / Sybase, поскольку будут сняты блокировки чтения. Таким образом, вам нужно использовать более высокие уровни изоляции, которые будут влиять на параллелизм (потенциально довольно серьезный )

Выбор между «крошечным риском несогласованности данных» и «потерей производительности» зависит от вас.

0 голосов
/ 24 июня 2011

Запуск транзакции для этого случая гарантирует, что увиденные данные будут согласованы; какой-то другой процесс не сможет обновить строки, на которые вы смотрите, так что второй SELECT видит что-то отличное от первого, когда он должен видеть то же самое.

0 голосов
/ 24 июня 2011

Да, для обеспечения согласованности чтения на уровне транзакций.

Обеспечение повторяющихся операций чтения с помощью транзакций только для чтения

По умолчанию модель согласованности для Oracle гарантирует согласованность чтения на уровне инструкций, но не гарантирует согласованность чтения на уровне транзакций (повторяемое чтение). Если вы хотите согласованности чтения на уровне транзакции и если ваша транзакция не требует обновлений, вы можете указать транзакцию только для чтения. Указав, что ваша транзакция доступна только для чтения, вы можете выполнить любое количество запросов к любой таблице базы данных, зная, что результаты каждого запроса в транзакции только для чтения соответствуют одному моменту времени. *

http://download.oracle.com/docs/cd/B10501_01/appdev.920/a96590/adg08sql.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...