ADO NET 数据库连接池会被释放掉

客家族_祖仙教_小凡仙
博客专家认证
2019-03-07 11:10:43
设置如下 在WEB.CONFIG 里面 Pooling = true ; Max Pool Size = 100;Min Pool Size = 10;
据我测试 感觉10-20分钟释放掉空闲连接. 10个小时后释放掉所有空闲的连接,包含 MIN POOL SIZE 直到 0个连接

MIN POOL SIZE 的10个连接也被释放掉, 这就感觉奇怪了,难道有什么地方可以设置的吗?

设置释放时间, 不能释放MIN POOL SIZE的连接
...全文
1930 18 打赏 收藏 举报
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
NET 这块连接池 弱鸡死了 没有Java DBCP 功能强大. 而且更应用连池挂钩. 难怪NET适合做小系统,小网站呢!
  • 打赏
  • 举报
回复
吹风的兔子 2019-03-13
引用 15 楼 客家族_祖仙教_小凡仙 的回复:
[quote=引用 13 楼 吹风的兔子 的回复:] 我写过这么多系统 —— 都没有配置过 这种 最大最小多少连接数,多少时间回收 的东西。 我很尴尬 ~ —————————————————— 如果没记错,有个理论: > 数据库连接不用了,就尽快关闭。 —— 看不懂楼主为什么非得 养10个不做事的连接。
你做那么多系统 说明 做完了就甩手掌柜! 也顶多假高级NET开发人员![/quote] 顺带的,我不太会说话: > 云南白药的牙膏挺好用的 —— 特别适合你这种口臭的人。 > 技术不过关,可以会学校再学个两年的 —— 省的在外丢人现眼。
  • 打赏
  • 举报
回复
吹风的兔子 2019-03-13
引用 15 楼 客家族_祖仙教_小凡仙 的回复:
[quote=引用 13 楼 吹风的兔子 的回复:] 我写过这么多系统 —— 都没有配置过 这种 最大最小多少连接数,多少时间回收 的东西。 我很尴尬 ~ —————————————————— 如果没记错,有个理论: > 数据库连接不用了,就尽快关闭。 —— 看不懂楼主为什么非得 养10个不做事的连接。
你做那么多系统 说明 做完了就甩手掌柜! 也顶多假高级NET开发人员![/quote] 讨论技术就讨论技术,你非得加这一句 恶心人 —— 你可真有本事。 微软官方推荐的代码就是: using(SqlConnection conn =new SqlConnection(connStr)){ } 微软官方的 SqlHelper 也是类似的代码。 数据库连接用完就释放 —— 我从十年前上学就知道。 ------------------------------------------------------------- 你连基本的 编码规范都不懂 —— 你们公司居然该招你这种人做事,你们公司也是不容易哈。
  • 打赏
  • 举报
回复
引用 13 楼 吹风的兔子 的回复:
我写过这么多系统
—— 都没有配置过 这种 最大最小多少连接数,多少时间回收 的东西。

我很尴尬 ~

——————————————————
如果没记错,有个理论:
> 数据库连接不用了,就尽快关闭。

—— 看不懂楼主为什么非得 养10个不做事的连接。

你做那么多系统 说明 做完了就甩手掌柜! 也顶多假高级NET开发人员!
  • 打赏
  • 举报
回复
引用 13 楼 吹风的兔子 的回复:
我写过这么多系统
—— 都没有配置过 这种 最大最小多少连接数,多少时间回收 的东西。

我很尴尬 ~

——————————————————
如果没记错,有个理论:
> 数据库连接不用了,就尽快关闭。

—— 看不懂楼主为什么非得 养10个不做事的连接。


所以开发和运维是不一样的!! 站在开发角度要释放, 站在运维角度不要释放. 其实我们说的不是同一个东西, 你知道不? 而连接我们两样东西的东西 叫数据库连接池.

你把连接用完了就释放回连接池. 连接池与数据库保持稳定的长连接,不释放掉.
  • 打赏
  • 举报
回复
wanghui0380 2019-03-08
这就是我们为啥通常不建议在web系统里做定时器任务的原因,你任务定时器在不停的跑,但是实际是iis会把你的“web应用程序”时不时的回收一下,这样你的定时器就被释放了。

你的conn其实也一样,你认为他是“第一次连接上了”,问题是他“应用程序都被回收关闭了”------那么SQL Server 和 Oracle 还有理由维持一个“已经被回收关闭的应用程序”的连接么?

所以iis和tomcat在后期都加入了“预启动”概念--------让你在回收后重新,预加载你要做的事情
  • 打赏
  • 举报
回复
引用 10 楼 wanghui0380 的回复:
不管 应用线程池是否 有请求---------和应用程序池释放不释放不是一个概念,默认情况下iis会在大概26小时左右释放一次,同时如果有其他性能监控条件,他也会触发应用程序池

有关应用程序池你不妨看成就是exe把,免得解释不清。exe都关闭了,那里来的数据库连接。

所以你要想搞所谓的保持,请在exe启动的时候想办法,iis7以上就已经支持“热加载预启动”了,这方面资料自己查


我这里是B/S 结构 IIS 是应用服务器 前面是NET的桌面程序连IIS, 自然还有网页版应用.


你说26个小时IIS 释放一次 是释放啥东西?



你的意思说 通过 WEB.CONFIG ADO.net 数据库连接池 无法改变被释放掉的命运,比如下面的参数也无效. 必须通过应用连接池来搞!!

SQL Server 和 Oracle 提供程序都是自动使用连接池的。

Max Pool Size 池中允许最大连接数(默认 100),如已达最大数,所有打开连接请求将排队等候
min Pool Size 池中最小连接数(默认 0),第一次打开时会建立相应数量的连接,所以第一次请求时会稍微有点延迟
Pooling 为 true(默认值)时,连接从池中获取
Connection Lifetime 指定以秒为单位的时间间隔,默认是 0 。池中的连接创建时间早于指定生命周期,将被销毁。
当需要大量回收连接时,该功能很有效


  • 打赏
  • 举报
回复
wanghui0380 2019-03-08
不管 应用线程池是否 有请求---------和应用程序池释放不释放不是一个概念,默认情况下iis会在大概26小时左右释放一次,同时如果有其他性能监控条件,他也会触发应用程序池

有关应用程序池你不妨看成就是exe把,免得解释不清。exe都关闭了,那里来的数据库连接。

所以你要想搞所谓的保持,请在exe启动的时候想办法,iis7以上就已经支持“热加载预启动”了,这方面资料自己查
  • 打赏
  • 举报
回复
引用 8 楼 wanghui0380 的回复:
另外你是iis,iis的特性是什么?iis的特性就是自己会自己释放应用程序池。应用程序池都释放了,连接池还有么?


我要的是 数据库连接池保持 最小连接数, 不管 应用线程池是否 有请求
  • 打赏
  • 举报
回复
吹风的兔子 2019-03-08
我写过这么多系统 —— 都没有配置过 这种 最大最小多少连接数,多少时间回收 的东西。 我很尴尬 ~ —————————————————— 如果没记错,有个理论: > 数据库连接不用了,就尽快关闭。 —— 看不懂楼主为什么非得 养10个不做事的连接。
  • 打赏
  • 举报
回复
占着茅坑不拉屎?
  • 打赏
  • 举报
回复
与其鸡蛋里挑骨头,不如自己动手对于 SQLHelper 做点扩展。
  • 打赏
  • 举报
回复
那你的进程就每隔9个小时去额外(不用干什么惊天动地的大事儿)访问一次数据库呗。难道说连
select 1 as a
都不会?!
  • 打赏
  • 举报
回复
连接池管理器如果检测到与服务器的连接已断开,或者连接长时间空闲,连接池管理器会将该连接移除。

这感觉不管3721 统统移除
  • 打赏
  • 举报
回复
wanghui0380 2019-03-07
另外你是iis,iis的特性是什么?iis的特性就是自己会自己释放应用程序池。应用程序池都释放了,连接池还有么?
  • 打赏
  • 举报
回复
wanghui0380 2019-03-07
@sp1234:被博客园带弯的孩子,是扳不直的

ps:就算20分钟释放1半把,就算你说的20分钟后有100个任务并发,那么要重来50个“打开动作”(记住只是打开动作,不是new),我想问一下,他耽误了你几秒?你的业务真的到了,就是因为50个打开任务就到了无可救药的地步了么?
博客园10年前那种危言耸听的结论少听,少看。那是北大青鸟系疯狂注水的时期,那种测试有用么?啥就100w次操作慢了2秒。合着100w次累计慢2秒,这种玩意连马云都不会在意,看着笑笑而已。马云都是说,俺推云系统。你1年疯狂一次,那就在那疯狂的时候加节点。没人访问的时候,你减节点。省点钱干别的重要的事把。100w次累计2秒很正常,连windows系统都不保证你的定时器是准的(msdn自己说了,只是最可能接近那个点,你要拿定时器累加,你看看100w次累计误差是多少)
  • 打赏
  • 举报
回复
引用 4 楼 翻斗大街翻斗花园二号楼胡爷爷 的回复:
占着茅坑不拉屎?


假如我的业务系统就下午 2:00 运行到18:00 剩余的时间基本没有SQL 去请求 . 你说 占着茅坑.

其实我就是希望它占着茅坑, 第二天后 就不用再创建数据库连接了.
  • 打赏
  • 举报
回复
引用 2 楼 以专业开发人员为伍 的回复:
那你的进程就每隔9个小时去额外(不用干什么惊天动地的大事儿)访问一次数据库呗。难道说连
select 1 as a
都不会?!


IIS 是从WEBCONFIG 里读取连接信息的. 我单独部署一台IIS 来测试看看. 向上面设置样 开启了连接池, 运行IE 访问IIS 进行超作.然后停止操作后, 大约20分钟就 关闭了数据库的物理连接. 不过还保留 MIN POOL SIZE 连接数.

下班后,就没操作,今天早上来看一下 发现 连 MIN POOL SIZE 的连接数也没有了


  • 打赏
  • 举报
回复
相关推荐
发帖
.NET技术其他语言

1853

社区成员

.NET技术 其他语言讨论
社区管理员
  • 其他语言社区
加入社区
帖子事件
创建了帖子
2019-03-07 11:10
社区公告
暂无公告