मेरे पास एक मौजूदा तालिका है:
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))
);
इस तालिका में 150,000,000 पंक्तियाँ हैं। प्रणाली 24x7x365 के संचालन में है, इसलिए नियमित रूप से रखरखाव वाली खिड़कियां नहीं हैं।
मैं तालिका में एक इंडेक्स जोड़ना चाहता हूं, और एसक्यूएल सर्वर के एंटरप्राइज संस्करण के साथ, मुझे ऐसा करने में सक्षम होना चाहिए, ताकि टेबल पर लिखने की पहुंच को अवरुद्ध किए बिना। मेरे द्वारा उपयोग की जाने वाली कमांड थी:
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
);
मैंने स्वयं SSMS के कथन को दबाकर निष्पादित किया F5। यह एक मिनट से अधिक समय तक चला, फिर अन्य सत्रों को रोकना शुरू किया। मैंने तब तुरंत CREATE INDEX
कमांड को रद्द कर दिया क्योंकि मैं अन्य सत्रों को ब्लॉक नहीं कर सकता।
पहले मिनट के दौरान, कुछ भी मेरी CREATE INDEX
आज्ञा को अवरुद्ध नहीं कर रहा था , sys.dm_exec_requests
एक प्रतीक्षा प्रकार के साथ प्रक्रिया को दिखाया गया CXPACKET
- निश्चित रूप से। मुझे नहीं लगता कि यह एक बुरी बात है क्योंकि ऑपरेशन को समानांतर किया गया था।
मेरे पास आउटपुट का निरीक्षण करने के लिए बहुत समय नहीं था sys.dm_exec_requests
। क्वेरी से केवल एक ही पंक्ति लौटी थी WHERE session_id = xxx
। अवरोधित सत्र लक्ष्य तालिका में पंक्तियाँ सम्मिलित करने का प्रयास कर रहे थे।
मुझे नहीं पता कि ताले कितने समय तक चले, सिवाय इसके कि मैंने इसके शुरू होने के 2 मिनट बाद बयान का निष्पादन रद्द कर दिया। उस बिंदु पर लगभग एक मिनट के लिए ब्लॉक हो रहे थे।
क्या मैं के कार्यान्वयन को गलत समझ रहा हूं WITH (ONLINE=ON)
? या कुछ और है जिसकी मुझे जानकारी होनी चाहिए?
सर्वर एक काफी मांसल मशीन है, जिसमें 2 क्वाड-कोर Xeon E5-2643 3.3Ghz प्रोसेसर, 192GB रैम और सैन स्टोरेज 5,000+ iops के लिए सक्षम है। सीपीयू आम तौर पर 20% से नीचे है, रैम 93% उपयोग किया जाता है, ज्यादातर SQL सर्वर द्वारा। बॉक्स पर और कुछ नहीं चल रहा है, बस विंडोज सर्वर 2012 और एसक्यूएल सर्वर 2012 है।