|
Блокировка данных регистра при проведении | ☑ | ||
---|---|---|---|---|
0
Alex_MA
20.05.14
✎
09:13
|
Здравствуйте!
Создал простую конфигурацию для тестирования блокировки: Документ "Приходная" (Движения - не удалять автоматически) "Организация" "Склад" Таб.часть "Товары" "Номенклатура" "Количество" "Цена" "Сумма" РегистрНакопления "ТоварыНаСкладах": Измерения: "Организация", "Склад" Ресурсы: "Количество", "Сумма" В обработке проведения: Если мУдалятьДвижения Тогда //Движения.ДанныеЗакупок.Очистить(); //Движения.ТоварыНаСкладах.Очистить(); Набор = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей(); Набор.Отбор.Регистратор.Установить(Ссылка); Набор.Записать(); КонецЕсли; ДвижениеТоварыНаСкладах = Движения.ТоварыНаСкладах; // ТУТ СТАВЛЮ ТОЧКУ ОСТАНОВА Для Каждого ТекСтр Из Товары Цикл СтрокаДвижения = ДвижениеТоварыНаСкладах.Добавить(); СтрокаДвижения.Период = Дата; СтрокаДвижения.Организация = Организация; СтрокаДвижения.Склад = Склад; ЗаполнитьЗначенияСвойств(СтрокаДвижения, ТекСтр); КонецЦикла; В другом сеансе запускаю обработку на чтение в транзакции данных из этого регистра, указываю склад отличный от склада в документе "Приходная": НачатьТранзакцию(); Запрос = Новый Запрос("ВЫБРАТЬ | ТоварыНаСкладах.Период, | ТоварыНаСкладах.Регистратор, | ТоварыНаСкладах.НомерСтроки, | ТоварыНаСкладах.Активность, | ТоварыНаСкладах.ВидДвижения, | ТоварыНаСкладах.Склад, | ТоварыНаСкладах.Организация, | ТоварыНаСкладах.Номенклатура, | ТоварыНаСкладах.Количество, | ТоварыНаСкладах.Сумма |ИЗ | РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах |ГДЕ | ТоварыНаСкладах.Склад = &Склад"); Запрос.УстановитьПараметр("Склад", Склад); ТЗ = Запрос.Выполнить().Выгрузить(); Для Каждого ТекСтр Из ТЗ Цикл Сообщить(ТекСтр.Склад); КонецЦикла; ЗафиксироватьТранзакцию(); В результате обработка чтения в транзакции при выполнении запроса встает на ожидание! Почему ??? Большое спасибо за внимание. |
|||
1
neckto
20.05.14
✎
09:15
|
Не озвучен режим работы конфы и Режим управления блокировками.
|
|||
2
Alex_MA
20.05.14
✎
09:17
|
(1)Управляемый
|
|||
3
vmv
20.05.14
✎
09:28
|
Набор.ОбменДанными.Загрузка = Истина;
Набор.Записать(); так заюзай и не парь репу |
|||
4
vi0
20.05.14
✎
10:39
|
(2) управляемый в конфигурации?
что тех.журнал говорит? |
|||
5
Ненавижу 1С
гуру
20.05.14
✎
10:41
|
если файловая, то так и должно быть
|
|||
6
Alex_MA
20.05.14
✎
11:29
|
(5)клиент-сервер
MS SQL 2005 Standart |
|||
7
Alex_MA
20.05.14
✎
11:29
|
(3)я хочу понять причину такой блокировки
|
|||
8
vi0
20.05.14
✎
11:39
|
может быть что угодно, вплоть до эскалации
нам не видно твоих данных и т.д. анализируй инструментами |
|||
9
Ненавижу 1С
гуру
20.05.14
✎
11:53
|
еще, если записей с таким набором измерений еще не было, то блокируется вся таблица
|
|||
10
vi0
20.05.14
✎
11:58
|
(9) это почему?
|
|||
11
hhhh
20.05.14
✎
12:04
|
(7) однако, причем тут склад "Приходная"?
|
|||
12
Stepa86
20.05.14
✎
12:14
|
Попробуй склад проиндексировать
|
|||
13
erp20
20.05.14
✎
12:36
|
(8) Поздравлять с сертификатом?
|
|||
14
Ненавижу 1С
гуру
20.05.14
✎
12:51
|
(10) ну откуда же я знаю, но ты проверь, сделай новые и не новые
|
|||
15
hhhh
20.05.14
✎
12:56
|
(12) однако, причем склад, если он ставит точку останова раньше? Когда про склад еще неизвестно.
|
|||
16
Stepa86
20.05.14
✎
12:57
|
(15) у меня есть подозрение, что запрос делает скан по всем строкам для отбора и натыкается на заблокированные
|
|||
17
Alex_MA
20.05.14
✎
13:21
|
(8)эскалации точно нет
|
|||
18
Alex_MA
20.05.14
✎
13:31
|
(16)действительно
SELECT T1._Period, T1._RecorderRRef, T1._LineNo, T1._Active, T1._RecordKind, T1._Fld176RRef, T1._Fld177RRef, T1._Fld178RRef, T1._Fld179, T1._Fld180 FROM _AccumRg175 T1 WITH(NOLOCK) WHERE (T1._Fld176RRef = P1) И операция по плану запроса IndexScan!! Интересно почему идет сканирование. |
|||
19
МихаилМ
20.05.14
✎
13:32
|
(18)
отсутствует подходящий индекс по Fld176RRef |
|||
20
Stepa86
20.05.14
✎
13:34
|
(18) строк видимо мало в таблице
|
|||
21
Alex_MA
20.05.14
✎
13:36
|
(20)точно :))), разобрался
|
|||
22
Alex_MA
20.05.14
✎
13:38
|
(19) проиндексировал, но все равно индекс скан, т.к. строк в таблице мало SQL выбирает этот способ выборки данных, поэтому блокировки и происходят
|
|||
23
Alex_MA
20.05.14
✎
13:51
|
А еще оказывается платформа не строит индекс по первому измерению регистра накопления!!!
По регистру сведений строит, а по РН - НЕТ!!! |
|||
24
Stepa86
20.05.14
✎
13:58
|
||||
25
fisher
20.05.14
✎
13:59
|
(21) А говорил, что эскалаций нет
(23) Для таблиц итогов - строит |
|||
26
vi0
20.05.14
✎
14:06
|
(13) можно
|
|||
27
vi0
20.05.14
✎
14:08
|
(14) зачем что-то гововорить, если сам не знаешь
примерно также как в этой ветке: v8: Проверка остатков после проведения |
|||
28
vi0
20.05.14
✎
14:12
|
(25) это не эскалация
|
|||
29
Alex_MA
20.05.14
✎
14:45
|
Создал 1000 документов.
Склад = Основной с таблице товаров. Теперь пытаюсь прочитать данные в транзакции по Доп. складу - который не участвует в движениях - Все ОК, данные читаются! Пытаюсь получить данные в транзакции по Основному складу - ожидание на блокировке! СУБД же не дурак оказывается - если данных мало - то сканирование таблицы производить - это для него проще сделсть, чем index seek (Но на таких объемах блокировки отрабатывают не в соответствии с инструкциями 1С - происходит скан таблицы -> излишние блокировки). Создал 1000 документов - блокировки отрабатывают в соответствии с инструкцией 1С. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |