Имя: Пароль:
1C
 
sql 2000 дидлоки с утра достали(( как обнаружить того кто блочит
0 Skom
 
20.04.11
07:26
как увидить запросом SPID того кто блочит всех остальных

ну когда в sql сервере в current activity смотришь и там в locks
видно кто заблочен и кто блочит

надо получить запросом. потому что в момент блокировок нет доступа к этой информации. постоянно говорит что невозможно получить эту инфу из EM

кто может помочь???
1 Skom
 
20.04.11
07:28
sp_lock не показывает того кто блокирует
там я вижу только заблокированных.
ну или я как то не так смотрю.
в общем научите плиз
2 упс
 
20.04.11
07:49
В профайлере отлавливайте deadlock graph - увидите кто и кого
3 Skom
 
20.04.11
07:56
(2) ок. спс.
а нельзя ли как нить из базы данных мастер выудить эту информацию???
4 Андрюха
 
20.04.11
08:00
У нас долгое время дедлочил сбрендивший маршрутизатор, прямо замучились, пока его вычислили.
5 Skom
 
20.04.11
08:00
(4) как вычислили???
6 упс
 
20.04.11
08:08
(3) Я думаю, что вряд ли вы в мастере это увидите - максимум, зная таблицу, сможете увидеть кто на нее наложил блокировки и кто ждет ее освобождения. Вообще, database enngine не знает ни про какие дедлоки, он просто накладывает/снимает блокировки, а отдельное фоновое задание их анализирует и ищет дедлоки, после чего убивает одну из сессий. А чем вас профайлер не устраивает?
Вообще, вот годная статья по дедлокам: http://www.rsdn.ru/article/db/deadlocks.xml
7 Андрюха
 
20.04.11
08:09
Уже всё перепробовали, SQL поставили 2005, память сервера увеличили, стали делать ежедневную оптимизацию, млин... Потом чё-то решили железо проверить, раутер поменяли - и всё взлетело.
8 VladZ
 
20.04.11
08:18
(0)
select str(spid,4) as spid,left(loginame,10) as login, left(hostname,15) as host, str(blocked,4) as blk, str(max(waittime),15)  as wait , str(sum(cpu),15) as CPU, str(sum(memusage),15) as mem
, hostprocess
 from master..sysprocesses where hostname<>''
group by str(spid,4),left(loginame,10), left(hostname,15), str(blocked,4), hostprocess, hostname
ORDER BY str(blocked,4) desc, left(hostname,15)
9 VladZ
 
20.04.11
08:21
В ХостМониторе используем такой запрос:

select convert(varchar(9), t1.blocked)+' '+rtrim(t2.hostname)+' '+convert(varchar(9), t2.hostprocess) +db_name(t2.dbid)  from master..sysprocesses  t1 inner join master..sysprocesses  t2 on (t2.spid = t1.blocked) and (t2.blocked = 0) where t1.hostname<>'' and t1.blocked<>0   and t1.waittime>1000   union all select 'OK' as bloked

Принцип тот же, вид другой.
10 Кириллка
 
20.04.11
08:42
(0)может подойдет:

SELECT
   CAST(sli.req_spid as smallint) as spid,
   sli.rsc_dbid as dbid,
   sli.rsc_objid as ObjId,
   so.Name as ObjectName,
   sli.rsc_indid as IndId,
   SUBSTRING(v.name, 1, 4) as Type,
   SUBSTRING(sli.rsc_text, 1, 16) as Resource,
   SUBSTRING(u.name, 1, 8) as Mode,
   SUBSTRING(x.name, 1, 5) as Status,
   ISNULL(CAST(BlkSli.req_spid as varchar(9)), '') as BlkBy
FROM master.dbo.syslockinfo as sli (NOLOCK)
INNER JOIN master.dbo.spt_values as v (NOLOCK) ON
   sli.rsc_type = v.number
   AND v.type = 'LR'
INNER JOIN master.dbo.spt_values as x (NOLOCK) ON
   sli.req_status = x.number
   AND x.type = 'LS'
INNER JOIN master.dbo.spt_values as u (NOLOCK) ON
   sli.req_mode + 1 = u.number
   AND u.type = 'L'
INNER JOIN master.dbo.sysdatabases as sd (NOLOCK) ON sli.rsc_dbid = sd.dbid
INNER JOIN dbo.sysobjects as so (NOLOCK) ON sli.rsc_objid = so.id
LEFT JOIN master.dbo.syslockinfo as BlkSli (NOLOCK) ON
   BlkSli.rsc_dbid = sli.rsc_dbid
   AND BlkSli.rsc_objid = sli.rsc_objid
   AND BlkSli.req_spid != sli.req_spid
   AND sli.req_status = 3
   AND BlkSli.req_status = 1
WHERE
   sd.name = DB_NAME()
11 Skom
 
20.04.11
09:05
буду смотреть.
сейчас делаю sql таблицу в самой базе что бы видеть
какие документы открыты в данный момент в целом во всей базе
12 Skom
 
20.04.11
14:04
кстати ка выяснилось ДИДЛОКИ постоянно в течении дня совершал один и тот же компьютер.

работа идет в терминальном режиме. на сервере терминалов.
1С запускает из того же каталога что и остальные.

может было у кого что подобное.

я понимаю на железяки косить если бы локально запускалась 1С но тут то с СЕРВЕРА терминалов....
13 Кириллка
 
20.04.11
14:12
(12)на каких таблицах хоть? небось напрограммировал так?
14 Skom
 
20.04.11
14:36
(13) пока не ясно почему у одного из 4-х пользователей
(выписка документов физлицам в торговом зале)
возникают такие дидлоки
15 Кириллка
 
20.04.11
14:42
(14)тебе скрипт из (10) не помог чтоли?
16 Skom
 
20.04.11
14:55
я делаю монитор действий в 1С счас

будут открытые документы видны и будет видно действие с документом.

проводится он или просто открыт.
и потом монитор на ТП зафигачю. проще будет решать вопросы зависаний и косяков
17 Кириллка
 
20.04.11
14:56
(0)А вообще для твоего случая mssql2000: http://www.rsdn.ru/article/db/deadlocks.xml
18 Skom
 
20.04.11
15:01
так в 6 уже было))
19 Кириллка
 
20.04.11
15:11
(18)так повторение - мать учения.
20 val
 
20.04.11
15:24
21 Skom
 
21.04.11
05:28
(20) спс. буду пользоваться мониторить
22 VladZ
 
21.04.11
10:45
У нас в кабинете на стене висят два монитора, на которые с помощью HostMonitor-а выводятся всяческие показатели: контроль Инета, наличие пинга до филиальских серваков, блокировки SQL и т.д.

Там для анализа блокировок используется запрос, озвученный в (9).

Причем еще и письма приходят на электронку.