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.

Leave a Reply

Your email address will not be published. Required fields are marked *