国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

如何主動(dòng)清空.Net數(shù)據(jù)庫(kù)連接池?

運(yùn)維 數(shù)據(jù)庫(kù)運(yùn)維
一般我們的項(xiàng)目中會(huì)使用1到2個(gè)數(shù)據(jù)庫(kù)連接配置,同程藝龍的數(shù)據(jù)庫(kù)連接配置被收攏到統(tǒng)一的配置中心,由DBA統(tǒng)一維護(hù),業(yè)務(wù)方通過(guò)某個(gè)配置字符串拿到的是開(kāi)箱即用的Connection對(duì)象。

[[417053]]

本文轉(zhuǎn)載自微信公眾號(hào)「精益碼農(nóng)」,作者小碼甲。轉(zhuǎn)載本文請(qǐng)聯(lián)系精益碼農(nóng)公眾號(hào)。

一般我們的項(xiàng)目中會(huì)使用1到2個(gè)數(shù)據(jù)庫(kù)連接配置,同程藝龍的數(shù)據(jù)庫(kù)連接配置被收攏到統(tǒng)一的配置中心,由DBA統(tǒng)一維護(hù),業(yè)務(wù)方通過(guò)某個(gè)配置字符串拿到的是開(kāi)箱即用的Connection對(duì)象。

DBA能在對(duì)業(yè)務(wù)方無(wú)侵入的情況下,給業(yè)務(wù)方切換備份數(shù)據(jù)庫(kù),之后DBA要求舊連接池必須立即被清空。

那么問(wèn)題來(lái)了: 能不能立即清空.NET連接池?注意我用得是清空,而不是釋放連接。

如果有同學(xué)不知道DBA做這個(gè)要求的目的,那我啰嗦一下:

應(yīng)用程序不再使用舊連接時(shí),理論上你的連接池要被完全清空,因?yàn)閱渭兊尼尫胚B接,只會(huì)讓連接池中的Connection處于Sleep狀態(tài),依舊維持了短時(shí)間的物理連接,這個(gè)短時(shí)間其實(shí)是不必要的占用,影響了舊連接數(shù)據(jù)庫(kù)的吞吐量。

連接池知識(shí)背景

回答這個(gè)問(wèn)題之前, 我們還是先研究一下.NET數(shù)據(jù)庫(kù)連接池。

1. .NET數(shù)據(jù)庫(kù)連接池的背景

數(shù)據(jù)庫(kù)連接是一個(gè)耗時(shí)的行為,大多數(shù)應(yīng)用程序只使用1到幾種數(shù)據(jù)庫(kù)連接,為了最小化打開(kāi)連接的成本,ado.net使用了一種稱(chēng)為連接池的優(yōu)化技術(shù)。

2. .NET 數(shù)據(jù)庫(kù)連接池的表現(xiàn)

數(shù)據(jù)庫(kù)連接池減少了必須打開(kāi)新連接的次數(shù),池程序維護(hù)了數(shù)據(jù)庫(kù)物理連接。

通過(guò)為每個(gè)特定的連接配置保持一組活動(dòng)的連接對(duì)象來(lái)管理連接。

每當(dāng)應(yīng)用程序嘗試Open連接,池程序就會(huì)在池中找到可用的連接,如果有則返回給調(diào)用者;

應(yīng)用程序Close連接對(duì)象時(shí),池程序?qū)⑦B接對(duì)象返回到池中(Sleep), 這個(gè)連接可以在下一次Open調(diào)用中重用。

看黑板,下面是這次的重點(diǎn):

3. .NET是如何形成數(shù)據(jù)庫(kù)連接池的?

只有相同的連接配置才能被池化,.NET為不同的配置維護(hù)了不同的連接池。

  • 相同的配置限制為:
  • 進(jìn)程相同、
  • 連接字符串相同、
  • 連接字符串關(guān)鍵key順序相同。

(連接字符串提供的關(guān)鍵字順序不同也將被分到不同的池)。

連接池中的可用連接的數(shù)量由連接字符串Max Pool Size決定。

在一個(gè)應(yīng)用程序中,有如下代碼:

  1. using (SqlConnection connection = new SqlConnection(   
  2.   "Integrated Security=SSPI;Initial Catalog=Northwind"))   
  3.     {   
  4.         connection.Open(); 
  5.         // Pool A is created.   
  6.     }   
  7.    
  8. using (SqlConnection connection = new SqlConnection(   
  9.   "Integrated Security=SSPI;Initial Catalog=pubs"))   
  10.     {   
  11.         connection.Open(); 
  12.         // Pool B is created because the connection strings differ.   
  13.     }   
  14.    
  15. using (SqlConnection connection = new SqlConnection(   
  16.   "Integrated Security=SSPI;Initial Catalog=Northwind"))   
  17.     {   
  18.         connection.Open(); 
  19.         // The connection string matches pool A.   
  20.     }   

上面創(chuàng)建了三個(gè)Connection對(duì)象,但是只形成了兩個(gè)數(shù)據(jù)庫(kù)連接池。

還是以上代碼,如果有兩個(gè)相同的應(yīng)用程序,理論上就形成了四個(gè)數(shù)據(jù)庫(kù)連接池。

4. 連接池中的連接什么時(shí)候被移除?

連接池中的連接空閑4-8 分鐘,池程序會(huì)移除這個(gè)連接。

應(yīng)用程序下線,連接池直接被清空。

如何主動(dòng)清空.NET連接池

有了以上知識(shí)背景,我們?cè)賮?lái)回顧一下DBA的要求,切換數(shù)據(jù)庫(kù)連接配置的時(shí)候,清空原連接池。

.NET提供了 ClearAllPools、ClearPool靜態(tài)方法用于清空連接池。

  • ClearAllPools: 清空與這個(gè)DBProvider相關(guān)的所有連接池
  • ClearPool(DBConnection conn) 清空與這個(gè)連接對(duì)象相關(guān)的連接池

很明顯,我們這次要使用ClearPool(DBConnection conn) 方法。

光說(shuō)不練不驗(yàn)證,不是我的風(fēng)格。

天錘壓測(cè)/queryapi 產(chǎn)生一個(gè)包含大量連接對(duì)象的連接池;

適當(dāng)?shù)臅r(shí)候,調(diào)用/clearpoolapi清空連接池。

  1. public class MySqlController : Controller 
  2.    { 
  3.        // GET: MySql 
  4.        [Route("query")] 
  5.        public string Index() 
  6.        { 
  7.            var s = "User ID=teinfra_neo_netreplay;Password=123456;DataBase=teinfra_neo_netreplay;Server=10.100.41.196;Port=3980;Min Pool Size=1;Max Pool Size=28;CharSet=utf8;"
  8.            using (var conn = new MySqlConnection(s)) 
  9.            { 
  10.                var comm = conn.CreateCommand(); 
  11.                comm.CommandText = "select count(*) from usertest;"
  12.                conn.Open(); 
  13.                var ret = comm.ExecuteScalar(); 
  14.  
  15.                comm.CommandText = "select count(*) from information_schema.PROCESSLIST WHERE HOST like  '10.22.12.245%';"
  16.                var len = comm.ExecuteScalar(); 
  17.                return $"查詢(xún)結(jié)果:{ret} ,順便查一下當(dāng)前連接池的連接對(duì)象個(gè)數(shù): {len}"
  18.            }; 
  19.        } 
  20.  
  21.        [Route("clearpool")] 
  22.        public string Switch() 
  23.        { 
  24.            var s = "User ID=teinfra_neo_netreplay;Password=123456;DataBase=teinfra_neo_netreplay;Server=10.100.41.196;Port=3980;Min Pool Size=1;Max Pool Size=28;CharSet=utf8;"
  25.            using (var conn = new MySqlConnection(s)) 
  26.            { 
  27.                conn.Open(); 
  28.                MySqlConnection.ClearPool(conn); 
  29.            }; 
  30.  
  31.            using (var conn = new MySqlConnection(s)) 
  32.            { 
  33.                conn.Open(); 
  34.                var comm = conn.CreateCommand(); 
  35.                comm.CommandText = "select count(*) from information_schema.PROCESSLIST WHERE HOST like  '10.22.12.245%';"
  36.                var len = comm.ExecuteScalar(); 
  37.                return $"之前已經(jīng)清空連接池, 此次查詢(xún)連接池有 {v1}  個(gè)連接對(duì)象"
  38.            } 
  39.  
  40.        } 
  41.    } 

1.壓測(cè)產(chǎn)生大量連接對(duì)象

2. mysql數(shù)據(jù)庫(kù)對(duì)比

mysql的連接數(shù)查詢(xún)命令: (host是web服務(wù)器IP):

  1. select * from information_schema.PROCESSLIST WHERE HOST like '10.22.12.245%'

3. 調(diào)用/clearpoolapi,清空連接池

bingo,清空連接池的理論得到驗(yàn)證。

旁白

這是我在同程藝龍最近爬的比較深的坑位, 在本次實(shí)踐中我們了解到:

  • NET 數(shù)據(jù)庫(kù)連接池屬編程語(yǔ)言范疇,連接池維護(hù)了物理連接
  • NET數(shù)據(jù)庫(kù)連接池的定義方式:(同一進(jìn)程、同一連接字符串、同一連接字符串關(guān)鍵key順序一致) 被劃到一個(gè)池
  • DB客戶(hù)端查詢(xún)當(dāng)前連接數(shù)的方式

根據(jù)這個(gè)思路改造祖?zhèn)鞔a,.NET數(shù)據(jù)獲取組件SDK 已經(jīng)滿足了DBA的要求。

希望本文設(shè)計(jì)考量、理論+論證的行文思路對(duì)讀者有所幫助, 距離上次發(fā)文一月有余,再次感謝5000+讀者不離不棄。

引用鏈接 

[1] sql連接池(ado.net): https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-connection-pooling

 

責(zé)任編輯:武曉燕 來(lái)源: 精益碼農(nóng)
相關(guān)推薦

2025-11-03 09:26:21

2009-06-24 07:53:47

Hibernate數(shù)據(jù)

2009-07-29 09:33:14

ASP.NET數(shù)據(jù)庫(kù)連

2009-06-26 14:41:48

ADO.NET

2010-03-18 15:09:15

python數(shù)據(jù)庫(kù)連接

2011-07-29 15:11:42

WeblogicOracle數(shù)據(jù)庫(kù)連接

2009-11-12 08:59:18

ADO.NET數(shù)據(jù)庫(kù)連

2009-06-16 09:25:31

JBoss配置

2017-06-22 14:13:07

PythonMySQLpymysqlpool

2019-11-27 10:31:51

數(shù)據(jù)庫(kù)連接池內(nèi)存

2009-06-15 13:46:00

netbeans設(shè)置數(shù)據(jù)庫(kù)連接池

2018-10-10 14:27:34

數(shù)據(jù)庫(kù)連接池MySQL

2020-04-30 14:38:51

數(shù)據(jù)庫(kù)連接池線程

2019-12-30 15:30:13

連接池請(qǐng)求PHP

2024-01-10 08:17:50

HikariCP數(shù)據(jù)庫(kù)Spring

2010-03-18 14:55:17

Python數(shù)據(jù)庫(kù)連接

2011-05-19 09:53:33

數(shù)據(jù)庫(kù)連接池

2018-01-03 14:32:32

2025-01-16 10:30:49

2009-07-17 13:32:49

JDBC數(shù)據(jù)庫(kù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

蜜桃视频第一区免费观看| 国产日韩欧美一区二区三区乱码 | 超碰超碰人人人人精品| 亚洲深夜视频| 狠狠爱在线视频一区| www.黄在线观看| 91精品国产综合久久蜜臀| 在线免费一区| 亚洲国产精品91| 久久在线免费观看视频| 久久精品国产久精国产| 色久视频在线观看| 欧美日韩国产在线看| 亚洲乱码一区二区三区三上悠亚 | 少妇人妻互换不带套| 日韩av中文字幕一区二区三区| 国产免费一区二区三区| 国产三级电影在线播放| 亚洲免费观看高清| 艹b视频在线观看| 欧美国产日本视频| 黄色aaa级片| 国产精品日韩成人| 99免费看香蕉视频| 亚洲综合色区另类av| 高清色视频在线观看| 亚洲综合激情网| 高清欧美精品xxxxx在线看| 亚洲mv在线观看| 免费黄色片在线观看| 欧美精品在欧美一区二区少妇| 麻豆视频在线免费观看| 精品国产伦一区二区三区免费| 99久久精品免费看国产小宝寻花 | 中文字幕第80页| 久久综合九色综合欧美就去吻| 久久精品99国产| 亚洲人成影院在线观看| 在线视频观看你懂的| 欧美性一二三区| 欧美四级在线| 国产一区二区三区毛片| 麻豆精品国产| 成人黄色在线观看| 日韩国产在线观看| 国产男女无遮挡| 精品高清一区二区三区| 影音先锋男人在线资源| 视频在线观看一区二区| 亚洲美女15p| 免费观看成人在线| av一本久道久久综合久久鬼色| 国产视频一二区| 3atv在线一区二区三区| 欧美亚洲人成在线| 国产日韩欧美电影在线观看| 国产午夜久久| 欧美一区二区三区爽大粗免费| 亚洲激情自拍视频| 污污网站在线观看| 欧美成人激情在线| 在线欧美一区| 人妻精品无码一区二区三区| 香蕉久久一区二区不卡无毒影院| 欧美亚洲系列| 欧美在线播放视频| 丝袜美腿亚洲一区二区图片| 杨幂毛片午夜性生毛片| 欧美日韩精品一区二区天天拍小说 | 日韩最新免费不卡| 日韩高清欧美| 黑人巨大国产9丨视频| 亚洲欧美电影院| 中文字幕伦理免费在线视频| 欧美wwwxxxx| 国产视频一区欧美| 免费看黄视频网站| 亚洲成人网在线| 波多野结衣的一区二区三区 | 视频在线观看91| 99爱视频在线观看| 日韩福利在线播放| 欧美高清视频在线观看mv| 粉嫩av一区二区三区天美传媒 | 精品动漫3d一区二区三区免费| 久久亚洲中文字幕无码| 欧美日韩一区二区三区在线免费观看| 黄色精品视频| 精品乱码一区| 亚洲欧洲综合另类| 成人涩涩视频| 欧美日韩在线精品| 午夜成人免费电影| 久久亚洲精品人成综合网| 国产精品区一区二区三含羞草| 中文字幕免费不卡| 欧美电影h版| 欧美精品一区二区三区在线看午夜| 亚洲卡通动漫在线| 无码国模国产在线观看| 波多野结衣av一区二区全免费观看| 欧美日韩国产综合草草| 成人av国产| 97视频网站| 欧美福利视频在线观看| 精品写真视频在线观看| 成人免费高清在线播放| 欧亚精品在线观看| 久久久久久97三级| 激情久久一区二区| 吴梦梦av在线| 日韩精品一区国产麻豆| 亚洲精品中文字幕乱码| 黄色av观看| 欧美亚洲国产成人精品| 99riav一区二区三区| 日日av拍夜夜添久久免费| 日韩免费电影一区二区| 欧美三级韩国三级日本三斤| 亚洲一级毛片| 欧美成人综合在线| 91精品视频免费看| 欧美日韩国产一区在线| 欧美一级淫片| 婷婷婷国产在线视频| 92看片淫黄大片欧美看国产片 | 少妇高潮久久久久久潘金莲| 蜜桃一区二区三区在线观看| а√中文在线8| 欧美日韩综合精品| 亚洲福利视频网站| 国产成人福利片| 国产在线|日韩| 女性女同性aⅴ免费观女性恋 | 亚洲欧洲精品一区二区精品久久久 | 日韩经典一区| 僵尸世界大战2 在线播放| 亚洲天堂av图片| 国产在线一区二区综合免费视频| 欧美男男video| 中文字幕欧美日韩一区二区三区| 亚洲国产成人精品女人久久久 | 亚洲成av人片在线观看www| 国产又黄又猛视频| 国内精品久久影院| 亚洲网友自拍偷拍| 激情欧美日韩| 18video性欧美19sex高清| 亚洲免费视频播放| 久久深夜福利免费观看| 国产精品卡一卡二卡三| jvid福利在线一区二区| 久香视频在线观看| 欧美午夜精品久久久久免费视| 精品盗摄一区二区三区| 成人网在线播放| 大奶在线精品| 中文字幕欧美一区二区| 国产精品自拍首页| 精品在线欧美视频| 欧美激情一区二区三区蜜桃视频 | 一色桃子av在线| xxxxxx在线观看| 不卡av电影院| 亚洲大片精品永久免费| 亚洲精品婷婷| 三级成人在线| 日韩男人天堂| 日韩在线导航| 久久人人看视频| 欧美挠脚心视频网站| 国产成人免费xxxxxxxx| 神马香蕉久久| 怡红院在线播放| 中文字幕亚洲乱码| 国产精品99久久久久久久| 欧美精品一区二区在线观看| 久久久久久久网| 欧美午夜视频| 国产精品igao视频网网址不卡日韩| 诱受h嗯啊巨肉高潮| 五月天久久综合网| 欧美大秀在线观看| 欧美亚洲精品一区| 不卡免费追剧大全电视剧网站| 欧美一区二区三区高清视频| 欧美黑人xx片| 日本免费专区| 精品国产一区二区三区在线| 国产精品91免费在线| 欧美tk—视频vk| 亚洲欧美偷拍卡通变态| 日韩电影免费在线看| 亚洲男人都懂第一日本| 黄网在线免费看| 久草在线看片| 色综合久久久久无码专区| 国产综合动作在线观看| 91国内免费在线视频| 日韩乱码在线视频|