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的连接
...全文
2024 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
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 的连接数也没有了


1,979

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 其他语言讨论
社区管理员
  • 其他语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧