|
Поговорим о БлокировкаДанных | ☑ | ||
---|---|---|---|---|
0
Eugeneer
20.09.22
✎
17:30
|
Есть там такое чудо. как БлокировкаДанных
Какой реальный толк дает? Есть смысл использовать для ускорения записи регистра сведений? или пофигу. |
|||
1
bolobol
20.09.22
✎
17:35
|
Блокировка не для ускорения, а избегать падения
|
|||
2
bolobol
20.09.22
✎
17:36
|
Блокируется возможность параллельной записи конкурентом
|
|||
3
rphosts
20.09.22
✎
17:39
|
(0) начни с поиска ну пусть по фразам "фантомные записи", ""грязное" чтение".
|
|||
4
mikecool
20.09.22
✎
17:44
|
говорить не о чем...
|
|||
5
rsv
20.09.22
✎
17:52
|
(0) обеспечение изоляции транзакций и как следствие согласованность данных.Либо блокировками либо версиями.
Прикладное трактование 1с ( галочка управляемый режим вкл) - блокировка данных. Не быстро и не медленно , но правильно. |
|||
6
timurhv
20.09.22
✎
19:04
|
(0) Загружает кто-то по веб-сервису данные. Если не ставить блокировку, допустим по артикулу номенклатуры, то могут 2 раза в 1 момент прислать пакеты с 1 артикулом и будут дубли справочника.
Ставишь свойство "Поля блокировки данных" у справочника по артикулу и 2-ой поток не сможет создать справочник с этим же артикулом наложив блокировку, пока 1-ый поток не снимет блокировку. Или отправляете данные по документу в стороннюю программу, после отправки нужно изменить у него реквизит. Без блокировки может случиться ситуация, что пользователь открыл документ на редактирование, вы отправили пакет, но не смогли записать объект с измененным реквизитом. |
|||
7
Конструктор1С
20.09.22
✎
19:34
|
(0) спи спокойно. Для ларьков с файловыми базами на полтора пользователя БлокировкаДанных не нужна
|
|||
8
ДедМорроз
20.09.22
✎
23:33
|
На самом деле,блокировка двнных - это отдельный механизм,не имеющий отношения ни к данным ни к блокировке.
Суть механизма в том,что у объектов определены поля блокировки,то есть координаты в многомерном пространстве,а объект блокировки позволяет сообщить о том,что мы собираемся изменять объект,который в этом пространстве нахрдится,причем,при пропуске координат сразу блокируется вся ось. Соответственно,мы запрашиваем блокировку по данному пространству,и если она возможна,то нам возвращают управление,если нет,то выполняется ожидание и возвращается исключение. Ну и,конечно,механизм работает в транзакции - при фиксации или отмене транзакции все блокировки снимаются. В клиент-серверном варианте за блокировки отвечает сервер 1с и их даже в консоли кластера можно увидеть. В файловом режиме они переводятся в блокировки таблиц,так как файловпя база блокировки на уровне записей не умеет. |
|||
9
Сергиус
20.09.22
✎
23:56
|
(0)[Есть смысл использовать для ускорения записи регистра сведений]
Для ускорения записи, есть смысл разбивать на транзакции, а не пробовать пихать всё в одной туда. |
|||
10
H A D G E H O G s
21.09.22
✎
00:16
|
(8) Для набора записей Регистра сведений при замещающей записи
Набор.Записать(ИСТИНА) тоже блокируется вся ось, даже если ты четко отборы укажешь. Иначе от фантомов не избавиться. |
|||
11
Garykom
гуру
21.09.22
✎
00:31
|
Что лучше блокировки или двойная проверка на дубли до и после записи?
Грязное чтение фигня решаемая транзакциями |
|||
12
rphosts
21.09.22
✎
04:01
|
(8) "смешались в кучу кони-люди"... есть блокировки базовода(ака СУБД) а есть блокировки сервера 1С, у вас какое-то микс-описание
|
|||
13
OldCondom
21.09.22
✎
06:45
|
(9) многопоточность что ли?
|
|||
14
rphosts
21.09.22
✎
06:48
|
(13) большой набор данных сам по себе может попасть на ожидание на блокировках (в смысле чем больше данных тем линейно выше растёт вероятность, если в целом код ИБ не косячный)
|
|||
15
OldCondom
21.09.22
✎
06:54
|
(14) так да, мои потуги в многопоточность в это и упирались, толку было чуть менее, чем 0%. То есть еще и по блокировкам раскидывать?
|
|||
16
rphosts
21.09.22
✎
07:04
|
(15) если у тебя блоки транзакций не пересекаются и у серверов процессоры работают в полсилы - распараллелить очевидный способ ускорить
|
|||
17
MyNick
21.09.22
✎
07:52
|
(0) экспертная постановка вопроса
|
|||
18
Eugeneer
21.09.22
✎
09:44
|
Ну давайте пример приведем. Допустим есть некий регистр сведений.
В нем сотни тысяч записей. Все их нужно уничтожить - по одному измерению. Допустим это Склад. НаборЗаписей = РегистрыСведений.РаспределениеЗапасов.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Склад.Установить(СкладОтбор); НачатьТранзакцию(); Попытка НаборЗаписей.ОбменДанными.Загрузка = Истина; НаборЗаписей.Записать(Истина); ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); КонецПопытки; |
|||
19
Eugeneer
21.09.22
✎
09:45
|
+(18) стоит ли тут ставить блокировку.
|
|||
20
rozer76
21.09.22
✎
10:53
|
(19) нет, она будет установлена при записи
|
|||
21
H A D G E H O G s
21.09.22
✎
12:35
|
Ну что, поговорили о блокировках?
|
|||
22
PLUT
21.09.22
✎
12:48
|
единственный раз пришлось недавно использовать блокировку (при многопользовательской работе) для самописьного механизьма присвоения новых номеров для договоров (ну там префиксы-суффиксы и порядковый номер). это чтобы одинаковые номера не смогли юзвери присвоить договорам
|
|||
23
ДедМорроз
21.09.22
✎
22:53
|
(12) я отвечал только про объект БлокировкаДанных и блокировки на уровне сервера 1С,который для них используется.
Про блокировки на уровне СУБД отдельная история. |
|||
24
НафНаф
22.09.22
✎
06:05
|
(0) у тебя же всё летает миллисекунды
|
|||
25
Ryzeman
22.09.22
✎
08:06
|
(0) Блин, не ожидал, что ты не знаешь зачем они нужны)
Пример из жизни - ты читаешь какие то данные из регистра, на их основе проделываешь какой то расчёт и записываешь в этот регистр изменённые данные. Вот что бы другой процесс\пользователь не смог считать старые данные пока ты рассчитываешь новые - ставится блокировка, процесс который запросит эти же данные будет ожидать снятия блокировки. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |