|   |   | 
| 
 | Поговорим о БлокировкаДанных | ☑ | ||
|---|---|---|---|---|
| 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) Блин, не ожидал, что ты не знаешь зачем они нужны)
 Пример из жизни - ты читаешь какие то данные из регистра, на их основе проделываешь какой то расчёт и записываешь в этот регистр изменённые данные. Вот что бы другой процесс\пользователь не смог считать старые данные пока ты рассчитываешь новые - ставится блокировка, процесс который запросит эти же данные будет ожидать снятия блокировки. | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |