Sysprocesses tablosundaki engellenen sütun, mandal beklemeleri için doldurulur

Bu makalede, tablodaki engellenen sütunun sysprocesses mandal beklemeleri için doldurulduğunu tanıtılır.

Özgün ürün sürümü: SQL Server
Özgün KB numarası: 906344

Özet

SQL Server sistem tablosundaki engellenen sütunun sysprocesses kilit beklemelerine ek olarak mandal beklemeleri için doldurulduğunu fark edebilirsiniz. Bazen, tek bir sunucu işlem kimliğinin (SPID) kendisini engellediği bildirildiğinde kısa süreler fark edebilirsiniz. Bu davranış beklenmektedir.

Daha fazla bilgi

Mandallar, önbelleğe alınmış veri sayfalarına ve diğer bellek içi nesnelere erişimi eşitlemek için kullanılır. Genellikle mandallar yalnızca kısa bir süre tutulur ve mandal bekleme süreleri buna karşılık olarak küçük olur. SQL Server, SPID'nin mandal için uzun süre beklediği durumlarda sorun gidermeye yardımcı olacak tanılamalara sahiptir. Bu tanılamalar, sistem tablosundaki engellenen sütunun sysprocesses başka bir SPID'nin mandal isteğini engelleyen bir mandalın sahibini yansıtmasına neden olur.

Mandal sahipliği yalnızca özel (EX) veya güncelleştirme (UP) mandal modundaki mandallar için izlenir. Paylaşımlı (SH) mandal modundaki mandallar için sahiplik izlenmez. Bu, engellenen sütunun bazı mandal istekleri için doldurulmayacağı anlamına gelir.

Çoğu zaman, aşağıdaki koşullar doğruysa engellenen sütundaki değeri yoksayabilirsiniz:

  • Sütundaki waittime değer düşük.
  • waittype SPID'nin değeri bir mandal bekleme türüdür.

Sütundaki waittype olası değerler hakkında daha fazla bilgi için bkz. sys.dm_os_wait_stats (Transact-SQL).

BIR SPID G/Ç sayfası mandalını beklerken, engellenen sütunun kısaca SPID'nin kendisini engellediğini bildirdiğini fark edebilirsiniz. Bu davranış, veri sayfalarında G/Ç işlemleri için mandalların kullanılmasının bir yan etkisidir. bir iş parçacığı bir G/Ç isteği yayınladığında, G/Ç isteğini veren SPID sayfada bir mandal alır. Tüm SQL Server G/Ç işlemleri zaman uyumsuz olur. Bu nedenle, G/Ç isteğini veren SPID'nin isteğin tamamlanmasını beklemesi gerekiyorsa SPID aynı sayfada başka bir mandal almaya çalışır. Bu ikinci mandal ilk mandal tarafından engellenir. Bu nedenle, engellenen sütun SPID'nin kendisini engellediğini bildirir. G/Ç isteği tamamlandığında ilk mandal serbest bırakılır. Ardından ikinci mandal isteği verilir.

Örneğin, aşağıdaki koşullar oluşabilir:

  1. SPID 55, arabellek havuzunda mevcut olmayan bir veri sayfasını okumak istiyor.

  2. SPID 55, sayfada bir EX mandalı alır. Sayfa henüz bellekte olmadığından istenen mandal modu EX'dir. EX mandal modu, G/Ç isteğinin tamamlanmasını beklemek için sayfaya erişmek isteyebilecek diğer SPID'leri zorlar. EX mandal modu, diğer SPID'lerin aynı sayfa için yinelenen G/Ç isteği göndermesini de engeller.

  3. SPID 55, sayfayı diskten okumak için G/Ç isteğini gönderir.

  4. SPID 55 sayfayı okumak istediğinden, SPID 55'in G/Ç isteğinin bitmesini beklemesi gerekir. G/Ç isteğinin tamamlanmasını beklemek için SPID 55, paylaşılan (SH) mandal moduna sahip başka bir mandalı aynı sayfada almaya çalışır. Ex mandal zaten alınmış olduğundan, SH mandal isteği engellenir ve SPID askıya alınır. SH mandal isteğini engelleyen EX mandal da SPID 55 tarafından alındığı için, SPID geçici olarak kendini engellediği bildirilir.

  5. G/Ç isteği tamamlandığında, sayfadaki EX mandalı serbest bırakılır.

  6. EX mandalının serbest bırakılması SH mandalını SPID 55'e verir.

  7. SPID 55 artık sayfayı okuyabilir.

4. adım ile 5. adım arasında tablo, sysprocesses SPID 55'in PAGEIOLATCH_XX bekleme türüyle birlikte tek başına engellendiğini gösterir. Bu bekleme türü içinde XX SH, UP veya EX olabilir. Bu davranış, SPID 55'in bir G/Ç isteği yayımladığını ve SPID 55'in G/Ç isteğinin tamamlandığını beklediğini gösterir.