|
Почему блокируются не 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 - если они не работают так как написано, это значит что здесь имеет место быть ошибка в документации не более. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |