Имя: Пароль:
1C
1C 7.7
v7: Помониторить блокировки СКЛ
,
0 monsterZE
 
23.10.12
15:55
написал вот такую шляпу =) в "Заблокирован" отображается тот, кто заблокировал? spid к имена 1с прикрутил.. можно что-нить полезное еще выводить?

ТекстЗапроса = "
   |select
   |   str(spid,4) as [СИД],
   |   left(nameb.name,10) as [База],
   |   left(lastwaittype,20) as [ЛастВайт],
   |   str(open_tran,4) as [Транзакции],
   |   left(status,25) as [Статус],
   |   left(cmd,25) as [Комманда],
   |   str(blocked,4) as [Заблокирован],
   |   str(max(waittime),15) as [Время] ,
   |   str(sum(cpu),15) as [ЦПУ]
   |from
   |   master..sysprocesses procs (nolock)
   |left join
   |    master.sys.databases nameb (nolock) on nameb.database_id=procs.dbid
   |where
   |    left(program_name,4) = '1CV7'
   |   and left(cmd,25) <> 'AWAITING COMMAND'
   |group by
   |  str(spid,4), left(nameb.name,10), left(lastwaittype,20), str(open_tran,4), left(status,25), left(cmd,25), str(blocked,4)
   |order by
   |  str(sum(cpu),15) desc";
   
   ТабЗапроса = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);    
   
   ТабСКЛ.Очистить();
   
   ККол = ТабЗапроса.КоличествоКолонок();
   Для ъ=1 По ККол Цикл
       Заголовок = "";
       ТабЗапроса.ПолучитьПараметрыКолонки(ъ,,,,Заголовок);
       ТабСКЛ.НоваяКолонка(Заголовок,,,,,15);
   КонецЦикла;
   
   КСтр = ТабЗапроса.КоличествоСтрок();
   Для с=1 По КСтр Цикл
       ТабСКЛ.НоваяСтрока();
       Для ъ=1 По ККол Цикл
           ТабСКЛ.УстановитьЗначение(с,ъ,ТабЗапроса.ПолучитьЗначение(с,ъ));
       КонецЦикла;
   КонецЦикла;
1 monsterZE
 
23.10.12
15:57
например, какой именно объект заблокирован..
2 monsterZE
 
23.10.12
16:00
кстати, периодически возникает ошибка о невозможности преобразования expression в int..
кто тут экспрешен? =)
3 monsterZE
 
23.10.12
16:05
ну и попутно бы хотелось кикать из этого монитора, как из монитора активности СКЛ
4 monsterZE
 
23.10.12
16:44
Убрал лишние преобразования..
Хорошо.. а есть описание столбцов для системных таблиц SQL?
т.е. например для syslockinfo
5 Fragster
 
гуру
23.10.12
16:45
(0) переходи на v8, там все в 2 таблицы не упирается
6 monsterZE
 
23.10.12
16:50
(5) в моем случае - пока ресурс 77 далеко не исчерпан =)
лавинообразные блокировки возникают очень редко, но все равно хочется выяснить почему..
т.е. те случаю, когда приходитя кикать одного, чтобы остальные продолжали работу..
7 monsterZE
 
23.10.12
17:19
по описаю таблиц все нашел. спс. =)
8 Злопчинский
 
23.10.12
22:00
(0) есть такая фирма "софтпоинт" - они могут много гитик
9 1Сергей
 
24.10.12
07:31
>> пока ресурс 77 далеко не исчерпан

+100500
10 Mikeware
 
24.10.12
07:32
(9) зато порой приходится извращаться :-)
11 dk
 
24.10.12
07:52
(0) а зачем это? не проще в интерпрайзе посмотреть?
12 dk
 
24.10.12
07:57
куда полезней информация типа
Документ:  ... заблокировал пользователь .... дата начала блокировки ...
13 ЧеловекДуши
 
24.10.12
08:14
(10)В 8.2, на управляемом интерфейсе, то же не сахар :)
14 ADirks
 
24.10.12
08:21
(0) у нас так

   ТекстЗапроса = "Set NoCount ON
   |select
   |    locks.resource_type,
   |    databases.name DB,
   |    IsNull(objects.name, Convert(varchar(20), locks.resource_associated_entity_id)) Object,
   |    locks.resource_description,
   |    locks.request_mode,
   |    locks.request_type,
   |    locks.request_status,
   |    locks.request_reference_count,
   |    procs.lastwaittype,
   |    procs.open_tran,
   |    procs.status,
   |    procs.cmd,
   |    locks.request_session_id
   |from
   |    sys.dm_tran_locks locks
   |    left join sys.all_objects objects ON objects.object_id = locks.resource_associated_entity_id
   |    left join sys.databases databases on databases.database_id = locks.resource_database_id
   |    left join master..sysprocesses procs (nolock) on procs.spid = locks.request_session_id
   |WHERE
   |    (1=1)
   |";
   Если фТолькоТекущаяБаза = 1 Тогда
       ТекстЗапроса = ТекстЗапроса + "
       |    AND databases.database_id = db_id()
       |";
   КонецЕсли;
   Если фТолькоТекущаяСессия = 1 Тогда

       ТекстЗапроса = ТекстЗапроса + "
       |    AND (locks.request_session_id = @@SPID)
       |";
   КонецЕсли;
   Если фТолькоОбъекты = 1 Тогда
       ТекстЗапроса = ТекстЗапроса + "
       |    AND locks.resource_type != 'DATABASE'
       |";
   КонецЕсли;
   ТекстЗапроса = ТекстЗапроса + "
   |order by
   |    databases.name,
   |    objects.name,
   |    locks.request_session_id,
   |    locks.request_mode
   |";
   тз = ЗапросСКЛ.ВыполнитьИнструкцию(ТекстЗапроса);
   //РедакторТЗ(тз, "Блокировки "+ТекущаяДата()+" "+ТекущееВремя());
   
   тпБлокировки_тзДанные.Загрузить(тз);
   тпБлокировки.ОбновитьСтроки();


Описания в msdn'е есть, хоть и не фонтан конечно
15 ADirks
 
24.10.12
08:25
Про всякие статистики ещё вот такую статейку почитать можно http://msdn.microsoft.com/ru-ru/magazine/cc135978.aspx
Самый первый запрос в своё время весьма помог.
16 monsterZE
 
24.10.12
09:50
(11) в стандартном мониторе не видно имен пользователей
(12) кстати тоже насущьный вопрос и не только для документа
(14) спасибо! ща буду дальше смотреть.. =)
17 Mikeware
 
24.10.12
10:30
(12) Так это давно есть...
18 monsterZE
 
24.10.12
10:48
(17) как то попадалась реализации... но по памяти все они не гарантировали 100% корректного поведения =)
19 monsterZE
 
24.10.12
10:49
(18)..но это я еще поищу =)
20 Ёпрст
 
24.10.12
10:52
(18)http://infostart.ru/public/74138/
вот одно из решений..

И на софтпоинте есть своё решение.
21 dk
 
24.10.12
10:57
(17) Дык я в курсе, автору говорил )
22 monsterZE
 
24.10.12
11:49
а помимо юзверей соединений быть не может?
а то что-то у меня номера СИДов, отсутствующие среди розданных пользователям.... 8-()
23 Mikeware
 
24.10.12
11:49
(22) может
24 monsterZE
 
24.10.12
12:02
(23) мда.. =) а это СКЛ плодит или 1С-ина?
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн