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.
Ms sql suspend olan işlemler.
Re: Ms sql suspend olan işlemler.
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
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ş