Как избежать блокировки чтения в моей базе данных?
-
09-06-2019 - |
Вопрос
Как избежать блокировок чтения в моей базе данных?
Ответы на несколько баз данных приветствуются!
Решение
В Oracle режим работы по умолчанию - это уровень изоляции Read commit , когда оператор select не блокируется другой транзакцией, изменяющей данные, которые он читает. Из параллелизма и согласованности данных : р>
Каждый запрос, выполняемый транзакцией, видит только те данные, которые были зафиксированы до начала запроса (не транзакция). Запрос Oracle никогда не считывает грязные (незафиксированные) данные.
Другие советы
В SQL Server вы можете использовать ключевое слово with (nolock) в ваших операторах выбора. Например:
Select table1.columna, table2.columna
from table1 with(nolock), table2 with(nolock)
Обязательно укажите с помощью (nolock) для каждой таблицы / представления в запросе.
У Джеффа Этвуда есть хороший пост на эту тему:
В Firebird писатели никогда не блокируют читателей, и нет грязных чтений. Только уровни изоляции с фиксацией и моментальным снимком.
Он использует движок нескольких поколений (как я полагаю, oracle) вместо простой блокировки страниц или записей.
PostgreSQL также использует MVCC (Multi-Version Concurrency Control), поэтому, используя уровень изоляции транзакций по умолчанию (read-commit), вы никогда не должны блокировать, если кто-то не выполняет обслуживание на БД (удаление / добавление столбцов / таблиц / индексов) / etc).