Mevcut bir masam var:
CREATE TABLE dbo.ProofDetails
(
ProofDetailsID int NOT NULL
CONSTRAINT PK_ProofDetails
PRIMARY KEY CLUSTERED IDENTITY(1,1)
, ProofID int NULL
, IDShownToUser int NULL
, UserViewedDetails bit NOT NULL
CONSTRAINT DF_ProofDetails_UserViewedDetails
DEFAULT ((0))
);
Bu tabloda 150.000.000 satır var. Sistem 24x7x365 işletimde olduğundan, düzenli olarak meydana gelen bakım pencereleri yoktur.
Tabloya bir dizin eklemek istiyorum ve SQL Server'ın Enterprise sürümü ile bunu, tabloya yazma erişimini engellemeden yapabilmeliyim. Kullandığım komut şuydu:
CREATE INDEX IX_ProofDetails_ProofID_Etc
ON dbo.ProofDetails (ProofID, IDShownToUser)
INCLUDE (UserViewedDetails)
WITH (ONLINE=ON
, ALLOW_ROW_LOCKS=ON
, ALLOW_PAGE_LOCKS=ON
, FILLFACTOR=100
, MAXDOP=4
);
İfadeyi SSMS'de tuşuna basarak kendim yürüttüm F5. Bir dakikadan fazla sürdü, ardından diğer oturumları engellemeye başladı. Daha sonra CREATE INDEX
diğer oturumları engelleyemediğim için hemen komutu iptal ettim.
İlk dakikadan sırasında, hiçbir şey benim engellediğini CREATE INDEX
komutu, sys.dm_exec_requests
bir bekleme Çeşidi ile süreci gösterdi CXPACKET
tabii ki -. Operasyon paralelleştirildiği için bunun kötü bir şey olduğunu sanmıyorum.
Çıktısını incelemek için çok zamanım olmadı sys.dm_exec_requests
. Sorgudan dönen tek bir satır vardı WHERE session_id = xxx
. Engellenen oturumlar, hedef tabloya satır eklemeye çalışıyordu.
Kilitlerin ne kadar sürdüğünü bilmiyorum, açıklamanın başlamasından yaklaşık 2 dakika sonra ifadenin uygulanmasını iptal ettiğimi söylemek dışında. Bloklar bu noktada bir dakika kadar meydana geldi.
Uygulanmasını yanlış WITH (ONLINE=ON)
mı anlıyorum ? Yoksa bilmem gereken başka bir şey var mı?
Sunucu 2 adet dört çekirdekli Xeon E5-2643 3.3Ghz işlemci, 192GB RAM ve 5.000'den fazla iops kapasiteli SAN depolama alanına sahip oldukça etli bir makinedir. CPU tipik olarak% 20'nin altındadır, RAM, çoğunlukla SQL Server tarafından% 93 oranında kullanılmaktadır. Kutuda çalışan hiçbir şey yok, yalnızca Windows Server 2012 ve SQL Server 2012.