Блокировки на уровне записей (SQL сервер) 1C 8.0 #202198


#0 by lookas
Провожу такой эксперимент: 14 й релиз 8 ки, SQL версия. Сделал пустую конфу, в ней один регистр накопления Товары на складе с измерением товар. В расходной накладной при проведении делаю запрос к остаткам по товарам в документе, в конце проведения делаю бесконечный цикл. Запускаю второй сеанс. По идее, у меня должно получиться оприходовать товар, которого нет в проводимой расходке, ан нет, кофликт блокировок. Объясните, плиз, что я делаю не так, ибо такое ощущение, что блокировки не на уровне записей. Ничего другого, что могло бы блокировать (последовательности и т. д.) нет.
#1 by ТелепатБот
#2 by Мелкий бес
файловый вариант - блокировка таблиц клиент-серверный вариант - блокировка записей (для непустых таблиц)
#3 by lookas
Каких записей?
#4 by Дяпти
В транзакции для регистров блокируется диапазон индекса, или таблица, если индекса не нашлось.
#5 by lookas
Так, т. е. нужно, чтобы по измерению был индекс?
#6 by France
вопрос на засыпку - если добавляются новые записи, есть ли индекс в базе?.. PS это что же получается, граждане!! при проведении нового документа безусловно блокируется вся таблица?... моему возмущению нет предела.. беру плакаты и иду на селезневскую 21
#7 by Дяпти
Покажи как остатки выгребаешь. "в конце проведения делаю бесконечный цикл", гыгы, фантазия просто супер... Юзай Предупреждение.
#8 by Дяпти
и не надейся не засыплюсь :-)
#9 by France
а если по сути? при создании новых блокируется таблица. Правильно?
#10 by Дяпти
только если таблица абсолютно пустая. И ваще какую ты видишь связь между наличием или отсутствием индекса в таблице и добавлением новых строк в таблицу?
#11 by lookas
Индекс по измерению не помог. Запрос к остаткам: ВЫБРАТЬ
#12 by France
твои слова? "В транзакции для регистров блокируется диапазон индекса, или таблица, если индекса не нашлось." так вот, добавляю новые записи в регистр сведений. Индекса SQL пока нету, потому что пока нету записей. Что будет блокироватся?..
#13 by Дяпти
"Индекса SQL пока нету" - ты это серьезно?
#14 by Дяпти
Надо индексировать измерение Номенклатура. Надо, чтобы измерение Номенклатура в регистре шло первым по порядку.
#15 by МуМу
Прикольная ветка. Надо будет записать :)
#16 by Дяпти
ух ты кто нарисовался
#17 by Дяпти
дарова МуМу!
#18 by МуМу
Дарова.
#19 by ERWINS
Можно вопрос? а с чего вы взяли что регистр накопления не блокируется полностью самой 1с... Представте себе что если во время получения результатов кто то будет менять остатки... в результате могут быть совсем не верные значения..... и матюкать за неправильную работу будут 1с
#20 by lookas
Оно индексированное, первое и единственное
#21 by ERWINS
И вообще какая разница сереру 1с есть ли индексы или их нет?
#22 by France
что то не в порядке в датском королевстве..  отбор по набору измерений... надо будет осмыслить... респект за наводку..
#23 by МуМу
Для того что бы понять что именно блокируется достаточно выполнить в SQL несколько достаточно тривиальных действий.Для постоянного контроля можно настроить набор трас. Все это узнать можно почитав немного BOL и ряд обсуждений на sql.ru Насчет бесконечного цикла это конечно супер.
#24 by lookas
Да какая разница чем не давать завершиться транзакции, что вы пристали к моему циклу :)
#25 by France
+22 надо будет посмотреть, что за индекс и из каких полей он состоит.. приходилось смотреть?
#26 by МуМу
То 25. Да, так бывало, посматривал:)
#27 by Дяпти
тогда надо глядеть на стороне SQL сервера (там можно глянуть, освобождения какого ресурса ждет какой либо процесс). Ньюансов тут может быть много. Вообще смущает что у тебя идет отбор не по единичной номенклатуре, а по вошедшей в подзапрос. Попробуй попроводить документ с одной строкой.
#28 by France
и что? немножко рассказать можно?..
#29 by lookas
с одной строкой провожу, щас сделаю условие в запросе Номенклатура = &Номенклатура, еще можно попробовать добавить предложение ДЛЯ ИЗМЕНЕНИЯ хотя врядли поможет, судя по документации это блокировка записей на чтение в транзакции
#30 by МуМу
То 28. Ну даже не знаю с чего начать:) Для 7-ки давным давно я написал краткую статейку в контексте блокировок , хотя сейчас конечно мое понимание механизма блокировок в SQL 2000,2005  совершенно на другом уровне. Вообщем расказывать основы лениво. Разберись сначала поиском что означают в sql команды типа sp_lock, select * from syslockinfo . Также прочитай о типах блокировок(особенно удели внимание хинтам). После этого имеет смысл обсуждать конкретные вопросы. А так о этом я мог бы расказывать бесконечно долго. Мое время дорого стоит да и лениво просто.
#31 by lookas
Не помогло :(
#32 by Neco
ИТС: "Особенности блокировок объектных и необъектных данных при использовании клиент-серверной версии 1С:Предприятия 8.0 Все хранимые сущности, поддерживаемые в модели разработки 1С:Предприятия 8.0, можно разделить на объектные и необъектные. Объектные сущности: Справочник Документ ... Необъектные сущности: ЖурналДокументов Регистр накопления ... 1С:Предприятие использует различный подход при блокировании объектных и необъектных сущностей. При работе с объектными сущностями 1С:Предприятие использует уровень изоляции REPEATABLE READ, поэтому при записи элемента справочника "Товары" блокируется только одна запись в таблице справочника. Любые соседние элементы справочника могут быть изменены другими пользователями. ... При работе с необъектными сущностями используется более высокий уровень изоляции транзакции - SERIALIZABLE. При работе с этим уровнем изоляции SQL сервер накладывает дополнительные блокировки на диапазон значений индекса. При этом накладывается блокировка как на саму запись индекса, так и на диапазон значений от текущего значения ключа до ближайшего следующего. Например, если в одной сессии 1С:Предприятия 8.0 провести документ "ЗаписьДвижений" с номером 2, то в других сеансах будет невозможно провести не только документ с номером 2, но и документы с номером 1 и 3,  пока не будет нажата кнопка "OK" в диалоге первой сессии и транзакция будет завершена. Это связано с тем, с что при записи движений документа "ЗаписьДвижений" с номером 2 в регистр накопления "ОстаткиТоваров", будут заблокированы движения двух соседних документов "ЗаписьДвижений" с номерами 1 и 3 в этом регистре. В тоже время, в других сеансах 1С:Предприятия 8.0 можно проводить документы с номерами 4 и 5. Аналогичное поведение будет наблюдаться и при удалении документов."
#33 by lookas
Все точно так, как написано в ИТС. Действительно две соседние крайние записи блокируются, а вот третья проводится без проблем!!! Спасибо большое! Тема закрыта.
#34 by lookas
+ Измерение должно быть индексированное
#35 by France
вообще то, я просил рассказать, что ты увидел в Profiler. С хинтами и со всем остальным я бы разобрался без дополнительных пояснений... Важно было именно то, что увидел в профайлере...ну да ладно..
#36 by Asmody
а ссылку на статью?
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С