Имя: Пароль:
1C
1С v8
Как можно узнать, какая таблица блокируется?
,
0 мистер игрек
 
27.12.12
12:10
8.2. Конфа самописная.
Есть документ, который двигает регистр бухгалтерии и несколько регистров  по ТМЦ. Он проводится минут 15.
Но за этот момент бухгалтер по банку хочет провести документ платежное поручение входящее. Но выходить ошибка "Конфликт блокировок при выполнении транзакции."
По логике. Эти два документа работают только с одним общим регистром, регистром бухгалтерии.
Получается блокируется регистр бухгалтерии.
Но все таки хочется узнать, какие именно таблицы блокируются, может кроме этого есть другие объекты.
1 Maxus43
 
27.12.12
12:11
платёжки ТМЦ не двигают никак, другие блокировки есть конечно, но они не пересекаются наверняка
2 Maxus43
 
27.12.12
12:14
файл, скуль иль чего? нетх журнла можно настроить, на скуле скульными средствами можно посмотреть и т.д.
3 мистер игрек
 
27.12.12
12:14
Вот полная ошибка:

{ОбщийМодуль.ПроцедурыИФункцииКонтроляДвиженийТоваров.Модуль(1192)}: Ошибка при вызове метода контекста (Прочитать)
       Движ.Прочитать();
по причине:
Конфликт блокировок при выполнении транзакции:
Microsoft OLE DB Provider for SQL Server: Lock request time out period exceeded.
HRESULT=80040E31, SQLSrvr: SQLSTATE=HYT00, state=38, Severity=10, native=1222, line=1
4 Maxus43
 
27.12.12
12:15
*тех журнал
5 мистер игрек
 
27.12.12
12:15
(2) Какого из них советуешь?
6 cw014
 
27.12.12
12:16
Движ - это что?
7 мистер игрек
 
27.12.12
12:17
(6) Движения документа
8 Maxus43
 
27.12.12
12:18
(7) это в подписке?
9 cw014
 
27.12.12
12:18
(7) К.О. в 1С... Какие движения?
10 Maxus43
 
27.12.12
12:20
(5) по скулю например это, счетчик sp_lock
http://www.sql.ru/forum/actualthread.aspx?tid=617915
11 cw014
 
27.12.12
12:23
Я смотрю, мои вопросы игнорят. Ок, тогда ответ на вопрос "Как можно узнать, какая таблица блокируется?" будет "Телепатией"
12 мистер игрек
 
27.12.12
12:23
(8) В общем модуле, а этот модуль из подписки
13 мистер игрек
 
27.12.12
12:24
(9) Контроль остатков?
14 Maxus43
 
27.12.12
12:25
(12) в типовых юзают наборы записей в подписках, а не обращаются к "Движения", привести к нормальному коду сначала, потом блокировки искать имхо
15 мистер игрек
 
27.12.12
12:25
вот часть модуля:

   Для Каждого Движ Из Объект.Движения Цикл
       Движ.Прочитать();
       
       Если Движ.Количество() > 0 Тогда
           СтрокаДвижение = СтрЗаменить(Строка(Движ), "НаборЗаписей","");
           ПоложениеТочки = Найти(СтрокаДвижение,".");
           ТипРегистра = Лев(СтрокаДвижение, ПоложениеТочки-1);
           ИмяРегистра = Сред(СтрокаДвижение, ПоложениеТочки+1, 100);
           ПолноеИмяРегистра = ТипРегистра + "_" + ИмяРегистра;
           
           ПредставлениеРегистра = Движ.Метаданные().Синоним;
           СписокДвижений.Добавить(ПолноеИмяРегистра, ПредставлениеРегистра);    
       КонецЕсли;
       
   КонецЦикла;
16 cw014
 
27.12.12
12:25
Это такой регистр?
17 cw014
 
27.12.12
12:26
(15)
1) Отладчиком, остановка по ошибке, ждем глюк
2) Заменяем:
   Для Каждого Движ Из Объект.Движения Цикл
       Движ.Прочитать();
На
   Для Каждого Движ Из Объект.Движения Цикл
       Сообщить(ТипЗнч(Движ));
       Движ.Прочитать();
И ждем на какой строке свалится
18 tdm
 
27.12.12
12:26
есть ЦУП(центр управления производительностью), специально для этих целей
19 мистер игрек
 
27.12.12
12:27
(18) Сколько стоить? Где купить?
20 cw014
 
27.12.12
12:27
(19) Продам недорого, 200$
21 Maxus43
 
27.12.12
12:28
>>"специально для этих целей"
чо? он для организации нагрузочного тестирования и т.д. никак не для "Как можно узнать, какая таблица блокируется".
Это как забивать гвоздь 200 тонным прессом промышленным
22 МихаилМ
 
27.12.12
12:29
(19)
~80 т.р.

у франчайзи
23 cw014
 
27.12.12
12:29
(22) 80 тыр дорого, я всего за 200$ продаю :)
24 мистер игрек
 
27.12.12
12:30
(22) Йопт!
25 tdm
 
27.12.12
12:31
(21) какое нагрузочное тестирование ???
запускаете паралельно минут максмимум на 30 трасировку с анализом, дальше смотрите запросы которые блокируются, скульные таблицы)
26 МихаилМ
 
27.12.12
12:32
(23)
200$
мне продадите ?
он NFR для партнеров 9 т.р.  стоит.
27 tdm
 
27.12.12
12:32
(22) жесть...
28 Maxus43
 
27.12.12
12:32
(25) я говорю что ЦУП - не для такой мелкой задачи, и покупать его для саьжа - бред)
29 Maxus43
 
27.12.12
12:33
(27) ловите пирата) если он не знает сколько стоит и юбзает его для таких задачь - стопудово скомуниздил :)
30 cw014
 
27.12.12
12:34
Вот подсказал же в (17) решение, почему проигнорировал ТС?
31 tdm
 
27.12.12
12:34
(28) ну это интсрумент, кому-то он без надобности а кому-то и пригодится ;)
(29) я во франче работаю) не продажник - цены в последнюю очередь интересуют, не поверите
32 Maxus43
 
27.12.12
12:37
(30) так мы узнаем что не может прочитать, но не узнаем какие таблицы заблокированы (и какие записи, раз таки SQL)
33 мистер игрек
 
27.12.12
12:37
(30) Я уже это понял.
34 cw014
 
27.12.12
12:38
(32) А, ну то есть если мы таблицу прочитать не можем, это не факт что она заблокирована? Если конечно только база не битая
35 мистер игрек
 
27.12.12
12:38
(30) Я еще ловил такую же блокировку, но в этом сообщении не указывается место дислокации ошибки.
Тогда как быть?
36 Maxus43
 
27.12.12
12:39
(34) не, так мы узнаем где споткнулись, но не узнаем споткнёмся ли на таблицах которые дальше есть. Узнаем только первую мешающую блокировку
37 cw014
 
27.12.12
12:41
(34) Ну если так судить, можно опять же:
а) устранить эту блокировку и отслеживать дальше
б) поместить конструкцию Движ.Прочитать();
в
Попытка
Движ.Прочитать();
Исключение
ОбщегоНазначения.СообщитьОбОшибке("Неудачная попытка чтения таблицы " + ТипЗнч(Движ));
Продолжить;
КонецПопытки;
38 мистер игрек
 
27.12.12
12:44
(37) Задача состоить в том, чтоб решать проблему с блокировкой. Походу избыточная блокировка на лицо.
А вообще-то можно ли блокировать регистры бухгалтерии (как движение документа) в разрезе субконто управляемым способом?
39 cw014
 
27.12.12
12:45
(38) Не встречал
40 Maxus43
 
27.12.12
12:48
(38) блокируется по записям таблицы, т.е. запись + соседние записи
41 мистер игрек
 
27.12.12
12:54
(40) У тебя есть пример? Поделись плиз
42 rs_trade
 
27.12.12
12:59
SELECT  resource_type,
   (CASE WHEN resource_type = 'OBJECT' THEN object_name(resource_associated_entity_id)
   WHEN resource_type IN ('DATABASE', 'FILE', 'METADATA') THEN 'N/A'      
   WHEN resource_type IN ('KEY', 'PAGE', 'RID') THEN (SELECT object_name(object_id) FROM sys.partitions WHERE hobt_id=resource_associated_entity_id) ELSE 'Undefined' END) AS requested_object_name,
   request_mode AS lock_type,
   request_status,
   request_owner_id AS transaction_id
FROM sys.dm_tran_locks
WHERE resource_database_id = DB_ID() AND resource_type <> 'DATABASE'
AND request_mode NOT IN('IX', 'SIX', 'Sch-S')
ORDER BY requested_object_name, resource_type;

просмотр блокировок. если надо такое.
43 мистер игрек
 
27.12.12
13:00
(42) Это проверяется в QA?
44 rs_trade
 
27.12.12
13:03
(43) Этот скрипт запускается в MS SMS для нужной базы. Есть еще обработка Гилева. Не знаю правда как она для 8.2 работает.
https://dl.dropbox.com/u/20471596/Lock1C.epf
45 milan
 
27.12.12
13:09
к гилеву на бесплатный сервис мониторинга уже предлагали обратиться ?
46 мистер игрек
 
27.12.12
13:40
Уточнил. Как предполагал, блокируются регистры бухгалтерии.
А так есть возможность блокировать регистр бухгалтерии по счету или по субконто?
47 ДенисЧ
 
27.12.12
13:42
(46) да
48 Maxus43
 
27.12.12
13:44
есть опасность эскалации блокировок, ибо скуль сам решает когда пора, зависит от заблокированного диапазона и настроек
49 мистер игрек
 
27.12.12
13:45
(47) Приме скинешь?
50 krbIso
 
27.12.12
13:51
режим разделения итогов включи у регистра бухгалтерии если контроля остатков нет
51 мистер игрек
 
27.12.12
13:56
(50) Включен
52 krbIso
 
27.12.12
14:08
(51) контроль остатков по регистру бух. есть? если есть то перенеси его к концу транзакции. Или откажись от оперативной записи движений в рег. бух.
53 мистер игрек
 
27.12.12
14:13
(52) Ок.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс