Ms sql suspend olan işlemler.

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Ms sql suspend olan işlemler.

Mesaj gönderen tuna »

Merhaba.MS SQL 2008 X64 Kullanıyoruz üzerinde Tiger 2 çalışıyor.

Sorunum şu: Gün içinde kullancılarım işlem yaparken Fatura kayıt vs. gibi tiger bi anda kilitlenip kalıyor. SQL aktivite monitöründe process lere baktığımda birsürü suspend olmuş komutlar görüyorum. Bunların üzerine sağ tıklayıp kill yapıyorum ve tiger düzeliyor. Kullandığım server gayet iyi bir server. WIN SRV 2008 X64. Donanım olarakta fazlasıyla yeterli.

Ben bu suspend olmuş komutları otomatik olarak nasıl kill yaptırabilirim. veya bunların suspend olmaması için yapılacak birşey varmıdır.
Birde neden komutlar suspend oluyor. Şimdiden herkese teşekürler.
unalaygun
Üye
Mesajlar: 139
Kayıt: 27 Mar 2004 12:34
Konum: istanbul

Re: Ms sql suspend olan işlemler.

Mesaj gönderen unalaygun »

Aşağıdaki kodlar suspend olan işlemleri otomatikmen kill eder çalıştırmanız yeterli başka bir şeye gerek yok.


SELECT
ROW_NUMBER() OVER(ORDER BY spid) AS satirNo ---1 den başlayarak artan sırada rütbeleme işlemi yapar.
,status
,spid ProcessId
,blocked as kilitleyenId
,waittime/1000 as BeklemeSuresi_sn
,hostname
,cmd
,loginame
,nt_username
,program_name
into #killtable
from master.dbo.sysprocesses
where
spid > 50 --sql serverın kendi kullandığı işlemler 50 den küçükler.
--and waittime >50
--and blocked > 0
and status='Suspended'
order by master..sysprocesses.spid desc, master..sysprocesses.waittime desc

declare @i int
declare @ProcessId int
declare @stringkomut nvarchar(100)
set @ProcessId=0
set @i=(select Min(satirNo) from #killtable) ---tabledaki minimum satır numarasını al

while ((select count(satirNo) from #killtable)>0)
begin

(select @ProcessId=ProcessId from #killtable where satirNo=@i) ---ilgili satırdaki kill edilecek işlem idsini set etme
set @stringkomut='kill '+cast(@ProcessId as nvarchar(100))

exec sp_executesql @stringkomut; ---string komut olarak çalıştırma işlemei
delete from #killtable where satirNo=@i ---işlemi biten ilgili satırı silelim

set @stringkomut='';--string içini boşaltma işlemi
set @i=@i+1;--bir sonraki kayda geçmesi için artırma

end

drop table #killtable
derviş
Cevapla