Вслед за https://stackoverflow.com/a/16553083/14731 ...Могут ли строки только для чтения запускать блокировки базы данных?
Я понимаю, что это очень важно для поддержания состоящий фиксируя порядок таблиц для того, чтобы уменьшить частоту зависаний, и что это влияет как UPDATE
и SELECT
заявления [1]. Но, делает то же самое, что и для строк только для чтения?
Если строка была заполнена один раз во время инициализации, и никто ее еще не модифицирует, действительно ли имеет значение, к какому приказу мы обращаемся к ней?
Учитывая две операции: T1, T2 и два только для чтения, строки R1, R2
T1 читает R1, тогда R2 Т2 считывает R2, тогда R1
Может сделки взаимоблокировки, даже если я использую Серийная изоляция транзакций?
[1] Если изоляция транзакции равна REPEATABLE_READ
, T1 SELECT
s R1, R2, а T2 UPDATE
s R2, R1 может возникнуть взаимоблокировка.
ЗАЯВЛЕНИЕ: Этот вопрос не является специфичным для РСУБД. У меня создается впечатление, что никакая реализация не может блокировать строки только для чтения. Если у вас есть встречный пример (для конкретного поставщика), отправьте ответ, демонстрирующий столько же, и я его приму. Кроме того, опубликовать список всех конкретных реализаций, которые вы можете доказать, не будет заторможенным (и самый полный список будет принят).
Какой тип РСУБД вы используете? Пожалуйста, отметьте свой вопрос. У каждого поставщика могут быть детали реализации, которые влияют на ответ. –
@BillKarwin, у меня сложилось впечатление, что ответ будет охватывать все реализации. Если у вас есть конкретный пример заявления о том, что тупики на одном поставщике, но не на другом, отправьте ответ, демонстрирующий столько же, и я его приму. – Gili
Ну, например, MySQL InnoDB не блокирует чтение, поэтому взаимоблокировки не произойдет, кроме нескольких авторов. Вероятно, это относится к любой реализации, использующей архитектуру MVCC. –