Имя: Пароль:
1C
1С v8
НачатьТранзакцию()
0 shamannk
 
28.02.12
11:08
Мучает один вопрос если перед запросом стоит НачатьТранзакцию() в регистр с режимом блокировки Автомат. Происходит ли блокировка всего регистра до окнчания транзакции и если без транзакции на время выполнения запроса регистр блокируется?  И в яндексе искал и гуглил.
1 Ненавижу 1С
 
гуру
28.02.12
11:12
имхо, нет, не происходит
требуется как минимум писать в запросе ДЛЯ ИЗМЕНЕНИЯ и то блокируются только записи попадающие в запрос (хотя зависит от варианта использования: файловый или субд)
2 2mugik
 
28.02.12
11:17
(0) быстрее чем угулить самому проверить.
3 shamannk
 
28.02.12
11:20
(1) Тогда зачем нужен параметр <Режим блокировок> в транзакции?
4 guitar_player
 
28.02.12
11:21
(3) для автоматических блокировок
5 shamannk
 
28.02.12
11:23
(4) Ниче не понял блокировок не возникает но режими блокиров есть? Объясните если не трудно.
6 alxbzm
 
28.02.12
11:25
Запросы в 1С ничего не блокируют вообще (ну кроме конструкции ДЛЯ ИЗМЕНЕНИЯ) - читают все зафиксированные транзакции, а вот метод набора записей Прочитать() как раз блокирует от записи и ждет, если кто-то другой в этот момент пишет в регистр. А вот что будет заблокировано - зависит от режима блокировок: в автомате вся таблица, в упр режиме - только по полям отбора по-моему...
7 Reset
 
28.02.12
11:26
(5) Разве описания параметра недостаточно? Выбор режима для транзакции.
8 shamannk
 
28.02.12
11:27
(7) Если значение параметра Автоматический, то данная транзакция будет выполняться в режиме автоматических блокировок. Вы про это описаник Режим автомат значит что будет в автомате (КЭП писал?)
9 shamannk
 
28.02.12
11:29
(6) Т.е. если у регистра сведений строит режим блокировок Автоматический то при записи в него даже в транзакции с управляемым режимом заблокируется весь регистр?
10 alxbzm
 
28.02.12
11:29
(9) да
11 Reset
 
28.02.12
11:29
(8) Кэп или не кэп, это прямой ответ на вопрос "Зачем параметр"
12 Господин ПЖ
 
28.02.12
11:30
(10) нет...
13 Господин ПЖ
 
28.02.12
11:30
блокируется либо конкретная запись либо диапазон...
14 Reset
 
28.02.12
11:30
(10) Нет, зависит от субд.
15 Ненавижу 1С
 
гуру
28.02.12
11:31
(9) а разве не "будет сообщение об ошибке «Автоматический режим блокировки недопустим в этой транзакции»"?
16 alxbzm
 
28.02.12
11:31
+(10) хотя зависит от настройки конфигурации: если Управляемый и автоматический - то да, если управляемый - то пофигу че там у регистра установлено - для всех объектов упр. режим
(12) - да - пардоньте еще от субд зависит
17 Reset
 
28.02.12
11:32
(9) Произойдет ошибка времени выполнения
18 Господин ПЖ
 
28.02.12
11:32
вся таблица блокируется либо когда в таблице не было данных по этому регистратору (не зря в типовых это обходится извращенным способом) либо блокировок очень много
19 Ненавижу 1С
 
гуру
28.02.12
11:33
(18) имхо, не по регистратору, а по набору измерений
20 Господин ПЖ
 
28.02.12
11:33
(19) ну да... скорее так
21 shamannk
 
28.02.12
11:37
Режим: Автоматический и управляемый. Клиент серверный вариант sql 2008
22 Господин ПЖ
 
28.02.12
11:41
автомат и упр. отличается разной степенью изоляции транзакций, длительностью блокировок и соответственно центром ответственности за блокировки. В первом блокирует скуль, во втором блокировками заведует сервер приложения 1С
23 shamannk
 
28.02.12
11:43
(22) С такими параметрами (21) и если как в (9) Произойдет полная блокировка?
24 alxbzm
 
28.02.12
11:45
(23) по-моему при таких настройках произойдет ошибка из (15)
25 shamannk
 
28.02.12
11:47
(24) Ошибка происходит "Конфликт блокировок при выполнении транзакции" И непонятно толи наткнулось на блокировку всего регистра либо каких то строк.
26 Господин ПЖ
 
28.02.12
11:50
(25) sp_lock все знает...
27 Рэйв
 
28.02.12
11:51
(26)Если начинаешь управляемую блокировку у всех участников должен быть отключен автоматический режим блокировки.
28 shamannk
 
28.02.12
11:58
Последний вопрос: управляемые режим (т.е. где возможно блокировать не весь регистр) возможен только тогда когда у регистра стоит управляемый режим?
29 Господин ПЖ
 
28.02.12
12:00
(28) не блокируется таблица целиком и в автомате... если конечно у вас не 150 измерений и вы там по 150-му фильтруете...
30 Alex_MA
 
28.02.12
12:01
(0)В автоматическом режиме блокируется все (Но не вся таблица, а конкретные записи). Если запрос без ДЛЯ ИЗМЕНЕНИЯ - то накладывается разд. блокировка, если с ДЛЯ ИЗМЕНЕНИЯ то исключительная.
блокировка действует только в рамках одной транзакции, вложенные транзакции в 1С не существуют
31 Господин ПЖ
 
28.02.12
12:04
>Если запрос без ДЛЯ ИЗМЕНЕНИЯ - то накладывается разд. блокировка, если с ДЛЯ ИЗМЕНЕНИЯ то исключительная

не исключительная а update

>Но не вся таблица, а конкретные записи

или диапазоны
32 shamannk
 
28.02.12
12:08
(30)Т.е. такая блокировка рег. свед. заблокирут лишь те записи где измерение счет равно МойСчет  ЭлементБлокировки.УстановитьЗначение("Счет", МойСчет);
?
33 Alex_MA
 
28.02.12
12:10
(32)да, в данном случае блокировка произойдет по измерениям регистра, по конкретному счету
34 shamannk
 
28.02.12
12:13
(33)ЭлементБлокировки.УстановитьЗначение("Счет", МойСчет);
ЭлементБлокировки.УстановитьЗначение("Аналитика1", Аналитика1);
А если два измерения то сработают по логике "И" ?
35 Alex_MA
 
28.02.12
12:16
в принципе разница Автоматической от Управляемой блокировки заключается в том (я говору про уровень 1С), что при Автоматической блокировки блокируется все, до окончания транзакции, а в управляемом данные (считываемые или изменяемые) отпускаются до окончания транзакции - таким образом параллельность работы возрастает
36 Господин ПЖ
 
28.02.12
12:16
всегда было интересно как эта каша будет работать вместе - упр. и авто....
37 Alex_MA
 
28.02.12
12:17
(34)да
38 Stepa86
 
28.02.12
12:18
не знаю точно как лочатся записи регистра в транзакции, но как то напоролся на дедлок, где в одной ветке был запрос к справочнику типа выбрать спр.Ссылка Из Справочник.НебольшойТАкойСправочник КАК спр ГДЕ спр.некотороеПоле = &ЧоМнеНужно

этот запрос лочил всю таблицу, а не только то, что отбирал в итоге, причем лочил скуль, а не 1Ска (вродеб). После включения в индекс этого поля все дедлоки ушли
39 Alex_MA
 
28.02.12
12:18
(36)нафиг этот режим
40 Господин ПЖ
 
28.02.12
12:20
(38) ну тут скорее всего ничего тайного не было... вместо seek было scantable в плане выполнения, т.к. индекса нет, скуль лупит по всей таблице
41 Господин ПЖ
 
28.02.12
12:22
(39) это точно.
42 Alex_MA
 
28.02.12
12:22
(38)deadlock - ошибка кода конфигурации. Видимо кто то еще блокировал эти записи и твоя транзакция была выбрана жертвой менеджера блокировок
43 Stepa86
 
28.02.12
12:25
(40) я так то думал, что он не будет лочить то, что в выборку не попало, даже при скане
(42) другими потоками было добавление нового элемента по другим измерениям
44 Alex_MA
 
28.02.12
12:25
(38)у нас одно время были страшные блокировки в ИБ, превышено время ожидания на блокировке. ЦУПом посмотрел - главной проблемой являлось время выполнения запросов. Сделали переиндексацию ИБ и блокировки как рукой сняло. Выполняйте регламентные операции на СУБД.
45 Alex_MA
 
28.02.12
12:28
и еще много косяков со стороны платформы, достаточно почитать описание ошибок 1С, я думаю это не все "косяки"
46 shamannk
 
28.02.12
12:28
набор=РегистрыСведений.МойРегистр.СоздатьНаборЗаписей();
набор.Отбор.Регистратор.Установить(Объект.Ссылка);
набор.Записать();

Такая конструкция заблокирует весь регистр? (регистр в автомате)
47 Господин ПЖ
 
28.02.12
12:34
(43) он может лочить диапазон... как минимум значение-1/значение/значение+1

если идет отбор по регистратору - лочится все записи той же даты (если я не вру)...
48 Alex_MA
 
28.02.12
12:34
(46)заблокируются записи только по регистратору
49 shamannk
 
28.02.12
12:37
(48) Если даже это не в транзакции используется?
50 Alex_MA
 
28.02.12
13:16
(49)без транзакции не может быть транзакционной блокировки.