2009-08-31 11 views
5

इस तरह मैं पढ़ा है लेख: http://www.codinghorror.com/blog/archives/001166.html http://www.databasejournal.com/features/mssql/article.php/3566746/Controlling-Transactions-and-Locks-Part-5-SQL-2005-Snapshots.htmSQL सर्वर में लॉकिंग रणनीति कैसे बदलें?

और मैं क्या समझ से, एसक्यूएल सर्वर एक बहुत निराशावादी ताला रणनीति है। और प्रदर्शन में सुधार करने के लिए, मुझे लॉकिंग को बदलना चाहिए स्क्रिप्टशॉट पढ़ें।

लेकिन मुझे यह नहीं पता कि यह कहां करना है। मैं लॉकिंग रणनीति कहां बदलूं?

उत्तर

5

आप Using Row Versioning-based Isolation Levels पर पढ़ सकते हैं कि उदाहरण के साथ ALTER कमांड का उपयोग करके उन्हें कैसे सेट किया जाए।

यह डेटाबेस स्तर पर निर्धारित किया जाता है: Row Versioning-based Isolation Levels in the Database Engine:

ALTER DATABASE YourDatabaseName SET READ_COMMITTED_SNAPSHOT ON; 

एक बेहतर प्रारंभिक बिंदु से ऊपर प्रलेखन, जो संबंधित विषयों को शामिल किया गया की मूल है।

संपादित करें: नीचे दी गई मेरी टिप्पणियों में उल्लिखित लिंक जोड़े गए।

+0

ठीक है, लेकिन फिर मैं कैसे देख सकता हूं कि मौजूदा अलगाव स्तर कौन सा है? और क्या यह अलगाव स्तर केवल लेनदेन में चल रहे प्रश्नों या सभी प्रश्नों पर लागू होता है? – Allrameest

+1

आप डीबीसीसी उपयोगकर्ता विकल्प चला सकते हैं और लौटाई गई वस्तुओं में से एक "अलगाव स्तर" के लिए वर्तमान सेटिंग होगी। यहां एमएसडीएन लिंक है: http://msdn.microsoft.com/en-us/library/ms180065।एएसपीएक्स –

+0

लेनदेन में अलगाव स्तर का उपयोग करने के लिए, अपने प्रश्न के दूसरे भाग के बारे में आपको "BEGIN TRAN" कथन से पहले "सेट ट्रांज़ेक्शन इज़ोलेशन लेवल स्नैपशॉट" का उपयोग करके इसे विशेष रूप से सेट करना होगा। इस प्रकार मेरी समझ यह है कि यह केवल उन लेन-देन प्रश्नों को प्रभावित करती है जिन्हें आप स्पष्ट रूप से घोषित करते हैं। इसका एक उदाहरण उपर्युक्त लिंक में है। इसे समझाते हुए एक अच्छा आलेख यहां भी पढ़ा जा सकता है: http://www.databasejournal.com/features/mssql/article.php/3566746/ नियंत्रण - लेनदेन- और- लॉक- भाग-- SQL-2005- स्नैपशॉट्स एचटीएम –

1

स्नैपशॉट अलगाव स्तर का उपयोग करके tempdb में बहुत अधिक भार जोड़ दिया जाएगा क्योंकि आपका डेटाबेस लोड बढ़ता है।

लॉकिंग विधियों को बदलना प्रश्नों में संकेतों को लॉक करके या संग्रहीत प्रक्रिया या कनेक्शन के लिए सामान्य रूप से इस्लावल लेवल को बदलकर किया जाता है। यह सेट ISOLATION LEVEL कमांड के साथ किया जाता है, या .NET में कनेक्शन ऑब्जेक्ट पर अलगाव स्तर को बदलकर किया जाता है।

यदि आप चाहते हैं कि SQL सर्वर डिफ़ॉल्ट पृष्ठ स्तर (यानी पंक्ति स्तर लॉकिंग) के अलावा किसी स्तर पर अपनी लॉकिंग को संभालने के लिए चाहता है जिसे आपके भीतर के भीतर (ROWLOCK) संकेत का उपयोग करके कथन स्तर द्वारा एक कथन पर संभाला जाना है बयान।

UPDATE YourTable (WITH ROWLOCK) 
    SET Col2 = 3 
WHERE Col1 = 'test' 

कोई वैश्विक इस लॉकिंग स्तर बदलने के लिए सेटिंग है, और अगर चप्पू-आंकड़ा स्नैपशॉट अलगाव स्तर संचालन के साथ संयोजन में प्रयोग किया जाता है अभी भी पृष्ठ के स्तर पर किया जाएगा के रूप में पूरे पृष्ठ है के लिए रवाना कॉपी करने के लिए tempdb डेटाबेस तब अद्यतन किया गया है जब पुराने संस्करण को tempdb डेटाबेस से हटा दिया जाना है।

+0

-1 देखें आप SET ISOLATION LEVEL के माध्यम से "READ_COMMITTED_SNAPSHOT" चुन नहीं सकते हैं, या .NET कनेक्शन ऑब्जेक्ट के माध्यम से। अहमद मगेद के जवाब में आपको डाटाबेस को बदलना होगा। – Andomar

+0

@Andomar हाँ यदि आप स्नैपशॉट का उपयोग करने जा रहे हैं तो आपको इसे डेटाबेस स्तर पर सक्षम करना होगा। इसका उपयोग करने के लिए आपके स्थानांतरण के लिए, आपको अभी भी उस लेनदेन के अलगाव स्तर के लिए एसईटी ट्रांज़ेक्शन इशोलेशन लेवल स्नैपशॉट का उपयोग करना होगा, जो कि कमांड के बजाय स्नैपशॉट का उपयोग करने के लिए हमेशा डिफ़ॉल्ट है। – mrdenny

0

जब आप डेटाबेस के लिए कनेक्शन सेट,

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 

मैं कहाँ काम हम हर कनेक्शन हम की स्थापना के लिए ऐसा करने को फोन करके आप लॉक अलगाव स्तर सेट कर सकते हैं, वे सब में स्थापित कर रहे हैं उसी स्थान के रूप में हम डेटाबेस तक पहुंच के लिए एक साझा कनेक्शन पूल का उपयोग करते हैं। पढ़ा गया अनौपचारिक विकल्प तब उस कनेक्शन द्वारा जारी सभी बयानों पर लागू होता है।

+0

हम्म मैं बोर्ड में 'पढ़ा गया अनौपचारिक' सेट करने की अनुशंसा नहीं करता - यह वास्तव में डेटाबेस के आपके उपयोग पर निर्भर करता है। एसक्यूएल सर्वर 2005+ स्नैपशॉट अलगाव का समर्थन करता है जो अनिवार्य संस्करण पंक्तियों को ओरेकल के काम करने के तरीके के समान तरीके से पंक्तियों में दिखाता है। – pjp

+0

आप "अनुमोदित पढ़ें" के साथ "प्रतिबद्ध स्नैपशॉट पढ़ें" को भ्रमित कर रहे हैं। पूर्व अपेक्षाकृत अज्ञात सेटिंग है कि आप "सेट लेनदेन अलगाव स्तर" के साथ चयन नहीं कर सकते हैं, अहमद मगेद की पोस्ट देखें। – Andomar

संबंधित मुद्दे