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

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

Droni

  • Модератор
  • Пользователь
  • *****
  • Сообщений: 97
10.1  - 2
10.2  - 2
10.3  - 1 (Взаимоблокировка - это неразрешимый конфликт блокировок, возникающий при работе двух или более сессий 1С:Предприятия. http://kb.1c.ru/articleView.jsp?id=46)
10.4  - 3 (http://kb.1c.ru/articleView.jsp?id=46#case1)
10.5 - 2
10.6 - 2
10.7 - 5
10.8 - 4 (Если не удалось получить полную блокировку, в этот момент укрупнение блокировки не происходит и компонент Database Engine продолжит получать блокировки строк, ключей или страниц. https://msdn.microsoft.com/ru-ru/library/ms184286(v=sql.105).aspx)
10.9  - 1
10.10 - 2 (Проверил, в режиме совместимости с 8.2 получаем сообщенние об ошибке. без режима совместимости (работает не RC а RCSI) взаимоблокировки нет.
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ.Документ1.МодульОбъекта(29)}: Ошибка при вызове метода контекста (Выполнить)
   Выборка = Запрос.Выполнить().Выбрать();            
по причине:
Ошибка выполнения запроса
по причине:
Конфликт блокировок при выполнении транзакции:
Microsoft SQL Server Native Client 11.0: Транзакция (идентификатор процесса 62) вызвала взаимоблокировку ресурсов блокировка с другим процессом и стала жертвой взаимоблокировки. Запустите транзакцию повторно.
HRESULT=80004005, SQLSrvr: SQLSTATE=40001, state=33, Severity=D, native=1205, line=1
)

10.11 - 1
10.12 - ?3,4
10.13 - 3
10.14 - 2
10.15 - 1
10.16 - 4
10.17 - 2
10.18 - 3 (ЦУП, может, профайлер сам по себе даст только логи без контекстов вызова, ТЖ не фиксирует информацию о блокировках СУБД, можно будет только собрать запросы к СУБД - так что реально разобраться  можно только с помощью ЦУПа)
10.19 - 3
10.20 - ?(Вопрос по взаимоблокировке СУБД, из ответов подходит только 2 по управляемой взаимоблокировке ...)
« Последнее редактирование: Май 11, 2015, 09:29:52 pm от Droni »

st1llman

  • Пользователь
  • **
  • Сообщений: 26
  • ФИО: Дмитрий
10.3 - 1, проверено на edu

Droni

  • Модератор
  • Пользователь
  • *****
  • Сообщений: 97
10.3 - 1, проверено на edu
Спасибо.
На edu отвечаете 100% или как проверяете правильность?

st1llman

  • Пользователь
  • **
  • Сообщений: 26
  • ФИО: Дмитрий
10.3 - 1, проверено на edu
Спасибо.
На edu отвечаете 100% или как проверяете правильность?

1 или 2 раза ответил со 100% результатом, ответы пометил как точно правильные. На следующей неделе планирую сдавать  :)

Platon1C

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

Droni

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

Platon1C

  • Пользователь
  • **
  • Сообщений: 31
  • ФИО: Андрей
10.1 - 3. "Настольная книга 1С Эксперта", стр. 57. С таким взаимоблокировками нужно бороться одинаковыми порядками захвата ресурсов. Snapshot'ы вызовут другие проблемы (неповторяемое чтение, отрицательные остатки). Использование Snapshot'ов - тонкая тема
Не смущает, что большинство типовых уже работают  в режиме - без совместимости, т.е. используется RCSI?
А это к вопросу не относится. Переход на RCSI решает, грубо говоря, 80% проблем, но рождает 20%, что приемлемо. А мы говорим о конкретной задаче, для которой есть рекомендация 1С и решение, которое устранит одну критичную проблему и, может быть, даст проблему для другого (третьего) документа, где другой порядок захвата. А может и не даст... А может и в третьем документе порядок поменять?
« Последнее редактирование: Май 11, 2015, 05:27:27 pm от Platon1C »

Platon1C

  • Пользователь
  • **
  • Сообщений: 31
  • ФИО: Андрей

tivanitsky

  • Пользователь
  • **
  • Сообщений: 28
10.19-3

Поддерживаю. Тлоки после тдедлока идут тем же временем и сразу следом. Проверял несколько раз.

Platon1C

  • Пользователь
  • **
  • Сообщений: 31
  • ФИО: Андрей

Zheka

  • Пользователь
  • **
  • Сообщений: 13
С учебного тестирования
10.1 - 3
10.12 - 3
10.18 - 5
10.20 - 2

Нуралиев

  • Пользователь
  • **
  • Сообщений: 66
  • я красавчиг
  • ФИО: Нуралиев
С учебного тестирования
а где его можно пройти, дайте ссылку

Droni

  • Модератор
  • Пользователь
  • *****
  • Сообщений: 97
С учебного тестирования
а где его можно пройти, дайте ссылку
http://edu.1c.ru/dist-training/

Нуралиев

  • Пользователь
  • **
  • Сообщений: 66
  • я красавчиг
  • ФИО: Нуралиев
правильно я понимаю что взаимоблокировка с повышением уровня блокировки может возникнуть только на управляемых блокировках, на блокировках СУБД не может? 10.4
т.к. в СУБД S блокировка снимается сразу после чтения (при уровне изоляции рид коммитед) и если мы повысев уровень изоляции она не будет мешать же т.к. уже снимется

Alexander

  • Пользователь
  • **
  • Сообщений: 23
  • ФИО: Kulikov Alexander
Непонятно с 10.10 - мне не удалось воспроизвести взаимоблокировку (по крайней мере в режиме совместимости с 8.2.16). Кроме того ответ 2 смущает тем что блокировка управляемая (то есть накладывается сервером 1с), а не СУБД.
Более того
- в 8.3 в режиме совместимости 8.2.16 (запись не проиcходит пока не закончится транзакция в первом)
- в 8.2 ожидание возникает на чтении среза.
либо я что то делаю не так либо ... .

РС Измерение: Товар Ресурс: Цена
Проведение - не оперативное

Первым провожу документ с более поздней датой (на пару минут)  - цена=100
Во втором документе цена=101

По ходу проведения выводятся сообщения ...

Первый сеанс
запишем 16.07.2015 11:18:26 (сообщение перед строкой кода: Движения.РС_Тест5.Записать();)
записали 16.07.2015 11:18:26 (после ....)
прочитаем 16.07.2015 11:18:26 (перед:  РегистрыСведений.РС_Тест5.ПолучитьПоследнее)
...
висим в отладчике примерно 10сек ... на строке - РегистрыСведений.РС_Тест5.ПолучитьПоследнее
...
прочитали 100 16.07.2015 11:18:37  (100 - это цена)

Второй сеанс выводит следующие сообщения
запишем 16.07.2015 11:18:31
записали 16.07.2015 11:18:31
прочитаем 16.07.2015 11:18:31
прочитали 100 16.07.2015 11:18:37   (100 - это цена)
« Последнее редактирование: Июль 16, 2015, 01:30:14 pm от Alexander »

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).

Самый клевый куфср по подготовке к аттестации по платформе 1С:Предприятие 8