2008-09-11 16 views
8

Edit: Çözüldü, tabloda bir döngü olan bir tetikleyici vardı (daha sonra aşağıda kendi yanıtımı okuyun).DELETE SQL Server'da görünür bir neden olmadığından deyim askıda kalıyor

DELETE FROM tablename WHERE pk = 12345 

Bu sadece kapatırsa, hiçbir zaman aşımı yok, hiçbir şey:


Biz şöyle bir basit silme deyimi var.

Yürütme planına baktık ve herhangi bir yabancı anahtarın silme işlemini hızlandırmayacağından emin olmak için ilgili tablolardaki birçok aramadan oluşur, ancak bu diğer tablolardan hiçbirinin buna karşılık gelen hiçbir satırının olmadığını doğruladık. belirli satır.

Veritabanına şu anda bağlı başka kullanıcı yok.

DBCC CHECKDB'yi buna karşı çalıştırdık ve 0 hata bildiriyor.

sp_who ve sp_lock sorgu asılı iken sonuçlarına bakıldığında, benim spid PAG ve ANAHTAR kilitler bol yanı sıra zaman zaman TAB kilit var dikkat edin.

Tabloda 1.777.621 satır vardır ve evet, pk birincil anahtardır, bu nedenle dizine dayalı tek satırlı bir silidir. Yürütme planında tablo taraması yoktur, ancak bunun Tablo Biriktiricisi (Eager Spool) yazan bir şey içerdiğini, ancak Tahmin edilen satır sayısı 1 olduğunu belirttiğini fark etmekteyim. Bu aslında bir tablo taraması biçiminde olabilir mi? Sadece birincil anahtar sütuna baktığını söylüyor.

Tabloda DBCC DBREINDEX ve UPDATE İSTATİSTİKLERİ çalıştı. Her ikisi de makul bir süre içinde tamamlandı.

Maalesef bu tabloda çok sayıda dizin var. Sistemimizde, hem giden hem de gelen sütunlar ve referanslarla dolu çekirdek tablodur. Tam sayı 48 dizin + birincil anahtar kümelenmiş dizinidir.

Başka neler görmeliyiz?

Ayrıca, bu tablonun daha önce bu soruna sahip olmadığını da unutmayın, bu sorun bugün aniden ortaya çıktı. Aynı tablo kurulumuna (müşteri veri tabanlarının kopyalarına) sahip çok sayıda veritabanımız var ve beklendiği gibi davranıyorlar, sorunlu olan sadece bu.

cevap

4

Tek parça sen veri silinmesine olan masaya endeksleri sayısıdır. SQL Server, birincil dizini her dizinde bir işaretçi olarak kullandığı için, birincil dizindeki herhangi bir değişiklik, her dizinin güncellenmesini gerektirir. Yine de, yüksek sayıda konuşmuyorsak, bu bir sorun olmamalı.

Açıklamanıza göre, bu veritabanında FK ilişkilerinde diğer birçok tablo tarafından başvurulan bir birincil tablo olduğunu tahmin ediyorum. Bu, referanslar için tabloların geri kalanını kontrol ettiği için çok sayıda kilidi hesaba katar.Ayrıca, basamaklı silme işlemleri açıksa, bu tablodaki tabloların silinmesini gerektirebilir.

1

Tamam, bu utandım.

Bir meslektaş bir süre önce o masaya bir tetikleyici ekledi ve tetikte bir hata vardı. Hatayı düzeltmiş olmasına rağmen, tetikleyici bu masa için hiçbir zaman yeniden yaratılmamıştı.

Sunucu aslında hiçbir şey yapmıyordu, sadece çok sayıda kez yaptı.

Oh iyi

... Bu okuyun ve sorunu düşündü herkese gören gözler için

teşekkürler.

Josef'ın cevabını kabul edeceğim, çünkü en yakın olduğu gibi ve dolaylı olarak basamaklı silmeyle ilgili konuya dayandı.

+0

Döngüyü kullanmamak için tetiği düzelttiniz değil mi? Bir tetikleyici neredeyse hiçbir zaman bir imleci veya bir döngü içermemelidir. – HLGEM

İlgili konular