Имя: Пароль:
1C
1С v8
Почему блокируются не 2 соседние записи на границе диапазона индекса, а 1?
,
0 andreynikus
 
12.09.13
10:10
В многих источниках, в частности в книге «Профессиональная разработка в системе «1С:Предприятие 8», написано что при блокировке необъектных сущностей будет накладываться блокировка на диапазон + 2 соседние записи «вокруг» диапазона (одна сверху и одна снизу).
Т.е. если имеем регистр с записями
А
Б
В
Г
Д

И выполним запрос в транзакции с условием МЕЖДУ «В» И «Г» по идее должны заблокироваться записи «Б, В, Г,Д». Соседние записи в данном случае Б и Д.
Но на практике этого не происходит, блокируется только одна соседняя запись снизу (в данном случае «Д»), запись сверху (в данном случае "Б") не блокируется.
И судя по документации MS SQL это правильно, везде написано, что будет заблокирована N+1 строка, где N число строк удовлетворяющих условию. Но почему тогда в 1С считают, что будет блокироваться 2 строки?

Вот ссылки подтверждающие что блокируется N+1 строка:
http://technet.microsoft.com/ru-ru/library/ms191272(v=sql.105).aspx
http://yrushka.com/index.php/performance-tunning/key-range-locking-types-in-serializable-isolation-level/

В связи с этим у меня назрел когнитивный диссонанс, в реальной жизни и в документации Microsoft получается одно, и почему-то только в документации 1С написано другое.

Вопрос знатокам: какой опыт нужно провести, что бы увидеть что блокировка ставится на 2 соседние записи, а не на одну как это происходит сейчас?
1 ptiz
 
12.09.13
10:19
1 сверху + 1 снизу = 2
2 Лефмихалыч
 
модератор
12.09.13
10:20
(0) бывает такое. Вот еще пример v8: v8: Нельзя использовать доступ к хранилищу через crsever и файловую шару одновременно
компании 1С верить на слово нельзя - всё надо проверять. Другое дело, на сколько это реально нужно так досконально знать - две там записи или одна?
3 Maxus43
 
12.09.13
10:20
ЕМНИП - соседние блокируются при автоматическом режиме блокировок, зависит от уровня изоляции транзакций. На управляемых блокировках уже получше
4 andreynikus
 
12.09.13
10:21
На практике блокируется только 1 снизу
1 снизу = 1 :)
5 Maxus43
 
12.09.13
10:22
(3) + хотя не, всё правильно, соседние блокируются. верь документации скуля
6 andreynikus
 
12.09.13
10:22
(3) я знаю что на управляемых блокировках другой уровень изоляции.
Вопрос про автоматический режим.
7 andreynikus
 
12.09.13
10:23
(5) в том-то и дело что в документации скуля написано о блокировке одной соседний записи, а не двух
8 andreynikus
 
12.09.13
10:27
(2) Ужасть, все лгут!
9 Serg_1960
 
12.09.13
11:18
У меня тоже "назрел когнитивный диссонанс" :) почему только MS SQL? А как же постгрю, оракл, файловая версия?
10 z0001
 
12.09.13
11:22
(0)1 - зачем? работай от задачи или учить по классике.
2 - записи там лежат не в том порядке в котором ты их видишь вероятно.
3. блокировки не всегда работают так как написано если это платформа. именно знание исключений и есть профессионализм в 1с
11 andreynikus
 
12.09.13
11:27
(9) "А как же постгрю, оракл, файловая версия?"
Постргри и оракл в автоматическом режиме используют табличные блокировки.
Файловая версия использует табличные блокировки всегда.
12 andreynikus
 
12.09.13
11:30
(10)
1 - я не решаю сейчас конкретную прикладную задачу, просто хочу докапаться до истины
2 - они упорядочены по ключу индекса, так что порядок там именно тот который я вижу
3 - если они не работают так как написано, это значит что здесь имеет место быть ошибка в документации не более.