Bu örnek, SharePoint 2007 veritabanlarını (SP) barındırır. SP içerik veritabanında yoğun olarak kullanılan bir tabloya karşı çok sayıda SELECT / INSERT kilitlenme yaşıyoruz. İlgili kaynakları daralttım, her iki işlem de kümelenmemiş dizin üzerinde kilit gerektiriyor.
INSERT, SELECT kaynağında bir IX kilidine ve SELECT, INSERT kaynağında bir S kilidine ihtiyaç duyar. Kilitlenme grafiği, 1.) SELECT'ten (üretici / tüketici paralel dişleri) ve 2.) INSERT'ten üç kaynak gösterir.
İncelemeniz için kilitlenme grafiğini ekledim. Bu Microsoft kodu ve tablo yapıları olduğundan herhangi bir değişiklik yapamayız.
Ancak, MSFT SP sitesinde MAXDOP Örnek düzeyi yapılandırma seçeneğini 1 olarak ayarlamanızı önermelerini okudum. Bu örnek diğer birçok veritabanı / uygulama arasında paylaşıldığı için bu ayar devre dışı bırakılamaz.
Bu nedenle, bu SELECT ifadelerinin paralel gitmesini engellemeye çalıştım. Bunun bir çözüm değil, sorun gidermeye yardımcı olacak daha fazla geçici bir değişiklik olduğunu biliyorum. Bu nedenle, iş yükü değişmemiş olsa bile (sık sık meydana gelen SELECT / INSERT) çıkmazlar ortadan kalkmış olsa da, “Paralellik için Maliyet Eşiği” ni standart 25'ten 40'a çıkardım. Sorum neden?
SPID 356 INSERT, kümelenmemiş dizine ait bir sayfada IX kilidine sahiptir
SPID 690 SELECT Yürütme Kimliği 0, aynı kümelenmemiş dizine ait bir sayfada S kilidine sahiptir
şimdi
SPID 356, SPID 690 kaynağında bir IX kilidi istiyor, ancak SPID 356 SPID 690 Yürütme Kimliği 0 tarafından kilitlendiğinden
SPX 690 Yürütme Kimliği 1, SPID 356 kaynağında bir S kilidi istiyor ancak SPID 690 Yürütme Kimliği nedeniyle bunu alamıyor. 1, SPID 356 tarafından engellendi ve şimdi kilitlenmemiz var.
Yürütme Planı SkyDrive'ımda bulunabilir
Tam Kilitlenme Ayrıntılarını burada bulabilirsiniz
Biri bana neden gerçekten minnettar olduğumu anlamama yardımcı olabilirse.
EventReceivers Tablosu.
Hiçbir 16 Uniqueidentifier Kimliği
hiçbir 512 nvarchar Adı
no 16 Uniqueidentifier siteid
WebId Uniqueidentifier hiçbir 16
HostID Uniqueidentifier hiçbir 16
HOSTTYPE int no 4
ItemId int no 4
Dirname nvarchar hayır 512
hayır 256 nvarchar LeafName
Tip int no 4
SequenceNumber int no 4
Montaj nvarchar hiçbir 512
Sınıf nvarchar no 512
Veri nvarchar no 512
Filtre nvarchar no 512
SourceId tContentTypeId no 512
SourceType int no 4
Kimlik bilgisi int no 4
ContextType varbinary no 16
ContextEventType
varbinary no 16 ContextId varbinary no 16
ContextObjectId varbinary no 16
ContextCollectionId varbinary hayır 16
index_name index_description index_keys
EventReceivers_ByContextCollectionId kümelenmemiş İLKÖĞRETİM siteid üzerinde bulunan ContextCollectionId
EventReceivers_ByContextObjectId İLKÖĞRETİM siteid üzerinde, ContextObjectId bulunduğu kümelenmemiş
EventReceivers_ById, İLKÖĞRETİM siteid üzerinde bulunan kimliği benzersiz kümelenmemiş
İLKÖĞRETİM siteid, WebId, HostID, HOSTTYPE, Tür, ContextCollectionId, ContextObjectId üzerinde bulunan eşsiz, EventReceivers_ByTarget kümelenmiş, ContextId, ContextType, ContextEventType, SequenceNumber, Assembly, Class
EventReceivers_IdUnique PRIMARY Id'de bulunan kümelenmemiş, benzersiz, benzersiz anahtar
proc_InsertEventReceiver
veproc_InsertContextEventReceiver
yapıyor? Ayrıca paralelliği azaltmak için neden sunucu genelindeki ayarlarla birleştirmek yerine bu ifadeyi (MAXDOP 1 kullanarak) doğrudan etkilemiyoruz?