sql server - लेन-देन स्कोप लॉकिंग टेबल और अलगाव लेवल



sql-server entity-framework (1)

मैं अपनी परियोजना में TransactionScope का उपयोग करना चाहता हूं मैंने इसके बारे में पढ़ा और मैंने पाया कि यह डेटाबेस में एक निहित लेनदेन बनाता है। मुझे यह जानना है कि क्या TransactionScope स्कोप उस तालिकाओं को ताले लगाता है जो इसे बदलता है?

उदाहरण के लिए इस कोड में:

using (Entities ent = new Entities())
{
    using (TransactionScope tran = Common.GetTransactionScope())
    {
        var oldRecords = ent.tblUser.Where(o => o.UserID == UserID);

        foreach (var item in oldRecords)
        {
           ent.tblUser.DeleteObject(item);
        }

तथा

public static TransactionScope GetTransactionScope()
{
    TransactionOptions transactionOptions = new TransactionOptions();
    transactionOptions.IsolationLevel = System.Transactions.IsolationLevel.Serializable;
    return new TransactionScope(TransactionScopeOption.Required, transactionOptions);
}

क्या tblUser Complete कमान समस्या तक लॉक है?

IsolationLevel लेनदेन के समान स्पष्ट लेनदेन में IsolationLevel क्या है?

धन्यवाद


यह SQL सर्वर है जो लॉकिंग करता है - यदि आवश्यक हो किसी भी UPDATE या DELETE संचालन को उन पंक्तियों पर एक विशेष लॉक मिलना चाहिए जो इसे प्रभावित करते हैं - अगर ये पहले से किसी दूसरे लेनदेन से लॉक हैं, तो वह ऐसा नहीं कर सकता है।

तो आपके मामले में, यदि आप डेटाबेस से कई पंक्तियों को हटा देते हैं, तो डिफ़ॉल्ट रूप से SQL सर्वर उन पंक्तियों को केवल लॉक कर देगा - जो हटाए जा रहे हैं यह पूरी मेज को लॉक नहीं करता है जब तक आप एक बार में बहुत अधिक पंक्तियों को नहीं हटाते हैं - अगर आप एक लेनदेन में 5 और 1000 पंक्तियों को हटाना चाहते हैं, तो SQL सर्वर एक ताला बढ़ाने की कोशिश करेगा और पूरी तालिका लॉक करेगा ( 5000+ रखने और प्रबंधित करने के बजाय व्यक्तिगत पंक्ति ताले)।

अलगाव का स्तर केवल परिभाषित करता है कि एक पंक्ति लॉन्च कितनी देर तक होगी - डिफ़ॉल्ट रूप से ( READ COMMITTED ), पंक्ति को केवल पढ़ने के समय के लिए साझा लॉक होगा - आमतौर पर बहुत ही कम समय अलगाव स्तर के पुनरावचनीय पढ़ने के साथ , साझा लेनदेन वर्तमान लेन-देन के अंत तक आयोजित किया जाएगा, और सिरिअलजिल केवल पंक्तियों को पढ़ा नहीं जा सकेगा , लेकिन पंक्तियों की पूरी श्रृंखला लेकिन फिर से: जो केवल रीड ऑपरेशन्स को प्रभावित करता है - इसका DELETE या UPDATE स्टेटमेंट पर कोई सीधा प्रभाव नहीं पड़ता है (एक पंक्ति में साझा लॉक होने के अलावा DELETE को इसे अनन्य लॉक प्राप्त करने से रोका जा सकता है जिसे इसकी आवश्यकता है)





transactionscope