第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

SQL Server:池連接之間的隔離級(jí)別泄漏

SQL Server:池連接之間的隔離級(jí)別泄漏

大話(huà)西游666 2019-10-26 13:15:51
正如先前的堆棧溢出問(wèn)題(TransactionScope和連接池以及SqlConnection如何管理IsolationLevel?)所證明的那樣,事務(wù)隔離級(jí)別在與SQL Server和ADO.NET(以及System.Transactions和EF的池連接)之間泄漏,因?yàn)樗鼈兘⒃贏DO.NET)。這意味著在任何應(yīng)用程序中都可能發(fā)生以下危險(xiǎn)的事件序列:請(qǐng)求發(fā)生,需要顯式事務(wù)以確保數(shù)據(jù)一致性其他任何不使用顯式事務(wù)的請(qǐng)求都會(huì)出現(xiàn),因?yàn)樗鼉H在執(zhí)行非關(guān)鍵讀取?,F(xiàn)在,該請(qǐng)求將以可序列化的方式執(zhí)行,從而可能導(dǎo)致危險(xiǎn)的阻塞和死鎖問(wèn)題:預(yù)防這種情況的最佳方法是什么?現(xiàn)在真的需要在任何地方使用顯式事務(wù)嗎?這是一個(gè)自包含的副本。您將看到第三個(gè)查詢(xún)將繼承第二個(gè)查詢(xún)的可序列化級(jí)別。class Program{    static void Main(string[] args)    {        RunTest(null);        RunTest(IsolationLevel.Serializable);        RunTest(null);        Console.ReadKey();    }    static void RunTest(IsolationLevel? isolationLevel)    {        using (var tran = isolationLevel == null ? null : new TransactionScope(0, new TransactionOptions() { IsolationLevel = isolationLevel.Value }))        using (var conn = new SqlConnection("Data Source=(local); Integrated Security=true; Initial Catalog=master;"))        {            conn.Open();            var cmd = new SqlCommand(@"select                 case transaction_isolation_level             WHEN 0 THEN 'Unspecified'             WHEN 1 THEN 'ReadUncommitted'             WHEN 2 THEN 'ReadCommitted'             WHEN 3 THEN 'RepeatableRead'             WHEN 4 THEN 'Serializable'             WHEN 5 THEN 'Snapshot'         end as lvl, @@SPID     from sys.dm_exec_sessions     where session_id = @@SPID", conn);            using (var reader = cmd.ExecuteReader())            {                while (reader.Read())                {                    Console.WriteLine("Isolation Level = " + reader.GetValue(0) + ", SPID = " + reader.GetValue(1));                }            }            if (tran != null) tran.Complete();        }    }}輸出:Isolation Level = ReadCommitted, SPID = 51Isolation Level = Serializable, SPID = 51Isolation Level = Serializable, SPID = 51 //leaked!
查看完整描述

3 回答

?
慕虎7371278

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊

在SQL Server 2014中,此問(wèn)題似乎已得到解決。如果使用TDS協(xié)議7.3或更高版本。


在SQL Server 12.0.2000.8版上運(yùn)行,輸出為:


ReadCommitted

Serializable

ReadCommitted

不幸的是,此更改未在任何文檔中提及,例如:


SQL Server 2014中數(shù)據(jù)庫(kù)引擎功能的行為更改

SQL Server 2014中數(shù)據(jù)庫(kù)引擎功能的重大更改

但是更改已記錄在Microsoft論壇上。


不幸的是,此問(wèn)題后來(lái)在SQL Server 2014 CU6和SQL Server 2014 SP1 CU1中“未修復(fù)”,因?yàn)樗肓艘粋€(gè)錯(cuò)誤:


FIX:在SQL Server 2014中發(fā)布SQL Server連接時(shí),錯(cuò)誤地重置了事務(wù)隔離級(jí)別


“假定您在SQL Server客戶(hù)端源代碼中使用TransactionScope類(lèi),并且沒(méi)有在事務(wù)中顯式打開(kāi)SQL Server連接。釋放SQL Server連接后,將不正確地重置事務(wù)隔離級(jí)別?!?/p>


查看完整回答
反對(duì) 回復(fù) 2019-10-26
  • 3 回答
  • 0 關(guān)注
  • 605 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)