|
Управляемые блокировки - боль. страдание. унижение. | ☑ | ||
---|---|---|---|---|
0
H A D G E H O G s
12.01.15
✎
14:50
|
День добрый.
Разбираюсь с управляемыми блокировками, все просто: Движения.ТоварыНаСкладах.Очистить(); Движения.ТоварыНаСкладах.БлокироватьДляИзменения=БлокироватьДляИзменения; Движения.ТоварыНаСкладах.Записывать = Истина; Движение = Движения.ТоварыНаСкладах.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.Номенклатура = Номенклатура; Движение.Количество = Количество; Меняю 2 параметра: БлокироватьДляИзменения и РазрешитьРазделениеИтогов и смотрю в ТЖ. Результаты: 1) БлокироватьДляИзменения=Истина, РазрешитьРазделениеИтогов=Истина: Locks='AccumRg27.DIMS Exclusive Period=[T"20150101000000":+] Fld28="Яблоки" 2) БлокироватьДляИзменения=Ложь, РазрешитьРазделениеИтогов=Истина: Locks='AccumRg27.DIMS Exclusive Period=[T"20150101000000":+] Splitter=6 Fld28="Яблоки" 3) БлокироватьДляИзменения=Истина, РазрешитьРазделениеИтогов=Ложь: Locks='AccumRg27.DIMS Exclusive Period=[T"20150101000000":+] Fld28="Яблоки" 4) БлокироватьДляИзменения=Ложь, РазрешитьРазделениеИтогов=Ложь: Locks='AccumRg27.DIMS Exclusive Period=[T"20150101000000":+] Fld28="Яблоки" Теперь вопросы по результатам: 1) Блокировки по разделителю нет, ибо блокировка по измерениям - достаточна? 2) Блокировка по измерениям и по разделителю ставится, ибо режим регистра РазрешитьРазделениеИтогов приоритетен над свойством БлокироватьДляИзменения набора записей - так? 3) Все логично. 4) Почему вообще ставится блокировка???? |
|||
11
WebberNSK
12.01.15
✎
15:12
|
(9) потому что 1С так работает
|
|||
12
Гёдза
12.01.15
✎
15:12
|
БлокироватьДляИзменения - это не вкл/вкл блокировки.
Это вкл/выкл блокировки ЧТЕНИЯ |
|||
13
H A D G E H O G s
12.01.15
✎
15:13
|
(10) БлокироватьДляИзменения=Ложь у набора РН выставил.
Или мне надо самому потом этот набор записать? |
|||
14
Гёдза
12.01.15
✎
15:13
|
||||
15
WebberNSK
12.01.15
✎
15:14
|
(13)
БлокироватьДляИзменения ТОЛЬКО отключает разделитель итогов |
|||
16
H A D G E H O G s
12.01.15
✎
15:15
|
(14) Спс, буду читать.
|
|||
17
ma2
12.01.15
✎
15:15
|
+(12)точнее, поставить эксклюзивные блокировки при считывании, во избежание их блокирования другими перед твоей записью. Так сказать уход от дедлока.
|
|||
18
Гёдза
12.01.15
✎
15:17
|
Просто 1с не корректно назвали свойство, уже не мало копий на этом сломано
|
|||
19
WebberNSK
12.01.15
✎
15:18
|
(18) все они нормально назвали, если "толстую" книжку с кубиком читать по порядку
|
|||
20
Гёдза
12.01.15
✎
15:26
|
(19) Нормально - это когда понимаешь смысл свойства без чтения толстой книги.
И не появляются потом статьи: А что же реально значит сее свойство |
|||
21
leonidkorolev
12.01.15
✎
15:28
|
Просто не стали сильно расписывать. По идее получилось бы название
БлокироватьДляЧтенияВДругойТранзакцииДляКорректногоИзмененияВТекущейТранзакции. |
|||
22
Гёдза
12.01.15
✎
15:29
|
Корректное название "БлокироватьЧтение"
|
|||
23
H A D G E H O G s
12.01.15
✎
15:29
|
По идее название должно было быть:
ОтключитьРазделениеИтогов |
|||
24
Гёдза
12.01.15
✎
15:29
|
А назвали по аналогии с запросом "ДЛЯ ИЗМЕНЕНИЯ"
|
|||
25
WebberNSK
12.01.15
✎
15:32
|
(21) +100500
|
|||
26
Господин ПЖ
12.01.15
✎
15:38
|
(24) а где аналогия?
для изменения меняет вид блокировки на скуле S -> U а тут меняется состав полей чтобы избежать дедлока |
|||
27
H A D G E H O G s
12.01.15
✎
15:39
|
Теперь еще вопрос:
Вот есть у меня оприходование разными ПТУ одинакового товара. Без использования "Разделение итогов" я не смогу одновременно проводить их? Вроде раньше, когда этой опции ("Разделение итогов") не было - неявная блокировка по измерениям не ставилась, не? |
|||
28
Новенький_2009
12.01.15
✎
15:41
|
(27) у одной из транзакций возникнут ожидания на блокировках таблицы итогов. Когда разделитель включен = две записи запишутся параллельно.
Ты ж вроде эксперта записывался сдавать? :) |
|||
29
H A D G E H O G s
12.01.15
✎
15:43
|
(28) "у одной из транзакций возникнут ожидания на блокировках таблицы итогов. Когда разделитель включен = две записи запишутся параллельно. "
Я знаю, как будет сейчас. Я спрашиваю - как было раньше, до появления режима "Разделение итогов" |
|||
30
Новенький_2009
12.01.15
✎
15:44
|
(29) >>Без использования "Разделение итогов" я не смогу одновременно проводить их? - при отсутствии разделении итогов, "как раньше" - возникали ожидания. Параллельно две транзакции выполнится не могли.
|
|||
31
Гёдза
12.01.15
✎
15:45
|
(26) Аналогия в названии ))
|
|||
32
Новенький_2009
12.01.15
✎
15:45
|
два документа параллельно провестить, в описанном случае - не могли.
|
|||
33
WebberNSK
12.01.15
✎
15:49
|
(27) я думаю вам нужно освежить в памяти то, как работает механизм блокировок в 1С, тогда очень много вопросов отпадет
|
|||
34
Новенький_2009
12.01.15
✎
15:51
|
Я помню ТС записывался эксперта сдавать. Или путаюсь? Вроде что-то даже цифра то ли 3 фигурировала в датах :)
|
|||
35
H A D G E H O G s
12.01.15
✎
15:52
|
(33) Я и освежаю.
|
|||
36
H A D G E H O G s
12.01.15
✎
15:52
|
(34) Да, записывался на 19.01
|
|||
37
Господин ПЖ
12.01.15
✎
15:53
|
(31) предлагаю ввести еще свойство типа "НачатьИгнорироватьРазделитель" и пунктик в "совместимости"
больше батиков, малопонятных и разных |
|||
38
Господин ПЖ
12.01.15
✎
15:54
|
(36) Дима, а курсы у тебя были по этой теме? или ты сам готовишься, факультативно?
|
|||
39
Новенький_2009
12.01.15
✎
15:54
|
(36) ну тогда как сдашь - не забудь похвастаться :)
|
|||
40
Лохматые Уши
12.01.15
✎
15:55
|
(7) В какой момент?
|
|||
41
H A D G E H O G s
12.01.15
✎
15:58
|
(38) 3 дня после завала по Эксперту :-) в УЦ1, теперь сам, факультативно.
|
|||
42
WebberNSK
12.01.15
✎
16:05
|
(36) удачи
успевайте сдавать до апреля, потом большая вероятность, что изменятся требования/задачи/вопросы и т.д. |
|||
43
H A D G E H O G s
12.01.15
✎
16:06
|
http://infostart.ru/public/196565/ - отличная статья, все объясняющая в (0).
Только кодом вида: Движения.ТоварыНаСкладах.Очистить(); Движения.ТоварыНаСкладах.БлокироватьДляИзменения=Ложь; Движения.ТоварыНаСкладах.Записывать = Истина; Движение = Движения.ТоварыНаСкладах.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.Номенклатура = Номенклатура; Движение.Количество = Количество; Движения.Записать(); Запрос=Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | ТоварыНаСкладахОстатки.Номенклатура, | ТоварыНаСкладахОстатки.КоличествоОстаток |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки"; ТЗ=Запрос.Выполнить().Выгрузить(); Если Предупреждение Тогда Предупреждение("Блокировка"); КонецЕсли; Не удается вызвать взаимоблокировки. |
|||
44
kerm
12.01.15
✎
16:08
|
А по курсу Оптимизация производительности «1С:Предприятие 8» и подготовка к 1С:Эксперт зря не стал готовится.
|
|||
45
H A D G E H O G s
12.01.15
✎
16:10
|
(44) Выучить то, что нужно сказать, чтобы получить зачет и при этом нихера не понять - это глупости.
|
|||
46
Гёдза
12.01.15
✎
16:10
|
(43) Так ведь радленение итогов же
|
|||
47
H A D G E H O G s
12.01.15
✎
16:11
|
(46) Так ведь чтение остатков же.
|
|||
48
GROOVY
12.01.15
✎
16:27
|
Тут ребята собрались перед экзаменом чайком побаловаться :)
http://forum.chistov.pro/index.php?topic=893.120 |
|||
49
Serginio1
12.01.15
✎
16:39
|
(43) Скорее в http://1cprogress.ru/rezhim-razdeleniya-itogov.html
|
|||
50
floody
12.01.15
✎
16:39
|
(47) вопрос о "блокироватьдляизменения" еще актуален? устанавливается блокировка без учета разделителя, да. что еще?
|
|||
51
H A D G E H O G s
12.01.15
✎
16:50
|
(50) Нет, этот вопрос не актуален.
Актуален другой вопрос - когда я в одной транзакции заблокировал эксклюзивно строку итогов по товару, а в другой транзакции пытаюсь ее прочитать - и мне это удается. Почему? |
|||
52
floody
12.01.15
✎
16:52
|
(51) может у вас 8.3 и mssql 2005 или выше?
|
|||
53
H A D G E H O G s
12.01.15
✎
17:01
|
(52) Да, так и есть.
|
|||
54
kerm
12.01.15
✎
17:02
|
(45) зря так пишешь. Очень четко все объясняет и показывает на тестовых примерах.
|
|||
55
floody
12.01.15
✎
17:03
|
snapshot же
|
|||
56
floody
12.01.15
✎
17:04
|
посмотрите ТЗ с остатками. там должно быть значение остатка без учета прихода первой транзакции.
|
|||
57
Фауст
12.01.15
✎
17:04
|
(43) Запусти обе транзакции и останови их после Движения.Записать(); и до запроса;
Первую отпусти выполнить запрос и останови после запроса; Вторая не сможет выполнить запрос. Должно быть так, Разделитель итогов не забыл включить ? |
|||
58
H A D G E H O G s
12.01.15
✎
17:05
|
(57) Разделитель включен.
|
|||
59
floody
12.01.15
✎
17:05
|
cd'шку бы, тоже интересно стало посмотреть.
|
|||
60
H A D G E H O G s
12.01.15
✎
17:06
|
(55) snapshot - это уровень СУБД. Мы сейчас о блокировках 1С.
|
|||
61
floody
12.01.15
✎
17:09
|
(60) snapshot используется на субд, но только в случае управляемых блокировок. получается, сервер1с дает читать даже в случае эксклюзивной блокировки, т.к. прочитаете все равно негрязные данные.
|
|||
62
H A D G E H O G s
12.01.15
✎
17:10
|
(57) Вторая смогла выполнить запрос.
|
|||
63
H A D G E H O G s
12.01.15
✎
17:10
|
(61) Счаст посмотрю на ТЗ остатков.
Тоесть, сервер 1С забивает в данном случае на свои установленные блокировки? |
|||
64
floody
12.01.15
✎
17:11
|
(62) попробуйте отключить в свойствах базы snapshot. и попробовать. для проверки.
|
|||
65
floody
12.01.15
✎
17:12
|
не то, чтобы забивает на свои блокировки, а всего лишь дает читать при установленной Х блокировке. наоборот не даст) ну вы проверьте, мне тоже интересно это.
|
|||
66
Гёдза
12.01.15
✎
17:13
|
Так ведь блокировать для изменения = ложь, почему должно чтение блокироваться ?
|
|||
67
floody
12.01.15
✎
17:14
|
(66) изначально X блокировка не совместима ни с чтением, ни с чем
|
|||
68
H A D G E H O G s
12.01.15
✎
17:16
|
(67) Речь про блокировки 1С ? Давайте, чтобы не путаться, X, S, U блокировки будем применять для сервера СУБД, а Эксклюзивная-Разделяемая - для сервера 1С.
|
|||
69
floody
12.01.15
✎
17:18
|
(68) под Х имел ввиду и субд, и упр. блокировки.. изначально любая блокировка (Х, эксклюзивная) на запись блокировала всё.
это было узким местом, соответственно, с появлением уровня snapshot решили это использовать и в 1С проверили уже? |
|||
70
H A D G E H O G s
12.01.15
✎
17:20
|
(68) Нет, момент
|
|||
71
H A D G E H O G s
12.01.15
✎
17:24
|
(69) Перевел.
Ага, 1С напоролась на блокировку СУБД Конфликт блокировок при выполнении транзакции: Microsoft SQL Server Native Client 10.0: Lock request time out period exceeded. HRESULT=80040E31, SQLSrvr: SQLSTATE=HYT00, state=33, Severity=10, native=1222, line=1 |
|||
72
H A D G E H O G s
12.01.15
✎
17:24
|
При выполнении запроса по остаткам
|
|||
73
H A D G E H O G s
12.01.15
✎
17:25
|
Кровью и потом, а не читая статьи и махая гривой, что все понятно...
|
|||
74
floody
12.01.15
✎
17:26
|
я то думал мы дедлок пытаемся поймать
|
|||
75
H A D G E H O G s
12.01.15
✎
17:27
|
(74) Я тоже так думал, когда читал статью.
|
|||
76
floody
12.01.15
✎
17:28
|
по одной номенклатуре оба документа пишут движение?
|
|||
77
H A D G E H O G s
12.01.15
✎
17:29
|
Да
|
|||
78
Масянька
12.01.15
✎
17:30
|
Если я правильно понимаю смысл: при написании новой версии программы для бух. учета (утрировано) фирма 1С пытается создать СУБД.
Очень напоминает: в процессе написания прикладной программы создать операционную систему. |
|||
79
H A D G E H O G s
12.01.15
✎
17:31
|
Хочется cf шник с примером deadlock-а
|
|||
80
floody
12.01.15
✎
17:35
|
(79) Можете дать свой cf? ну или dt?
|
|||
81
Serginio1
12.01.15
✎
17:35
|
||||
82
floody
12.01.15
✎
17:36
|
(81) спс, кэп )
|
|||
83
H A D G E H O G s
12.01.15
✎
17:43
|
||||
84
ssh2QQ6
12.01.15
✎
17:46
|
(71) напоролась потому что видимо была попытка прочитать незафиксированные в транзакции данные. А чтобы в другой трранзакции вообще не начиналось чтение данных на которые наложена упр блокировка, в ней также перед чтением нужно накладывать исключительную упр блокировку перед запросом, тогда будет уже ошибка 1с, а не субд. В автоматических блокировках вместо этого в запросе было "для изменения"
|
|||
85
Гёдза
12.01.15
✎
17:51
|
По 2м блокировкам нельзя поймать дэдлок.
|
|||
86
Гёдза
12.01.15
✎
17:52
|
нужно 4 минимум
|
|||
87
H A D G E H O G s
12.01.15
✎
17:53
|
(86) Статья - врет? :-)
|
|||
89
floody
12.01.15
✎
17:57
|
(85) всмысле по двум нельзя? две транзакции взаимоблокируются. какие еще нафиг четыре?
|
|||
90
Гёдза
12.01.15
✎
18:00
|
(87) ну там собственно и есть 4 блокировки: 2 на запись и 2 на чтение
|
|||
91
Гёдза
12.01.15
✎
18:00
|
(89) Транзакции 2 - блокировки 4
|
|||
92
ssh2QQ6
12.01.15
✎
18:03
|
(85) классическая ситуация:
считываются остатки потом запись в автоматических блокировках, средством борьбы с дедлоком было "для изменения" в запросе. Ведь автоматических блокировках считанные запросом данные блокируются от изменения до конца транзакции. А с "для изменения" чтение в другой транзакции не произойдет до завершения первой и дедлока не будет. В упр блокировках - данные читаемые запросом блокируются только на время чтения. Если не наложить никаких явных упр блокировок то дедлока не будет, но будет нарушение логики алгоритма, один сеанс может получить остатки которые к моменту записи уже будут изменены другой транзакцией. Если наложить разделяемую, то будет дедлок. Поэтому накладывается исключительная перед чтением. |
|||
93
floody
12.01.15
✎
18:03
|
(87) соник, ищем дедлок, он должен быть, просто обязан.
|
|||
94
Гёдза
12.01.15
✎
18:03
|
Хотя то что запрос в транзакции вызывает наявную блокировку - странно как то
|
|||
95
Reaper_1c
12.01.15
✎
18:06
|
(0)
Объясняю на пальцах: В Управляемом режиме работы с транзакционными блокировками: 1. Запись набора записей устанавливает неявную блокировку по всем измерениям. 2. Разделитель итогов по умолчанию включается в состав полей блокировки, накладываемой процессом записи по умолчанию 3. Для того, чтобы исключить разделитель итогов из полей блокировки предназначено свойство "блокировать для изменения" набора записей из коллекции движений документа. Ссылок на документацию не найду, т.к. получал сокральные знания от Дмитрия Гончарова в УЦ 3. Все это элементы "новой" методики проведения, и на этом особенности методики еще не кончаются. |
|||
96
ssh2QQ6
12.01.15
✎
18:07
|
(92) [В упр блокировках - данные читаемые запросом блокируются только на время чтения. ] - имеются ввиду блокировки субд, в упр блокировках уровень Read Committed.
|
|||
97
H A D G E H O G s
12.01.15
✎
18:18
|
(95) Это стало понятно несколько часов назад.
|
|||
98
H A D G E H O G s
12.01.15
✎
18:18
|
У народа каша в головах - сколько человек - столько и мнений.
|
|||
99
H A D G E H O G s
12.01.15
✎
18:19
|
Ладно, вернемся к блокировкам завтра.
|
|||
100
Гёдза
12.01.15
✎
18:20
|
Чтоб дедлок получить нужно Предупреждение перед запросом поставить
|
|||
101
Гёдза
12.01.15
✎
18:21
|
Запись1
Запись2 Чтение1 Чтение2 |
|||
102
H A D G E H O G s
12.01.15
✎
18:24
|
(100) Не работает
|
|||
103
ssh2QQ6
12.01.15
✎
18:24
|
дополнение к (92) - Вот здесь хорошо описано про взаимоблокировки. И для режима автоматических и управляемых
http://kb.1c.ru/articleView.jsp?id=46 |
|||
104
floody
12.01.15
✎
18:25
|
(100) Нет, не прав.
Объясняю, почему нет дедлока. Дедлок случается только в случае ПОВЫШЕНИЯ уровня блокировки в одной транзакции, т.е. сначала Чтение, потом запись. Но не наоборот, как в нашем случае. Чтением получаем данные только зафиксированных транзакций, т.е. первая наша транзакция не может помешать (она еще не зафиксирована). |
|||
105
floody
12.01.15
✎
18:33
|
Хотя еще не совсем истина. Может груви заглянет.
|
|||
106
Reaper_1c
12.01.15
✎
19:47
|
(50) Платформа не блокирует чтение данных. Блокировки конкурируют с блокировками. Если тебе нужно обеспечить воспроизводимое чтение внутри транзакции - накладывай перед чтением разделяемую блокировку.
|
|||
107
ИС-2
naïve
12.01.15
✎
20:08
|
в файловой базе при записе блокируется вся таблица данных. Решение клиент-сервер. Но в порядке эксперемента удалите при блокировке файл 1Cv8.1CL из каталога БД
|
|||
108
ИС-2
naïve
12.01.15
✎
20:08
|
не туда
|
|||
109
H A D G E H O G s
13.01.15
✎
12:54
|
Все оказалось логично и понятно.
Перед чтением из регистра надо руками устанавливать разделяемую блокировку. При этом возникает deadlock, последовательность действий: Запись1 Запись2 Чтение2 Чтение1 |
|||
110
H A D G E H O G s
13.01.15
✎
12:55
|
Забавно, что при неоперативном перепроведении документа - никакой блокировки по измерениям в регистре не ставится.
Тоже надо учитывать. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |