Как избежать блокировки чтения в моей базе данных?

StackOverflow https://stackoverflow.com/questions/37095

Вопрос

Как избежать блокировок чтения в моей базе данных?

Ответы на несколько баз данных приветствуются!

Это было полезно?

Решение

В Oracle режим работы по умолчанию - это уровень изоляции Read commit , когда оператор select не блокируется другой транзакцией, изменяющей данные, которые он читает. Из параллелизма и согласованности данных :

  

Каждый запрос, выполняемый транзакцией, видит только те данные, которые были зафиксированы до начала запроса (не транзакция). Запрос Oracle никогда не считывает грязные (незафиксированные) данные.

Другие советы

В SQL Server вы можете использовать ключевое слово with (nolock) в ваших операторах выбора. Например:

Select table1.columna, table2.columna
from table1 with(nolock), table2 with(nolock)

Обязательно укажите с помощью (nolock) для каждой таблицы / представления в запросе.

У Джеффа Этвуда есть хороший пост на эту тему:

http://www.codinghorror.com/blog/archives/001166.html

В Firebird писатели никогда не блокируют читателей, и нет грязных чтений. Только уровни изоляции с фиксацией и моментальным снимком.
Он использует движок нескольких поколений (как я полагаю, oracle) вместо простой блокировки страниц или записей.

PostgreSQL также использует MVCC (Multi-Version Concurrency Control), поэтому, используя уровень изоляции транзакций по умолчанию (read-commit), вы никогда не должны блокировать, если кто-то не выполняет обслуживание на БД (удаление / добавление столбцов / таблиц / индексов) / etc).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top