Lock Request Time out (Error:1222) Hatası
Merhabalar,
Bugünkü yazımızda SSMS üzerinde çalışırken karşılaşabileceğimiz ve önemli sorunlara sebebiyet verebilecek bir hatanın çözümü ile ilgileneceğiz.
Bildiğimiz üzere SQL Server’da yürüttüğümüz transactionlarda bazen tablo kitlemeleri ile karşılaşmaktayız. Eğer bu yazıya şu an göz atıyorsanız tam da bu tarz bir durumla karşı karşıyasınız demektir.
SQL Server Management Studio(SSMS) üzerinden bir veritabanı için sorgu yazmak isterken aşağıdaki gibi bir mesaj karşıladı sizi;
“ Lock Request Time Out Period Exceeded (Error 1222) ”
Bu mesaj aslında bize hala commit edilmemiş ve lock oluşturan bir transaction olduğunu söylemektedir.
Böyle bir durumla karşılaştığınızda ilk olarak Activity Monitor üzerinden sorguları incelemekle başlayabilirsiniz. Bu soruna sebebiyet vererek lock oluşturan sorgumuzu bulduktan sonra sağ tıklayıp Kill Process diyerek işlemi sonlandırmak aldığımız hatanın çözümü için yeterli olacaktır.
Eğer Activity Monitor üzerinden ilgili sorguyu bulamadıysanız temelde aynı işlevi görecek olan aşağıdaki iki farklı sorgulama yöntemiyle de çözüm arayabilirsiniz.
Devam etmekte olan transactionları görebilmek için
DBCC OPENTRAN
komutunu kullanarak ya da
select distinct object_name(a.rsc_objid), a.req_spid, b.loginame
from sys.syslockinfo a (nolock) join sys.sysprocesses b (nolock)
on a.req_spid=b.spid
where object_name(a.rsc_objid) is not null
sorgusunu kullanarak lock oluşturan sorgularımızın SPID bilgilerini bulabiliriz. Bu iki farklı sorgu sonucunda dönen listede, aradığımız sorgunun SPID değerini aldıktan sonra
KILL sorgu_id
komutunu kullanarak işlemi sonlandırabilir ve sorunumuzu çözebiliriz.
Örneğin sorgumuzun idsi 73 ise
KILL 73
komutunu çalıştırarak sorguyu sonlandırabiliriz.
Böyle bir durumla hiç karşılaşmamanızı umuyor olsam da karşılaşmanız durumunda SQL Server servisine restart atmaktan kurtaracağını düşünüyorum. 😊
Hoşça kalın.