|
Управляемые блокировки | ☑ | ||
---|---|---|---|---|
0
pechkin
16.11.21
✎
10:15
|
Есть регистр накопления с 2мя измерениями
Контейнер, Ячейка (в таком порядке) Берем пример. С какого х... эти блокировки конфликтуют? |
|||
1
aka MIK
16.11.21
✎
10:18
|
Накладывай по всем измерениям. Где гарантия что пространство второй блокировки не пересекает первую?
|
|||
2
unbred
16.11.21
✎
10:18
|
(0) Пауза(60); покажи код, плс)
|
|||
3
aka MIK
16.11.21
✎
10:18
|
ЭлементБлокировки.УстановитьЗначение("Ячейка", Контейнер2);
Тут точно ошибки нет? |
|||
4
pechkin
16.11.21
✎
10:19
|
(3) ячейка - составной тип: ячейка+контейнер
|
|||
5
pechkin
16.11.21
✎
10:21
|
||||
6
unbred
16.11.21
✎
10:24
|
(5) у меня пустой цикл. мне не нра. твой вариант сильно лучше?
|
|||
7
unbred
16.11.21
✎
10:30
|
(5) спасибо!!!
|
|||
8
Ёпрст
16.11.21
✎
10:42
|
(6) пустой цикл грузит проц не по -детски
|
|||
9
unbred
16.11.21
✎
10:43
|
(8) 50% разница. только что замерял.
|
|||
10
Ryzeman
16.11.21
✎
10:45
|
(2) БСП
ОбщегоНазначенияБТС.Пауза(<секунд>) |
|||
11
Ёпрст
16.11.21
✎
10:47
|
Так, хотя бы
Процедура Уснуть(КоличествоСекунд) Попытка Соединение = Новый HTTPСоединение("127.0.0.0",,,,,КоличествоСекунд); Соединение.Получить(Новый HTTPЗапрос()); Исключение Конецпопытки; КонецПроцедуры |
|||
12
ADirks
16.11.21
✎
10:48
|
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый;
и ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; вот и конфликтуют |
|||
13
Ёпрст
16.11.21
✎
10:49
|
(0) а режим управления блокировкой в свойствах конфы какой ?
ЗЫ: если явно указать в НачатьТранзакцию и там и там, что управляемый |
|||
14
unbred
16.11.21
✎
10:49
|
(10) ты код покажи.
|
|||
15
pechkin
16.11.21
✎
10:49
|
(12) они по разным измерениям - это раз. по разным занчениям - это 2.
кмк блокировка по ячейке блокирует всю таблицу. но по тж я не проверял |
|||
16
Ryzeman
16.11.21
✎
10:54
|
(14) Зачем? Это БСПшная процедура. Мне как бы не жалко, вот:
Процедура Пауза(Секунд) Экспорт ТекущийСеансИнформационнойБазы = ПолучитьТекущийСеансИнформационнойБазы(); ФоновоеЗадание = ТекущийСеансИнформационнойБазы.ПолучитьФоновоеЗадание(); Если ФоновоеЗадание = Неопределено Тогда Параметры = Новый Массив; Параметры.Добавить(Секунд); ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбщегоНазначенияБТС.Пауза", Параметры); КонецЕсли; ФоновоеЗадание.ОжидатьЗавершенияВыполнения(Секунд); КонецПроцедуры |
|||
17
unbred
16.11.21
✎
10:56
|
(11) лол. КоличествоСекунд 60.
код выполнялся 25 сек. чот не оч. |
|||
18
Ёпрст
16.11.21
✎
10:56
|
(12) разные же измерения и разные объекты , не ?
|
|||
19
ADirks
16.11.21
✎
10:56
|
(15) в доке пишут:
Разделяемая блокировка позволит конкурирующему процессу установить разделяемую блокировку по этому же условию, но не позволит установить исключительную блокировку. |
|||
20
unbred
16.11.21
✎
10:59
|
(16) круто. и что мне этот код даёт?))
|
|||
21
acht
16.11.21
✎
10:59
|
(15) Ты накладывашь две блокировки по двум пространствам, которые пересекаются на каком-то значении:
Номер строки - Контейнер - Ячейка 1 - 1 - 1 2 - 1 - 2 3 - 2 - 1 4 - 2 - 2 Первая блокировка по Контейнер = 1 захватывает строки 1 и 2 Второя блокировка по Ячейка = 2 захватывает строки 2 и 4 Конфликт на строке 2, так как вторая блокировка исключительная. |
|||
22
pechkin
16.11.21
✎
11:00
|
(19) думаешь если на исключительну поменять - заработает?
|
|||
23
pechkin
16.11.21
✎
11:01
|
(21) никаких значений в регистре нет или даже есть - разницы нет
|
|||
24
pechkin
16.11.21
✎
11:06
|
||||
25
H A D G E H O G s
16.11.21
✎
11:19
|
(0) с фантомами так борются, Анатолий.
|
|||
26
Ёпрст
16.11.21
✎
11:20
|
Ну, в доке написано, что есть режим поглощения блокировок
см п.9.3.6 https://its.1c.ru/db/v8314doc#bookmark:dev:TI000000537 |
|||
27
unbred
16.11.21
✎
11:25
|
(10) ага, почитал, спасибо. чот так себе. что там в платформе зашито, тоже не ясно..
|
|||
28
ДенисЧ
16.11.21
✎
11:29
|
(24) На файловой управляемые блокировки? Это когда такое сделали?
|
|||
29
unbred
16.11.21
✎
11:30
|
(11) до 20 сек работает корректно. видимо, что-то в настройках сервака..
|
|||
30
Cyberhawk
16.11.21
✎
11:31
|
Потому что не указываешь второе измерение
|
|||
31
hhhh
16.11.21
✎
11:32
|
(24) на файловой захватывается вся таблица, без вариантов.
|
|||
32
Ёпрст
16.11.21
✎
11:32
|
(29) есть настройка таймаута, по-умолчанию 30 сек, у тя просто не дожидается и вылет
|
|||
33
Добрыня Никитич
16.11.21
✎
11:39
|
(0) Блокировка по значению одного измерения значит, что что по второму измерению блокируются все значения. Поэтому такая блокировка конфликтует с блокировкой по конкретным значениям второго измерения.
|
|||
34
polosov
16.11.21
✎
11:41
|
(0) Просто сделай запросом выборку по первому отбору и по второму, потом внутреннее соединение. И найдешь пересечение.
|
|||
35
pechkin
16.11.21
✎
12:15
|
(31) на управляемых блокировках - конечно же не так
|
|||
36
pechkin
16.11.21
✎
12:16
|
(30) где-то об этом сказано?
|
|||
37
pechkin
16.11.21
✎
12:19
|
(33) про ткое что-то не подумал. наверно так и есть
|
|||
38
ДенисЧ
16.11.21
✎
12:21
|
(35) На файловой?
|
|||
39
acht
16.11.21
✎
12:31
|
(35) На файловой базе блокировка на уровне СУБД по уровню перебивает все твои управляемые выкрутасы. Поэтому даже если управляемая блокировка пропустит тебя, ты гарантировано упрешся в блокировку СУБД. Потому как serializable.
|
|||
40
pechkin
16.11.21
✎
12:31
|
(38) на любой. управляемые блокировки живут не зависимо от СУБД
|
|||
41
pechkin
16.11.21
✎
12:31
|
(39) пример на файловой, а так то у меня скл
|
|||
42
acht
16.11.21
✎
12:32
|
(41) И зачем ты тогда вообще пример делал?
|
|||
43
pechkin
16.11.21
✎
12:33
|
(42) пример обычно делается для изоляции ошибки
|
|||
44
acht
16.11.21
✎
12:33
|
(43) Ну, ты мог бы еще на 7.7 его сделать.
|
|||
45
ДенисЧ
16.11.21
✎
12:34
|
(40) ОйблЪ...
|
|||
46
pechkin
16.11.21
✎
12:35
|
(45) собственно для этого и придумали упр блокировки. чтоб бд не мешала
|
|||
47
polosov
16.11.21
✎
12:37
|
(46) Нет. Управляемые блокировки придумали, чтобы разработчик более четко управлял блокировками.
|
|||
48
polosov
16.11.21
✎
12:38
|
+(47) Ну или сломал все к херам.
|
|||
49
fisher
16.11.21
✎
12:40
|
(40) Да. Но для файловой решили не заморачиваться. Ими же должен кто-то управлять. Поэтому на файловой блокировки всегда табличные.
|
|||
50
Добрыня Никитич
16.11.21
✎
12:41
|
(39) Валер, какой serializable? Как там в 2007, норм?
|
|||
51
mistеr
16.11.21
✎
12:44
|
(0) Какую ошибку получаешь?
И ТЖ покажи. |
|||
52
acht
16.11.21
✎
12:46
|
(50) Кто такой Валера?
|
|||
53
fisher
16.11.21
✎
12:48
|
(49) + Скорее даже не из-за необходимости реализации менеджера блокировок на файловой, а из-за особенностей работы файлового движка, наверное. А может и то другое.
|
|||
54
mistеr
16.11.21
✎
12:50
|
(49) Не путай управляемые блокировки и табличные. На файловой работают и те, и другие.
|
|||
55
fisher
16.11.21
✎
12:52
|
||||
56
fisher
16.11.21
✎
12:53
|
Первая табличечка
|
|||
57
pechkin
16.11.21
✎
12:55
|
Признаю был не прав. все таки для блокировки записей нужен сервер
|
|||
58
Fragster
гуру
16.11.21
✎
12:56
|
(55) там неактуальная инфа, сейчас не read committed, а read committed snapshot
|
|||
59
mistеr
16.11.21
✎
12:57
|
(57) Но не для упр. блокировок.
(56) Эта табличечка про блокировочки СУБД. |
|||
60
mistеr
16.11.21
✎
13:01
|
(24) А пожешь на 17 или 18 платформе сделать?
|
|||
61
pechkin
16.11.21
✎
13:01
|
(59) вот и я думал как ты. но все не совсем так
|
|||
62
fisher
16.11.21
✎
13:02
|
(58) Нельзя сказать, что неактуальная. Потому что read committed snapshot - это в терминологии mssql которым пришлось придумать новое название чтобы отличалось от старого блокировочного read committed. В общей литературе при упоминании режимов изоляции до таких ньюансов обычно не опускаются.
(59) Ок. И какой смысл тогда блокировать по измерениям регистра, если блокироваться будет вся таблица регистра хоть в лоб, хоть по лбу? |
|||
63
pechkin
16.11.21
✎
13:04
|
||||
64
mistеr
16.11.21
✎
13:05
|
(62) При блокировке по измерениям регистра таблица не блокируется. Таблица блокируется при записи набора.
А смысл — упр. блокировки позволяют реализовать логику, которую не позволяют реализовать блокировки СУБД. |
|||
65
pechkin
16.11.21
✎
13:06
|
при упр блокировках никакие таблицы не блокируются. блокируются виртуальные переменные про таблицы
|
|||
66
pechkin
16.11.21
✎
13:07
|
это можно легко увидеть, ибо при исключительной блокировке вполне можно запрос читать данные в другом сеансе.
|
|||
67
fisher
16.11.21
✎
13:13
|
(64) С одной стороны ты вроде прав. Но с другой - serializable обязывает к тому, чтобы прочитанные в одной транзакции данные нельзя было поменять в другой. И в файловой по-моему тупо реализовали так, что хрена ты проведешь параллельно два дока, пишущих в один регистр. Но я по файловой не спец, могу и ошибаться.
|
|||
68
mistеr
16.11.21
✎
13:18
|
(67) serializable обязывает немного к этому. :) Остальное верно, и даже без упр. блокировок. Но это не мешает использовать еще и их, когда нужно. :)
|
|||
69
fisher
16.11.21
✎
13:21
|
(68) В сабже нет записи в регистр. Но есть транзакция. И объявлена исключительная управляемая блокировка. Допускаю, что ее могут тупо транслировать в блокировку всей таблицы. Ибо нефиг. Или практика говорит об обратном?
|
|||
70
mistеr
16.11.21
✎
13:24
|
(63) Код в примере отличается от (0). Блокировка накладывается только по измерению Контейтер.
|
|||
71
pechkin
16.11.21
✎
13:24
|
(70) это я уже проверял что реально по таблице на файле
|
|||
72
mistеr
16.11.21
✎
14:08
|
(71) Да, что-то не очень понятное происходит.
Показывай записи о блокировках из ТЖ. |
|||
73
pechkin
16.11.21
✎
14:09
|
(72) такой возможности снять тж нет. но вроде уже разобрались
|
|||
74
Добрыня Никитич
16.11.21
✎
14:10
|
(73) А почему нет? Одмины не дают доступ на сервер апликейшн?
|
|||
75
mistеr
16.11.21
✎
14:11
|
(73) И что выяснили?
|
|||
76
Добрыня Никитич
16.11.21
✎
14:15
|
(75) serializable же, привет из 2007
|
|||
77
ДенисЧ
16.11.21
✎
14:15
|
(71) внезапно, правда? )))
Везде декларируется, что на файловой базе блокировки идут по таблице, и тут оппа - и новость... |
|||
78
pechkin
16.11.21
✎
14:25
|
(75) выяснили (33) спасибо Добрыня Никитич
|
|||
79
fisher
16.11.21
✎
14:43
|
(78) То есть блокировки по разным значениям одного измерения таки параллелит?
|
|||
80
pechkin
16.11.21
✎
14:45
|
(79) где на файле? на файле нет конечно. но мне то не для файла нужно
|
|||
81
fisher
16.11.21
✎
14:46
|
(80) Ну почему "конечно". mistеr говорит об обратном. А я не проверял, только догадками оперирую.
|
|||
82
pechkin
16.11.21
✎
14:48
|
(81) там же в табличке черным по желтому сказано: упр блокирвоки по таблицам
|
|||
83
pechkin
16.11.21
✎
14:49
|
собственно я тоже так думал, что упр блокировками удалось полностью абстрагироваться от БД. но таки не удалось
|
|||
84
fisher
16.11.21
✎
14:51
|
(82) mistеr намекал на то, что все так, но есть мол ньюанс.
|
|||
85
fisher
16.11.21
✎
14:55
|
Типа в табличке блокировки для СУБД, а в режиме управляемых блокировок для примера типа сабжевого должно обойтись без блокировок СУБД. Ну, я так его понял.
|
|||
86
pechkin
16.11.21
✎
14:56
|
(85) ну все правильно он говорит. Блокировок субд нет. есть упр. Это совсем другое
|
|||
87
fisher
16.11.21
✎
15:01
|
(86) Ты меня запутал. Хоть сам проверяй. Такой код у тебя параллелится или нет на файловой?
|
|||
88
pechkin
16.11.21
✎
15:03
|
(87) не параллелится
|
|||
89
fisher
16.11.21
✎
15:06
|
(88) Спасибо. Другими словами похоже на то, что в файловой работу с блокировками оставили как и было в режиме автоматических блокировок, только в добавок если налагаются управляемые, то еще и по ним таблицы блокируют.
|
|||
90
pechkin
16.11.21
✎
15:08
|
(89) именно так
|
|||
91
ДенисЧ
16.11.21
✎
15:09
|
(89) Скажите, как вам подойдёт лавровый венок изобретателя велосипеда?
|
|||
92
fisher
16.11.21
✎
15:13
|
(90) Ну, что-то такое я и предполагал. Это позволило обойтись вообще без какого-либо нового менеджера блокировок на файловой.
(91) Хуже, чем значок слоупока. Примерно так я и считал, но mistеr удалось зародить сомнение ибо на поведение файловой мне всегда было плевать и в детали я не вдавался. |
|||
93
ДенисЧ
16.11.21
✎
15:14
|
(92) 1с во всех документациях просто орёт и бьётся об стенку, что в файловой управляемые не работают....
А вам пофиг.... |
|||
94
pechkin
16.11.21
✎
15:15
|
(93) почему не работают? работают но не совсем так
|
|||
95
pechkin
16.11.21
✎
15:16
|
в файловой любая упр блокировка тут же эскалируется на всю таблицу
|
|||
96
fisher
16.11.21
✎
15:17
|
(93) Как это не работают? Отлично работают. Все блокируется успешно. Документацию я и сам выше приводил. Но жизнь бывает богата на ньюансы.
|
|||
97
mistеr
16.11.21
✎
15:36
|
(89) (92) Я проверил. Действительно, блокировки, наложенные по разным значениям измерений, оказываются несовместимы. Но если накладывать разделяемые блокировки, то они совместимы.
Говорит ли это о том, что в файловой нет менеджера блокировок? По-моему, нет. |
|||
98
mistеr
16.11.21
✎
15:37
|
(93) Где именно орет, ссылку и цитату можно? Только именно про управляемые, а не уровня СУБД, сам не перепутай.
|
|||
99
fisher
16.11.21
✎
15:47
|
(97) Доказывает ли это, что в файловой есть менеджер управляемых блокировок? По-моему, нет.
|
|||
100
mistеr
16.11.21
✎
15:48
|
(97) Кстати, по периоду та же петрушка.
|
|||
101
pechkin
16.11.21
✎
15:50
|
(100) так эскалация же на всю таблицу
|
|||
102
Добрыня Никитич
16.11.21
✎
15:50
|
Пипец вы развели бодягу...
|
|||
103
fisher
16.11.21
✎
15:50
|
(99) + Транслируют в те же разделяемые табличные блокировки и всего делов.
|
|||
104
mistеr
16.11.21
✎
15:51
|
(101) Я не очень понимаю, при чем тут таблица. Таблицы регистра никто не трогает.
|
|||
105
pechkin
16.11.21
✎
15:51
|
(104) если не нарвится слово таблица, то пусть будет: эскалация на все пространство блокировок
|
|||
106
pechkin
16.11.21
✎
15:52
|
(103) нет, никто ничего не транслирует. блокировки субд и упр никак не связаны даже на файле
|
|||
107
mistеr
16.11.21
✎
15:53
|
(105) Да, давайте придерживаться оф. терминологии, дабы не вводить в заблуждение и себя, и тех, кто будет читать это потом.
|
|||
108
mistеr
16.11.21
✎
15:56
|
Модифицированный пример, более удобный для проверки, если кому интересно: https://file.io/VgZtF6ClmvDi
|
|||
109
fisher
16.11.21
✎
15:56
|
(106) Гррр! На файловой должен же быть какой-то топорный механизм табличных блокировок реализованный еще для автоматических блокировок. И управляемые просто его же и задействуют. "Я так думаю" (с) Хачикян
|
|||
110
mistеr
16.11.21
✎
15:59
|
(109) Это возможно.
|
|||
111
pechkin
16.11.21
✎
16:00
|
(109) это можно проверить легко.
Сделать запись в справочник. 2 сеанс читает запросом. При блокировках СУБД - 2й обломится. При упр должен смочь |
|||
112
fisher
16.11.21
✎
16:09
|
(111) Не понял. Что будет доказано, когда обломится?
|
|||
113
pechkin
16.11.21
✎
16:11
|
(111) если ты после упр блокировки смог прочитать запросом - то это не имеет никакого отношения к табличным блокировкам субд.
но нужно еще и проверить что заявляемые табличные блокировки имеют к ним отношение |
|||
114
mistеr
16.11.21
✎
16:13
|
(111) Чтение запросом не блокируется табличной блокировкой, только запись.
|
|||
115
pechkin
16.11.21
✎
16:16
|
(114) даже в транзакции?
|
|||
116
pechkin
16.11.21
✎
16:18
|
(115) таки проверил и оно бокируется
|
|||
117
pechkin
16.11.21
✎
16:18
|
и ошибка при выполнении запроса
Не удалось заблокировать таблицу '_Reference35' |
|||
118
mistеr
16.11.21
✎
16:19
|
(115) Только что проверил. https://ufile.io/eqxvia47
|
|||
119
pechkin
16.11.21
✎
16:19
|
значит получается, что разные механизмы, хоть и работают похоже
|
|||
120
pechkin
16.11.21
✎
16:21
|
кстати без транзакции все читается хорошо. Все как и должно быть
|
|||
121
fisher
16.11.21
✎
16:21
|
(113) Я спрашивал, что будет доказано когда не сможет :)
|
|||
122
pechkin
16.11.21
✎
16:21
|
(121) значит 1 механизм
|
|||
123
mistеr
16.11.21
✎
16:21
|
(118) Прошу прощения, правильная ссылка https://ufile.io/i4p3u983
|
|||
124
mistеr
16.11.21
✎
16:22
|
(120) Транзакция есть всегда, может неявная
|
|||
125
fisher
16.11.21
✎
16:23
|
(122) Это не доказывает. А всего лишь не опровергает.
|
|||
126
pechkin
16.11.21
✎
16:23
|
проверил блокировку и запрос - все сработало, не заблокировалось.
Вывод - механизмы разные |
|||
127
fisher
16.11.21
✎
16:24
|
(126) В параллельных транзакциях?
|
|||
128
mistеr
16.11.21
✎
16:24
|
(125) А в файловой вообще есть разделяемая блокировка таблиц? В каком случае используется?
|
|||
129
pechkin
16.11.21
✎
16:24
|
(127) конечно
|
|||
130
pechkin
16.11.21
✎
16:25
|
(128) получается что есть. При чтении таблицы в транзакции
|
|||
131
mistеr
16.11.21
✎
16:25
|
(130) Я имею в виду без относительно к упр.
|
|||
132
pechkin
16.11.21
✎
16:27
|
(131) про нее табличную и речь.
|
|||
133
mistеr
16.11.21
✎
16:28
|
(130) То есть во время чтения в таблицу нельзя писать?
|
|||
134
fisher
16.11.21
✎
16:29
|
(131) А как без нее обеспечивать serializable в автоматических блокировках?
|
|||
135
pechkin
16.11.21
✎
16:30
|
(133) нельзя. Иначе что это за блокировка такая
|
|||
136
mistеr
16.11.21
✎
16:35
|
(134) Ну да. :)
Надо проверить запрос итогов при наложенной упр. блокировке. |
|||
137
fisher
16.11.21
✎
16:38
|
(126) Ну вот. Такую стройную теорию порушил.
|
|||
138
fisher
16.11.21
✎
16:40
|
(126) Но вообще как-то странно. Неконсистентненько.
|
|||
139
fisher
16.11.21
✎
16:40
|
(126) Ты точно исключительную блокировку ставил?
|
|||
140
mistеr
16.11.21
✎
16:41
|
(136) Проверил, не мешает.
|
|||
141
fisher
16.11.21
✎
16:46
|
Тогда получается что механизмы разные, но оба табличные. Как-то странно. Раз уж отдельно все-таки замутили, то нафига на таблицу эскалировать?
|
|||
142
mistеr
16.11.21
✎
16:56
|
(141) О какой таблице речь в случае упр. блокировки? :)
|
|||
143
fisher
16.11.21
✎
17:17
|
(142) О той, которая блокируется, когда управляемую блокировку просили не об этом.
|
|||
144
pechkin
16.11.21
✎
17:24
|
(143) никакая таблица не блокируется. Блокируется Пространство Блокировок. Просто некторая переменная
|
|||
145
fisher
16.11.21
✎
18:48
|
(144) О боже мой. А в настоящих СУБД значит другие блокировки, настоящие? Не служебные данные в служебных структурах, а прям таблица гвоздями заколачивается крест-накрест?
|
|||
146
pechkin
16.11.21
✎
18:54
|
(145) если ты не можешь прочитать данные - то блокируется, если не можешь - то не блокируется
|
|||
147
ДенисЧ
16.11.21
✎
18:55
|
(146) "если ты не можешь прочитать данные, то блокируется ... если не можешь- то не блокируется"
(с) Надо записать |
|||
148
polosov
16.11.21
✎
18:56
|
(146) Подустал ты. Иди поешь, поспи. Хватит на сегодня.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |