Имя: Пароль:
1C
1С v8
Пересчение управляемых блокировок на измерениях регистра
,
0 vi0
 
19.04.14
21:57
Добрый день

Проверяю как пересекаются блокировки устанавливаемые на измерения регистра.

ИМЕЕТСЯ:
Регистр сведений: Независимый, Непереодический
Измерения: А, Б

Всего две записи регистра:
А 1  Б 2
А 3  Б 4

При тестировании сначала устанавливаю блокировку в первом сеансе
и проверяю могу ли установить во втором.


Код установки блокировки:
(две схожих процедуры для обоих измерений)
-----------------------------
НачатьТранзакцию();
      бл = Новый БлокировкаДанных;
      э = бл.Добавить("РегистрСведений.р1");
      э.УстановитьЗначение("А", А); // и УстановитьЗначение("Б", Б) во второй процедуре
      э.Режим = РежимБлокировкиДанных.Исключительный;
      бл.Заблокировать();

      Предупреждение("Ок");


Результаты которые мне понятны:
----------------------------------------
Тест1:
Первый сеанс: А=1
Ок
Второй сеанс: Б=3
Ок

Тест2:
Первый сеанс: А=1
Ок
Второй сеанс: А=1
Не установлена!


Результаты в которых нужно разобраться:
----------------------------------------
Тест3:
Первый сеанс: А=1
Ок
Второй сеанс: Б=2
Ок

Тест4:
Первый сеанс: А=1
Ок
Второй сеанс: Б=4
Не установлена!


ВОПРОСЫ:
- Почему в Тест3 получилось установить пересекающиеся блокировки?
- Почему в Тест4 НЕ получилось установить НЕпересекающиеся блокировки?

В т.ч. интересны ссылки на статьи и т.д.
1 vi0
 
19.04.14
22:02
Опечатка в Тест1. Нужно так:
Первый сеанс: А=1
Ок
Второй сеанс: А=3
Ок
2 neo_matrix_123
 
19.04.14
22:44
можно поподробней про свойства измерений регистра....
3 mistеr
 
19.04.14
22:51
(0) Переменная "бл" это 5! Спасибо, поднял настроение.
4 vi0
 
19.04.14
23:00
Уважаемая публика, прошу прощения.
Накосячил в Тест2. Второй сеанс блокируется первым, как и ожидалось - мой первый вопрос снимается.

Остался вопрос:
Почему в Тест4 НЕ получилось установить НЕпересекающиеся блокировки?
5 vi0
 
19.04.14
23:01
(4) опечатка - не тест2, а тест4 ))
6 vi0
 
19.04.14
23:03
Публикую результаты тестов заново:

Результаты которые мне понятны:
----------------------------------------
Тест1:
Первый сеанс: А=1
Ок
Второй сеанс: А=3
Ок

Тест2:
Первый сеанс: А=1
Ок
Второй сеанс: А=1
Не установлена!

Тест3:
Первый сеанс: А=1
Ок
Второй сеанс: Б=2
Ок


Результаты в которых нужно разобраться:
----------------------------------------

Тест4:
Первый сеанс: А=1
Ок
Второй сеанс: Б=4
Не установлена!


ВОПРОС:
- Почему в Тест4 НЕ получилось установить НЕпересекающиеся блокировки?
13 vi0
 
19.04.14
23:28
В общем, ладно. Итого имею:

Первый сеанс: А=1
Ок
Второй сеанс: Б=4
Не установлена!

Почему НЕ получилось установить НЕпересекающиеся блокировки?
14 vi0
 
19.04.14
23:33
специально уточняю:
Измерение Б - не индексировано
хотя, насколько я знаю, на управляемые блокировки это не влияет
если измерение Б индексировать - то результаты те же
15 hhhh
 
19.04.14
23:45
вроде SQL целиком страницу блокирует. А не по одной строчке.
16 vi0
 
19.04.14
23:46
(15) здесь использую управляемые блокировки
17 hhhh
 
19.04.14
23:58
компьютер перезагружаете между тестами?
18 vi0
 
20.04.14
00:03
(17) вы шутите?? естественно перегружаю!
19 vi0
 
20.04.14
09:03
уточню, что под "Не установлена" имею ввиду, что во втором сеансе при попытке установки блокировки возникает ожидание, которое далее переходит в таймаут
20 mistеr
 
20.04.14
14:34
(18) А надо еще и вилку из розетки вытаскивать.
21 vi0
 
20.04.14
22:22
подниму. все еще актуален вопрос

Почему НЕ получилось установить НЕпересекающиеся блокировки у регистра сведений с измерениями: А, Б
и с двумя записями:
А 1  Б 2
А 3  Б 4

Первый сеанс: А=1
Ок
Второй сеанс: Б=4
Не установлена!
22 MadHead
 
20.04.14
22:54
Похоже на эскалацию блокировок.
23 MadHead
 
20.04.14
22:56
sql на сколько знаю проводит эскалацию если очень много объектов для блокировки или идет нехватка памяти, по какому принципу эскалирует блокировки менеджер блокировок 1с я не знаю.
24 vi0
 
20.04.14
23:04
(23) нет, не эскалация точно
т.к. другие сочетания работают - см выше
(в 8.2 эскалация начинается от 20000 записей)
25 1sanekmaloi1
 
21.04.14
00:52
Скорее всего скуль блочит границу диапазона.
Добавь записей в регистр и повтори тест так чтобы записи не были соседними, хотя это в автоматическом режиме так должно быть, но все равно попробуй.
26 vi0
 
21.04.14
06:43
(25) блокировки управляемые
27 hhhh
 
21.04.14
06:49
(26) скрины давайте. Тут же не все телепаты, за тысячи километров определять, где вы там накосячили.
28 vi0
 
21.04.14
06:52
Добавил записей
А    Б
1    2
3    4
10    10
20    20
30    30
40    40
50    50
60    60
70    70
80    80
90    90

Первый сеанс: А=1
Ок
Второй сеанс: Б=90
Не установлена!

Вечером сделаю тест на большом количестве
29 vi0
 
21.04.14
06:58
логика где то прослеживается - что это не первое измерение
но описаний такого поведения не помню
30 vi0
 
21.04.14
06:59
(27) скрины чего?
31 vi0
 
21.04.14
07:06
Что касается соседних записей.
При А=1, А=2 блокировка накладывается успешно в обоих сеансах.
Но в управляемых блокировках это и не должно влиять.

Первый сеанс: А=1
Ок
Второй сеанс: А=2
Ок
32 MrStomak
 
21.04.14
08:03
Блокировка ставится на пространства блокировок.
Вы не уточняете пространство Б в четвертом тесте, поэтому используется весь размер пространства для блокировки. Т.е. пересечение по блокировке на всех записях Б в 1 сеансе и конкретной записи Б во втором сеансе.
33 MrStomak
 
21.04.14
08:10
Другими словами, если переиначить на РН остатков товаров на складах, в первом сеансе ты блокироуешь позицию номенклатуры, во втором - конкретный склад. Как ты хотел бы, чтобы менеджер блокировок тут поступил?
34 vi0
 
21.04.14
08:41
(33) согласен, пространства пересекаются
если так изобразить то становится понятнее:
А *
* Б
спасибо за пример с остатками, очень доходчиво
35 vi0
 
21.04.14
08:44
Точнее вот так изобразить:
1 *
* 4
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн