我想知道如何数据库的数据处理连接,都没有明确关闭实体启动的连接。

  1. 说我有一个数据库,可以接受,只有2个并行连接在一段时间。我有一段代码,打开了一个连接和永远不会关闭。这段代码运行,永远,但它使用的连接只有一次在它的生命周期,但是连接的对象从来没有超出范围,所以它不是垃圾回收。说我运行2的实例,这个代码。这是否意味着直到程序终止或者连接时(由于活动)的数据库可以接受没有更多的连接?

  2. 在上述情况,如果连接目的是垃圾收集,然后是连接的自动终止或者它是否取决于数据库驱动,我使用或连接不是终止,在所有,直到我靠近它明确?

  3. 如果我打开一个连接在一段代码我不关闭连接明确,但该程序终止后,如何将数据库收回这方面?

有帮助吗?

解决方案

潜在的协议的数据库连接,通常是TCP/IP的基础。连接,可以终止在几个方面:

  1. 服务器关闭这一点优雅和收到的确认客户;
  2. 客户的关闭是优雅和收到的确认服务器;
  3. 连接时间。客户和服务这两个单独被告知他们各自的操作系统的连接已经关闭;
  4. 连接被强行关闭。

在情况(3),TCP连接必须保持由发送假消息的每一个经常以避免超时。你的连接,可能超时的,因为双方都不是这样做的(和数据库连接这不是你典型的想做)。

这是完全可能的时间为一侧为关闭连接和兴田另一侧,仍然认为它是开放的。消息可能会发在这些情况下(而且通常丢弃)。

每个连接("socket")使用一个操作系统的资源称为一个 文件描述 (UNIX中的说法,你的操作系统可以叫它别的东西),这是一个处理的I/O资源和同样的事情,用于一个开放的文件(同样,开放源码软件可能有所不同).

限制连接在你的数据库将最低水平:

  • 配置的限制的操作系统;
  • 最大的文件描述符允许这一进程(减去任何正被用于I/O活动);和
  • (可能的)系统的设置或政策连接的限制。

如果连接不TCP基础(例如文件系统座因为通常使用与MySQL在UNIX系统)的原则在实际上很像.

无论如何,这个故事的寓意采取从这是一个数据库连接--无论其形式--涉及一个操作系统的资源的一种。你的程序中有直接或间接要求,资源。如果程序的死亡,操作系统将回收它(或许不会立即而最终).如果连接得到了垃圾收集,然后资源将在大致相同的方式,如果它被迫关闭。

它的外部资源(并不代码你的客户使用)持有的连接的开放和驱动器的任何限制。

其他提示

来回答你的问题在顺序:

  1. 是的,大概。除非通过"并行连接"你实际上意味着"同时查询".如果哟是保持数据库连接打开它打开。

  2. 垃圾收集可能或不可能清理的连接。取决于语言和数据库驱动程序使用。(垃圾收集可能是有限的,回收存,资源不喜欢TCP连接。)

  3. 当你的程序终止,一般的操作系统是负责清理的所有资源使用。这包括关闭TCP,等等。连接。因此,对于大多数的连接类型,该数据库将通知其他边关闭了连接。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top