न्यूनतम लॉकिंग के साथ बड़े डेटा सेट से अपडेट करना, सम्मिलित करना और हटाना
लगातार लॉक होने वाले सिस्टम के साथ छोटे लेनदेन का उपयोग करें

विशेष रूप से बड़े डेटा सेट के साथ काम करते समय, लॉकिंग के साथ समस्याएँ हो सकती हैं, हालाँकि ऐसा होने की आवश्यकता नहीं है। यदि आप कर सकते हैं, तो लेन-देन को छोटे टुकड़ों में तोड़ दें।
आइए नीचे दिए गए कुछ कोड देखें। सबसे पहले SSMS और तीन क्वेरी विंडो खोलें, और एक्टिविटी मॉनिटर, अपडेट अवधि को एक सेकंड पर सेट करें।
पहली विंडो में, हम परीक्षण में उपयोग के लिए एक तालिका बना सकते हैं।
इसे चलने में थोड़ा समय लगेगा और इसके लिए कुछ विंडो खोलने की आवश्यकता होगी।
Create test table
CREATE TABLE (ID BIGINT IDENTITY(1,1) CONSTRAINT PK_ID PRIMARY KEY,GUID UNIQUEIDENTIFIER)CREATE INDEX IDX_GUID ON (GUID)कुछ रिकॉर्ड बनाएं
इस कोड को निष्पादित करें और फिर नीचे दिए गए कोड को बदलें, जो एक समय में 5 मिलियन यादृच्छिक GUID को तालिका में सम्मिलित करेगा, यह हमारे लिए निरंतर अद्यतन और सम्मिलित करने का अनुकरण करता है। आप चाहें तो इसे और आगे बढ़ा सकते हैं। यह हर 1000 पंक्तियों में डाले गए रिकॉर्ड की संख्या को भी प्रिंट करेगा, ताकि आप इसका ट्रैक रख सकें।
SQL
SET NOCOUNT ONDECLARE @ID BIGINT=1WHILE @ID<5000000 BEGININSERT INTO (GUID) SELECT NEWID()IF @ID%1000=0 PRINT @IDSET @ID=@ID+1ENDकुछ रिकॉर्ड चुनें
यदि हम दूसरी विंडो खोलते हैं, तो नीचे दिया गया कोड जोड़ें, जो 20 से शुरू होने वाले 10000 रिकॉर्ड का चयन करेगा।
SQL
SELECT TOP 10000 * FROM WHERE GUID Like '%20'लूप ए डिलीट
अब एक तीसरी विंडो खोलें, आप नीचे दिए गए कोड को चला सकते हैं, जो GUID के माध्यम से लूप करेगा और 0 से शुरू होने वाले स्थान को हटा देगा।
SQL
WHILE EXISTS (SELECT TOP 1 * FROM WHERE GUID LIKE '0%') BEGINDELETE TOP (1000) FROM WHERE GUID LIKE '0%'ENDTesting the theory
Once you get above 500000 records in your fist window, run either or both of the statements in windows two and three, and check your activity monitor for what happens.
You should see fewer locks, and the lock that you do get should be for shorter periods of time, not preventing users from carrying on doing the work they need to, although it may slow down to a certain extent.