Имя: Пароль:
1C
1С v8
очень частые блокировки транзакций
0 mnail1979
 
14.04.12
08:30
Здравствуйте, уважаемые профессионалы.

1С 8.1 УПП. Одновременных пользователей 15. Очень часто выходят взаимоблокировки транзакций. ЦУП у меня нет. Как понять и исправить эту проблему?
1 DrShad
 
14.04.12
08:33
какая таблица блокируется?
2 Klesk
 
14.04.12
08:36
файловая или какая?
3 mnail1979
 
14.04.12
08:39
(2) клиент сервер. SQL server 2008 R2
4 mnail1979
 
14.04.12
08:41
(1) а как понять какая блокируется
5 mnail1979
 
14.04.12
08:44
Ошибка при вызове метода контекста (Выполнить). Ошибка выполнения запроса "конфликт блокировок при выполнении транзакции:
Microsoft OLE DB Provider for SQL Server. Транзакция (идентификатор процесса 62) вызвала взаимоблокировку ресурсов блокировка с другим процессом и стала жертвой взаимоблокировки. Запустите транзакцию повторно.

Это при проведении документа реализации.
6 МихаилМ
 
14.04.12
08:50
настройте тех.журнал  на сбор информации по блокировкам
7 Один С
 
14.04.12
09:00
15 пользователей и частые блокировки... много думал...
8 mnail1979
 
14.04.12
09:04
(6) а как это. Я новичок в этом деле. Подскажете?
9 Живой Ископаемый
 
14.04.12
09:05
(6) в 8.1 уже был ТЖ?
10 МихаилМ
 
14.04.12
09:09
(9)

да. был.
11 mnail1979
 
14.04.12
09:18
можете по шагам расписать, что мне нужно делать. Я читал разные статьи, где советовали переходить с автоматического режима на управляемый и автоматический и т.д. Но по шагам было бы лучше.
12 МихаилМ
 
14.04.12
09:25
(11)
пришло время почитать руководство администратора 1с.
а еще лучше руководство разработчика и администратора ms sql.

сдаётся мне: Вы не владеете базовой терминологией,
так что пошаговая инструкция Вам не положена.
13 mnail1979
 
14.04.12
09:35
:(
14 mnail1979
 
14.04.12
09:36
я работал на оракле. С MS SQL я новичок
15 mnail1979
 
14.04.12
09:39
ТЖ мне поможет, или нужен еще обязательно ЦУП?
16 МихаилМ
 
14.04.12
10:15
тж поможет . цуп использует тж.
после мониторинга не забудте отключить логирование тж.
17 mnail1979
 
14.04.12
11:53
прочитал статью http://1cexpo.ru/metodiki/31-analiz-i-ustranenie-vzaimoblokirovok.html#case1

На одном из запросов решил попробовать параметр ДЛЯ ИЗМЕНЕНИЯ.
Скажите, плиз, есть ли у него недостатки. Или его можно лепить где попало.
18 Aleksey
 
14.04.12
12:04
(7) А что думать. У меня блокировки на равном месте иной раз выскакивают. Т.е. сижу в базе один (типовая БП), никого нет. Запустил проведения - и бац, не могу провести ... блокировка.

Так что подпишусь на тему, сам хотел создать, да всё руки не доходят.
19 Kraft
 
14.04.12
12:20
не в тему, но отпишу тут. В последнее время (после перехода на 8.2.15) стали происходить интересные глюки с блокировками. При попытке что-то сделать, например провести документ, ругается, что объект уже открыт и изменяется другим пользователем с таким-то номером сеанса. Так вот дело в том, что такого сеанса уже давно нет, и пользователь (на которого ссылается система) новых сеансов не открывал. Рестарт сервера 1с не помогает (!!!). Ситуацию спасает лишь рестарт ms sql. Такая ситуация проявлялась уже 2 раза за 2 месяца.
20 Aleksey
 
14.04.12
12:24
(19) Во-во, до 8.2.15 тоже небыло блокировок в чистом поле. Т.е. запускаешь на ночь перепроводку и к утру готовый результат. Сейчас - нет гарантии
21 Wern
 
14.04.12
12:24
(17) Прочитал что при зубной боли помогает шалфей и решил все болезни лечить им? Проблему надо решать, а не лепить что попало и где попало.
22 Wern
 
14.04.12
12:26
(20) фоновые задания смотрите, только они могут создать блокировку на одном пользователе.
23 демотиватор
 
14.04.12
12:28
(0)что делают эти пользователи?
24 Aleksey
 
14.04.12
12:34
(22) Обычно фоновые в ЖР пишутся. А так из фоновых только Регламентное задание. Обновление индекса полнотекстового поиска
25 Один С
 
14.04.12
16:22
ну дык запретите регламенты на сервере, да посмотрите что получится..
26 aspirator23
 
14.04.12
17:34
Расскажи о своем sql сервере. Как он устроен?
27 mnail1979
 
14.04.12
18:42
(26) Железо?
28 Гот
 
14.04.12
19:07
(27) Кальций.
В модуле документа реализации Через строку вставь Сообщить("Дошел до строки " + НомерСтроки);
При проведении все, что после нужной строки - удали. Обнови конфигурацию - не будет блокировок. Гарантирую.
29 Гот
 
14.04.12
19:08
Номер строки - в смысле номер строки текста модуля.
30 mnail1979
 
14.04.12
21:28
(29) как можно просто удалить. Раз написано - значит нужно...
31 mnail1979
 
16.04.12
16:11
вот скриншот: http://s019.radikal.ru/i644/1204/cd/dc49acf3e2f4.jpg

Подскажите, как решить взаимоблокировку
32 Aleksey
 
16.04.12
16:19
УРИБ нет? А то у меня оказалось куча почек (остатки былой роскоши) с еще большей кучей зарегестророванных изменений в не (по 3-4 ляма в каждой почки). И из-за этого выскакивали блокировки
33 mnail1979
 
16.04.12
16:30
(32) не понял
34 Зеленый Кот
 
16.04.12
16:39
>> куча почек?
надолго задумался...
35 Stepa86
 
16.04.12
16:49
(31) а давно в УПП есть документ ЗакрытиеРейса?
36 mnail1979
 
16.04.12
16:50
(35) это УПП с большими дописками
37 Stepa86
 
16.04.12
16:51
(36) вот эти дописки и делают дедлоки, обращайся к авторам
38 mnail1979
 
16.04.12
16:53
К сожалению к авторам обратиться не могу. Сам потихоньку им становлюсь. Поэтому нужно разобраться самому
39 Aleksey
 
16.04.12
16:55
(33) Что такое УРИБ и План обменов не знаешь? Или что не понятно?
40 Aleksey
 
16.04.12
16:55
(34) А как их назвать?
41 mnail1979
 
16.04.12
16:56
В документе есть запрос, который читает данные с регистранакопления.

Был такой запрос:

Запрос = Новый Запрос;
       Запрос.Текст =
       "ВЫБРАТЬ РАЗРЕШЕННЫЕ
       |    ТоварыНаСкладахОстатки.Номенклатура,
       |    ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
       |    ТоварыНаСкладахОстатки.СерияНоменклатуры,
       |    СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток
       |ИЗ
       |    РегистрНакопления.ТоварыНаСкладах.Остатки(&МоментВремени, Склад = &СкладМашина) КАК ТоварыНаСкладахОстатки
       |
       |СГРУППИРОВАТЬ ПО
       |    ТоварыНаСкладахОстатки.Номенклатура,
       |    ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
       |    ТоварыНаСкладахОстатки.СерияНоменклатуры";
       Запрос.УстановитьПараметр("СкладМашина",СкладОтправитель);
       Запрос.УстановитьПараметр("МоментВремени",МоментВремени());
       Возврат Запрос.Выполнить().Выбрать();
42 Aleksey
 
16.04.12
16:57
(37) Конечно тебе же с места виднее, вот так сразу глянул на кофейную гущу и сразу видно - что дописывал олень, он виноват. И главное так авторитетно и безапелляционно заявлешь об этом, как будто код видел
43 mnail1979
 
16.04.12
16:57
возможно (точно не могу утверждать) после того, как я его изменил, это все и началось.
Вот измененный вариант:

       Запрос = Новый Запрос;
       Запрос.Текст =
       "ВЫБРАТЬ РАЗРЕШЕННЫЕ
       |    ТоварыНаСкладах.Номенклатура,
       |    ТоварыНаСкладах.ХарактеристикаНоменклатуры,
       |    ТоварыНаСкладах.СерияНоменклатуры,
       |    СУММА(
       |        ВЫБОР
       |            КОГДА ТоварыНаСкладах.ВидДвижения=ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) ТОГДА ТоварыНаСкладах.Количество
       |            ИНАЧЕ (-1)*ТоварыНаСкладах.Количество
       |        КОНЕЦ    
       |    ) КАК КоличествоОстаток
       |ИЗ
       |    РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
       |ГДЕ
       |    ТоварыНаСкладах.Регистратор.Рейс = &Рейс
       |    И ТоварыНаСкладах.Склад = &СкладМашина
       |СГРУППИРОВАТЬ ПО
       |    ТоварыНаСкладах.Номенклатура,
       |    ТоварыНаСкладах.ХарактеристикаНоменклатуры,
       |    ТоварыНаСкладах.СерияНоменклатуры
       |ИМЕЮЩИЕ
       |СУММА(
       |        ВЫБОР
       |            КОГДА ТоварыНаСкладах.ВидДвижения=ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) ТОГДА ТоварыНаСкладах.Количество
       |            ИНАЧЕ (-1)*ТоварыНаСкладах.Количество
       |        КОНЕЦ    
       |    )<>0
       | ";
       Запрос.УстановитьПараметр("СкладМашина",СкладОтправитель);
       Запрос.УстановитьПараметр("Рейс",Рейс);
       Возврат Запрос.Выполнить().Выбрать();
44 Stepa86
 
16.04.12
17:26
(42) а разве из (31) не очевидно? и чот я сомневаюсь, что типовая чистая УПП в дедлоки падает при 15 пользователях
45 Aleksey
 
16.04.12
17:32
(44) Я могу тебе и в типовой БП с 3-мя пользователями дедлоки сделать. И что?
46 Stepa86
 
16.04.12
17:33
(43) попробуй поле Рейс проиндексировать у регистратора... хотя так то херого, что обращаешся к реальной таблице
(45) и скриншот при этом от ЦУПа покажешь, где дедлок на доработку завязан?
47 mnail1979
 
16.04.12
21:03
(46) может я запрос не правильно написал. Как видите, раньше все было через товарынаскладах.остатки, а я переделал на просто новарынаскладах, чтобы выйти на рейс через регистратор. Может надо как то по другому. Я новичок в 1С. Можно ли как то используя ВТ остатки выйти в данном случае на рейс, или добавить в этот регистр еще один реквизит "рейс"
48 mnail1979
 
16.04.12
21:15
прикол в следующем. Кто то другой проводит документ реализация. В это момент запускается запрос другим пользователем, который я указал выше. И получается взаимоблокировка, так как почему то мой запрос через регистр выходит тоже на документ реализации. Вот и думаю, если все же сделать запрос через ВТ остатки, путь запроса будет таким же или нет.
49 МихаилМ
 
16.04.12
21:15
в 43 такой запрос в модуле проведения
в 8.1 заблокирует всю таблицу движений.

тк уровень изоляции - serializeble
50 mnail1979
 
16.04.12
22:16
(49)вот вот. Поэтому думаю вернуться на остатки, но при этом добавив в регистр новый реквизит "рейс"
51 mnail1979
 
16.04.12
22:31
(50) точнее новое измерение