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