Transaction (process ID 67) was deadlocked

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
BAHADIR
Üye
Mesajlar: 22
Kayıt: 15 Oca 2004 02:23

Transaction (process ID 67) was deadlocked

Mesaj gönderen BAHADIR »

Merhaba

Delphi ile Msssql Server 2000 de kayıt yaparken bazen
Transaction (process ID 67) was deadlocked şeklinde bir hata çıkıyor.
Sistemde 12 kullanıcı var ve bu mesaj tüm kullanıcıların ekranına aynı anda çıkıyor.
Bir fikri olan var mı?
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Sistemde 12 kullanıcı aynı anda aynı kaydı güncellemeye çalışıyor veya kilitlenmiş bir kayda erişmeye çalışıyor.

İsolation level'ın yanlış olabilir. MS SQL hakkında fazla bilgim yok. Genel transaction bilgisi ile bu sonuçlara vardım.
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Yazdığın tüm FROM lu cümleleri

Kod: Tümünü seç

..FROM TABLE_NAME WITH(NOLOCK)
şeklinde kullanın.
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

Merhaba Naile hanım;
WITH(NOLOCK) bu kodun açılımı nedir acaba merak ettimde.

Saygılarımla
Teşekkürler.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Naile bilgiyi eksik vermiş, ben tamamlayım. FROM WITH (NOLOCK) ibaresini SELECT'lerde kullan. Bu ne demek oluyor ondan bahsedelim.

M$ Tospağası kayıt LOCK ları konusunda hala geçerli ve etkin bir çözüm geliştiremediği için INSERT veya UPDATE eden kullanıcılar o anda ilgili tabloyu veya Index Page'ini kilitlemektedirler. Bu durumda eğer kullanıcı bir de Transaction başlatmış ise, diğer Okuyucu kullanıcılar o Transaction'ın bitmesini beklerler. Bazen her iki kullanıcı birbirlerinin tablosuna yazmaya kalkar ve her ikisi de diğierinin işinin bitmesini bekler. Bu gibi durumlarda M$ SQL Server deadlock'lara düşer. Bu case'in dışında da tuhaf case'lerde aynı durum söz konusu olabilmektedir.

Bu durumların önüne geçmek için WITH (NOLOCK) yamasını geliştirdi M$. Sorunun kendisini çözemediği için her zaman uyguladığı taktik olan YAMA çözümlerinden birini ve sadece M$'a has bir söz olan WITH (NOLOCK)'ı uydurdu.

Benim tavsiyem, işi fazla derine götürmeden Firebird'e geçin bu tür dertleriniz olmasın :)

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Kuri_YJ yazdı:..
Benim tavsiyem, işi fazla derine götürmeden Firebird'e geçin bu tür dertleriniz olmasın :)
Doğru söze ne denir :?: :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
BAHADIR
Üye
Mesajlar: 22
Kayıt: 15 Oca 2004 02:23

Mesaj gönderen BAHADIR »

from with (nolock) yaptım bütün stored prosedürleri ama yine aynı hata devam ediyor.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Cevap az yukarıdaydı :wink: :lol:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

ya üstadlar arkadaş veri tabanını değiştirmek istemiyor en az azındanda şimdi değiştiremez...lütfen..ama arkadaşım emin ol bunun cevabı vardır...

arama yapmak lazım....

http://sean.typepad.com/ditto/2004/12/h ... and_s.html
http://search.msdn.microsoft.com/search ... =msdn&st=b

bir de bunları incele istersen...
Siz hayal edin...Biz yapalım TuannaSoft...
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Biz yine de doğru yolu gösteriyoruz, ısrarcı bir biçimde devam etmesi kendi bileceği bir iştir.

Evet gelelim soruna. WITH (NOLOCK) işi çözmüyor ise muhtemelen başka bir problem vardır. Bu LOCK Olan process ID hep aynı bir kullanıcı üzerinde mi oluşuyor yoksa çeşitli çeşitli kullanıcılar üzerinde oluşabiliyor mu?

Bunların dışında, DEAD LOCK'lar aynı anda 1 tane mi o luşuyor yoksa sistemde 1'den fazla DEAD LOCK oluşuyor mu?

M$-SQL Server'ın versionu kaç? Service Pack Yüklü mü? İşletim Sistemi nedir? Makina nedir?

Bu bilgileri verir misiniz?

KOlay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Bir dikkat edilmesi gereken nokta daha, sadece SP'leri değil programda kullandığınız bütün SELECT cümlelerinde WITH (NOLOCK) uygulamanız gerekmekte.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Bu veritabanından daha ziyade yazdığın kodlardan kaynaklanıyor gibi.
SELECT statementl'ara WITH (NOLOCK) yazmana gerek yok.
Transaction uyguladığın kodları (StartTransaction, Commit, RollBack...) ve kullandığın veritabanı komponentlerini ve grubunu (dbExpress, TSQLQuery...) belirtirsen belki daha yardımcı olabiliriz.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Merak ettim acaba bir geliştirme yapmış olabilir mi diye ama neden WITH (NOLOCK) Yazılmasına gerek yok dedin?

Eğer M$-SQL Server bir yazma işlemi yapıyorsa, diğer kullanıcıların Dirty Read yapabilmesi için yada Yazan kişiyi beklememesi için WITH (NOLOCK) Kullanması gerekir. Eğer kullanmaz ise, okuyan kullanıcı yazan kullanıcıyı bekler. Ayrıca Normal bir INSERT veya UPDATE yaparken kullanıcı kendisi TRANSACTION başlatmamış bile olsa, M$ illa ki Implicit Transaction'ı kendi başlatır. Uygulanan her SQL cümlesi için bunu M$-SQL Server otomatik olarak yapar, siz SELECT yazmış olsanız dahi.

Acaba M$ bu konuda bir değişiklik veya geliştirme mi yaptı M$-SQL Server'da?

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Cevapla