टेबल संकेत के उपयोग पर शोध करते समय , मुझे ये दो प्रश्न मिले:
दोनों सवालों के जवाब में कहा गया है कि उपयोग करते समय (UPDLOCK, HOLDLOCK)
, अन्य प्रक्रियाएं उस तालिका पर डेटा नहीं पढ़ पाएंगी, लेकिन मैंने यह नहीं देखा। परीक्षण करने के लिए, मैंने एक तालिका बनाई और दो एसएसएमएस खिड़कियां शुरू कीं। पहली खिड़की से, मैंने एक लेन-देन चलाया जो तालिका से विभिन्न तालिका संकेत का उपयोग करके चुना गया था। जब लेन-देन चल रहा था, तो दूसरी विंडो से मैंने यह देखने के लिए विभिन्न बयान चलाए कि कौन सा ब्लॉक किया जाएगा।
परीक्षण तालिका:
CREATE TABLE [dbo].[Test](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Value] [nvarchar](50) NULL,
CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
SSMS विंडो 1 से:
BEGIN TRANSACTION
SELECT * FROM dbo.Test WITH (UPDLOCK, HOLDLOCK)
WAITFOR DELAY '00:00:10'
COMMIT TRANSACTION
SSMS विंडो 2 से (निम्न में से एक चलाया):
SELECT * FROM dbo.Test
INSERT dbo.Test(Value) VALUES ('bar')
UPDATE dbo.Test SET Value = 'baz' WHERE Value = 'bar'
DELETE dbo.Test WHERE Value= 'baz'
विंडो 2 में चलने वाले कथनों पर विभिन्न तालिका संकेत का प्रभाव:
(UPDLOCK) (HOLDLOCK) (UPDLOCK, HOLDLOCK) (TABLOCKX)
---------------------------------------------------------------------------
SELECT not blocked not blocked not blocked blocked
INSERT not blocked blocked blocked blocked
UPDATE blocked blocked blocked blocked
DELETE blocked blocked blocked blocked
क्या मैंने उन प्रश्नों में दिए गए उत्तरों को गलत समझा, या मेरे परीक्षण में गलती की? यदि नहीं, तो आप अकेले (UPDLOCK, HOLDLOCK)
बनाम का उपयोग क्यों करेंगे (HOLDLOCK)
?
मैं जो पूरा करने की कोशिश कर रहा हूं उसका और स्पष्टीकरण:
मैं एक तालिका से पंक्तियों का चयन करना चाहूंगा और उस तालिका में डेटा को संशोधित होने से रोक सकता हूं, जबकि मैं इसे संसाधित कर रहा हूं। मैं उस डेटा को संशोधित नहीं कर रहा हूं, और रीड्स को होने देना चाहता हूं।
यह उत्तर स्पष्ट रूप से कहता है कि (UPDLOCK, HOLDLOCK)
ब्लॉक को पढ़ेगा (जो मुझे चाहिए)। इस जवाब पर टिप्पणी का मतलब है कि यह है HOLDLOCK
कि पढ़ता रोकता है। तालिका के संकेतों के प्रभावों को समझने और बेहतर तरीके से समझने और देखने के UPDLOCK
लिए कि क्या अकेले में वही होगा जो मैं चाहता था, मैंने उपरोक्त प्रयोग किया और उन उत्तरों के विपरीत परिणाम प्राप्त किए।
वर्तमान में, मुझे विश्वास (HOLDLOCK)
है कि मुझे क्या उपयोग करना चाहिए, लेकिन मुझे इस बात की चिंता है कि मुझसे कोई गलती हो सकती है या किसी ऐसी चीज की अनदेखी हो सकती है जो भविष्य में मुझे काटने आएगी, इसलिए यह प्रश्न है।