c# - क्या अलगाव स्तर autocommit लेनदेन SQL सर्वर में उपयोग करता है?



sql-server transactions (1)

ऑटोकैमिट लेनदेन के लिए कोई विशिष्ट अलगाव स्तर नहीं है। वे जो भी अलगाव स्तर तक कनेक्शन के लिए आखिरी घोषित किए गए हैं (या सर्वर डिफ़ॉल्ट) का उपयोग करते हैं।

दुर्भाग्य से, हालांकि, 1 के पूलिंग कनेक्शन के चेहरे में, आप "नया" कनेक्शन के रूप में क्या सोचते हैं वास्तव में एक पुन: उपयोग किया जा सकता है इसलिए कुछ परिस्थितियों में, आप एक कनेक्शन उठा लेंगे जो एक अलगाव स्तर का उपयोग SQL सर्वर डिफ़ॉल्ट (पढ़ें प्रतिबद्ध) से अलग है।

मेरी सलाह होगी - यदि आप स्पष्ट अलगाव स्तर का कहीं भी उपयोग करते हैं, तो आपको यह भी सुनिश्चित करना होगा कि आप अलग-अलग कनेक्शन स्ट्रिंग का उपयोग करें, या आपको कनेक्शन पूलिंग को बंद करने की आवश्यकता है, यदि आप स्पष्ट रूप से अलगाव स्तर को हर जगह सेट नहीं करना चाहते हैं मैं आमतौर पर पहले को पसंद करता हूं, ताकि आप कनेक्शन पूलिंग से अभी भी लाभ उठा सकें, लेकिन प्रत्येक आवश्यक अलगाव स्तर के लिए अलग पूल हैं।

1 कनेक्ट इश्यू जो यह इंगित करता है कि यह SQL सर्वर 2014 और बाद के संस्करण के लिए सच हो सकता है या नहीं।

जब मैं SNAPSHOT अलगाव स्तर के साथ अपडेट संघर्ष समस्या के साथ काम करता हूं, तो ऐसा लगता है कि आटोकोमाइट लेन-देन पिछली बार उपयोग किए जाने वाले अलगाव स्तर का उपयोग करते हैं।

शर्त: ALLOW_SNAPSHOT_ISOLATION चालू है, READ_COMMITTED_SNAPSHOT बंद है

चरण 1: लेनदेन के बिना अद्यतन कथन निष्पादित करें

using (var sqlconn = new SqlConnection("Data source=..."))
using (var sqlcmd = sqlconn.CreateCommand())
{
    sqlconn.Open();
    sqlcmd.CommandText = "Update ..."
    sqlcmd.ExecuteNonQuery();
}

तब मैं sys.md_exec_sessions में एक नज़र sys.md_exec_sessions और पाया कि लेनदेन अलगाव स्तर READCOMMITTED

चरण 2: SNAPSHOT अलगाव स्तर में लेनदेन के साथ अद्यतन कथन निष्पादित करें

using (var sqlconn = new SqlConnection("Data source=..."))
{
    sqlconn.Open();

    using (var sqltran = sqlconn.BeginTransaction(IsolationLevel.Snapshot))
    using (var sqlcmd = sqlconn.CreateCommand())
    {
        sqlconn.Open();
        sqlcmd.CommandText = "Update ..."
        sqlcmd.ExecuteNonQuery();
    }
}

अलगाव का स्तर Snapshot , अच्छा काम करता है।

चरण 3: चरण 1 फिर से करें

अलगाव का स्तर Snapshot । मुझे उम्मीद है कि चरण 3 READCOMMITTED कि READCOMMITTED_SNAPSHOT बंद है।

दो विचार हैं जो मुझे चाहिए था, लेकिन मैं समाप्त नहीं कर सकता।

  1. dm_exec_sessions में स्वायत्त लेनदेन के बारे में जानकारी शामिल नहीं होगी I
  2. ऑटोकैमिट लेनदेन वास्तव में एसएएनएपीएसएचओटी का प्रयोग करता है

किसी भी विचार की सराहना की जाएगी

धन्यवाद,





ado.net