Автор Тема: Раздел 10. Взаимоблокировки и методы их исправления  (Прочитано 7926 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Droni

  • Модератор
  • Пользователь
  • *****
  • Сообщений: 97
Кроме того ответ 2 смущает тем что блокировка управляемая (то есть накладывается сервером 1с), а не СУБД.
При записи данных в ИБ, накладываются блокировки как сервером 1С, так и СУБД, но взаимоблокировка будет на уровне СУБД, так как управляемая блокировка на чтение (как из объектной технике, так и запросом) платформой автоматически не устанавливается.

1. Выложите текст обработки проведения документа или DT базы (если он не большой).
2. У вас СУБД MS SQL ?


Alexander

  • Пользователь
  • **
  • Сообщений: 23
  • ФИО: Kulikov Alexander
MS SQL 2012
документ - продажа
выгрузка здесь https://www.dropbox.com/s/b02s7n16w4r61k8/1010-1.dt?dl=0
« Последнее редактирование: Июль 16, 2015, 01:46:36 pm от Alexander »

LepRiKonS

  • Пользователь
  • **
  • Сообщений: 52
    • www.korolevpavel.ru
  • ФИО: Павел
10.1 - 3. "Настольная книга 1С Эксперта", стр. 57. С таким взаимоблокировками нужно бороться одинаковыми порядками захвата ресурсов. Snapshot'ы вызовут другие проблемы (неповторяемое чтение, отрицательные остатки). Использование Snapshot'ов - тонкая тема
Не смущает, что большинство типовых уже работают  в режиме - без совместимости, т.е. используется RCSI?
10.1 - 2 неверно на учебном тестировании.

LepRiKonS

  • Пользователь
  • **
  • Сообщений: 52
    • www.korolevpavel.ru
  • ФИО: Павел
10.18 - 5 верно с учебного тестирования.

v_mazeich

  • Пользователь
  • **
  • Сообщений: 22
  • ФИО: Виталий Александрович
Кроме того ответ 2 смущает тем что блокировка управляемая (то есть накладывается сервером 1с), а не СУБД.
При записи данных в ИБ, накладываются блокировки как сервером 1С, так и СУБД, но взаимоблокировка будет на уровне СУБД, так как управляемая блокировка на чтение (как из объектной технике, так и запросом) платформой автоматически не устанавливается.

1. Выложите текст обработки проведения документа или DT базы (если он не большой).
2. У вас СУБД MS SQL ?

Вот здесь интересно, ведь в настольной книге эксперта говорится, что "при чтении в объектной технике необъектных сущностей устанавливается неявная управляемая блокировка". Получение данных у РС методом СрезПоследних() не считается чтением в объектной технике? Или в примере говорится о запросе, который ингорируется менеджером блокировок 1С?)

Да и вообще при записи наложились Х блокировки, которые снимаются только в конце транзакции как в 1С так и в СУБД, далее могут быть только ожидания а не взаимоблокировка.

Или тут какую то роль играют поля пространства блокировок, наборы которых не пересекаются? Запутался уже совсем...

« Последнее редактирование: Сентябрь 18, 2015, 04:52:15 am от v_mazeich »

Alexander

  • Пользователь
  • **
  • Сообщений: 23
  • ФИО: Kulikov Alexander
10.10 ... Разобрался (сам с собой). При небольшом количестве записей в РС перед тем как добавить/обновить записи происходило их сканирование (для обновления). Видимо, оптимизатор СУБД посчитал что ему быстрее просканировать индекс чем произвести поиск - тем самым блокируя все записи. (Что интересно, сканирование происходит совсем по другому индексу (по измерениям), где имеются все поля (я так понимаю он не хотел использовать Key Lookup)). Лишь после того как я добавил в регистр значительное число записей (100 не помогло) - наконец то стал использоваться индекс по регистратору и все встало на свои места - Получил взаимоблокировку на уровне СУБД. Алилуя :)
« Последнее редактирование: Сентябрь 22, 2015, 11:03:51 am от Alexander »

v_mazeich

  • Пользователь
  • **
  • Сообщений: 22
  • ФИО: Виталий Александрович
10.10 ... Разобрался (сам с собой). При небольшом количестве записей в РС перед тем как добавить/обновить записи происходило их сканирование (для обновления). Видимо, оптимизатор СУБД посчитал что ему быстрее просканировать индекс чем произвести поиск - тем самым блокируя все записи. (Что интересно, сканирование происходит совсем по другому индексу (по измерениям), где имеются все поля (я так понимаю он не хотел использовать Key Lookup)). Лишь после того как я добавил в регистр значительное число записей (100 не помогло) - наконец то стал использоваться индекс по регистратору и все встало на свои места - Получил взаимоблокировку на уровне СУБД. Алилуя :)

Тут все оказалось гораздо проще) На момент записи установились Х блокировки на 1С и на СУБД, а далее при попытке чтения измерений 1С блокировки не установила, но они попытались установиться на СУБД и в результате deadlock.

1С не установила блокировку потому что, пропускает чтение запросом. При методе регистра сведений СрезПоследних() (видать в основе тоже скрыт запрос) управляемые блокировки тоже не ставятся. Вот как я это разобрал)

Alexander

  • Пользователь
  • **
  • Сообщений: 23
  • ФИО: Kulikov Alexander
Цитировать
Тут все оказалось гораздо проще) На момент записи установились Х блокировки на 1С и на СУБД, а далее при попытке чтения измерений 1С блокировки не установила, но они попытались установиться на СУБД и в результате deadlock.

Это справедливо при более-менее приличном количестве записей в РС. При небольшом же количестве -
параллельная запись не проходит.  (По крайней мере, в MS SQL 2012).