8.х Конфликт блокировок при выполнении транзакции

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем rio, 22 мар 2013.

  1. TopicStarter Overlay
    rio
    Offline

    rio

    Регистрация:
    22 мар 2013
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    Я не программист, я админ. Максимум батник написать могу с гуглом напару, или vbs скрипт прикрутить, но уже года как 4 такое нетребуется.

    А сложно установить блокировку на регистр до начала транзакции? Может просто несколько строчек кода вставить и все, а я сижу жду с моря погоды...
  2. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    Код:
    Блокировка = Новый БлокировкаДанных();
    Элемент = Блокировка.Добавит("РегистрРасчета.Имя");
    Элемент.Режим = РежимБлокировкиДанных.Исключительный;
    Блокировка.Забллокировать();
    где-то так

    блокировку до начала транзакции нельзя - только внутри в начале транзакции.
  3. TopicStarter Overlay
    rio
    Offline

    rio

    Регистрация:
    22 мар 2013
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    СПАСИБО!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    Все шикарно расчитывается!!!!!! Поначалу туговато, но после первых расчетов как по маслу.
    Блин, зашибись, а то надоело ждать своего коллегу, когда он сделает что-нибудь.

    ОГРОМНОЕ СПАСИБО!!!!!!
  4. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    да не за что.
    туговато пока кэш на sql разогреется, дальше легче. единственное теперь если один документ будет проводиться больше 20 минут, то следующий отвалится, но это уже настраивается в sql (таймаут ожидания на блокировке)
  5. MansR
    Offline

    MansR

    Регистрация:
    27 окт 2015
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Добрый день. Понимаю что уже тема старая, но у меня такая же проблема как и у автора. Подскажите куда именно вставить этот код. Я попробовал вставить его в Документы - НачислениеЗарплатыРаботникамОрганизации в функции РасчитатьНачисления после Начать транзакцию.
    И ничего не помогло, Может я не туда его вставил?
    Помогите пожалуйста!
  6. nbIpKuH_BaH9I
    Online

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.980
    Симпатии:
    398
    Баллы:
    104
    Вы не забывайте, что у метаданных также должно быть установлено свойство блокировок "Управляемый". У документа и регистра, который в данный момент обрабатываете. Давайте изначально все расскажите, что за ошибка и т.д.? При каких действиях?
  7. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Более того, если выполнить блокировку без указания значений блокируемых данных, заблокируется вся таблица.
  8. MansR
    Offline

    MansR

    Регистрация:
    27 окт 2015
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Итак подробно.
    Сервер Windows server 2012 standart, Xeon CPU E3-1220 V2 3,10GHz
    SQL Server 2014, 1C 8.3 ЗКБУ.
    при одновременном расчете зарплаты, больничных, отпуска и тд. у расчетчиков появляются ошибки Конфликт блокировок
    __________________________________________________________________________________________________________________________
    {Документ.НачислениеЗарплатыРаботникамОрганизаций.МодульОбъекта(1543)}: Ошибка при вызове метода контекста (Записать)
    НаборОсновныеНачисления.Записать(Истина, Ложь, Истина, Ложь);
    по причине:
    Конфликт блокировок при выполнении транзакции:
    Microsoft SQL Server Native Client 11.0: Transaction (Process ID 56) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
    HRESULT=80004005, SQLSrvr: SQLSTATE=40001, state=34, Severity=D, native=1205, line=1
    __________________________________________________________________________________________________________________________
    И очень медленно расчитывает, Проводил эксперименты, Расчет ЗП одним сотрудником, остальные выключены, рассчитывает в среднем 1 минуту, 2 сотрудника(одновременное нажатие на расчитать) 2,5 минуты, 3 сотрудника - 4 минуты, и тд, при этом возникают конфликты, и что интересно рассчитывает основные начисления, а НДФЛ и Удержания нет, но тот кто на долю секунду нажал быстрее все ОК(ни конфликтов, ни пустых НДФЛ и Удержаний).

    Свойства НачислениеЗарплатыРаботникамОрганизаций перевел на Управляемый, Регистры расчета тоже.
    Расчетчики жалуются на медленную работу.
    НА SQL EXPRESS все было нормально, но база перевалила га 10ГБ и перешли на SQL Server 2014, пока правда триал. Решили попробовать перед покупкой. и вот результат.
  9. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    Для начала - настроить сам SQL, ограничить его прожорливость по памяти, max degree of parallelism поставить 1.

    Ну и блокировать регистр при необходимости. Только не один, а все регистры расчета, которые используются, сразу

    В случае с расчетными регистрами и большим количеством сотрудников в разных подразделениях, да еще и с совмещениями, часто требуется именно это, чтобы документы перестали рассчитываться параллельно.
  10. MansR
    Offline

    MansR

    Регистрация:
    27 окт 2015
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    сегодня перешел с sql 2014 на sql 2008 и конфликтов можно сказать нету (очень редко вылазит). Ругается на строку "Блокировка.Забллокировать();" убрал вовсе предложенный код, завтра протестируем снова.
    но вот теперь почему 2008 работает, а 2014 нет интересно!?

    После перехода конфликт вылез 1 или 2 раза, и в этот момент все расчетчики говорили что сильно тормозило всё. А так все довольны скорость увеличилась, тормозов нет.
  11. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Настройки размещения файлов данных SQL какие? Степень параллелизма в обоих случаях одинаковая? Количество выделенной памяти SQL серверу в обоих случаях одинаково?
  12. MansR
    Offline

    MansR

    Регистрация:
    27 окт 2015
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    да настраивал 2008 так же как и 2014, можно сказать скопировал до последней запятой

Поделиться этой страницей