Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 数据库和连接_Database_Database Connection - Fatal编程技术网

Database 数据库和连接

Database 数据库和连接,database,database-connection,Database,Database Connection,我感兴趣的是了解数据库如何处理启动连接的实体未显式关闭的连接 假设我有一个一次只能接受2个并发连接的数据库。我有一段代码可以打开一个连接,但永远不会关闭它。这段代码永远运行,但它在其生命周期中只使用连接一次,但连接对象从未超出范围,因此它不会被垃圾收集。假设我运行了这段代码的两个实例。这是否意味着在程序终止或连接超时(由于不活动)之前,数据库不能接受更多的连接 在上面的场景中,如果连接对象是垃圾收集的,那么连接是自动终止的,还是依赖于我正在使用的数据库驱动程序,或者连接在我显式关闭之前根本不会终

我感兴趣的是了解数据库如何处理启动连接的实体未显式关闭的连接

  • 假设我有一个一次只能接受2个并发连接的数据库。我有一段代码可以打开一个连接,但永远不会关闭它。这段代码永远运行,但它在其生命周期中只使用连接一次,但连接对象从未超出范围,因此它不会被垃圾收集。假设我运行了这段代码的两个实例。这是否意味着在程序终止或连接超时(由于不活动)之前,数据库不能接受更多的连接

  • 在上面的场景中,如果连接对象是垃圾收集的,那么连接是自动终止的,还是依赖于我正在使用的数据库驱动程序,或者连接在我显式关闭之前根本不会终止

  • 如果我在一段代码中打开了一个连接,但没有显式关闭连接,但程序终止,那么数据库如何回收该连接


  • 按顺序回答您的问题:

  • 是的,可能。除非“并发连接”实际上是指“并发查询”。如果你保持数据库连接打开,它是打开的

  • 垃圾收集可能会清理连接,也可能不会清理连接。取决于所使用的语言和数据库驱动程序。(垃圾收集可能仅限于回收内存,而不是TCP连接等资源。)

  • 当程序终止时,操作系统通常负责清理它使用的所有资源。这包括关闭TCP等连接。因此,对于大多数连接类型,数据库将收到另一方关闭连接的通知


  • 数据库连接的底层协议通常基于TCP/IP。可以通过以下几种方式之一终止连接:

  • 服务器优雅地关闭它,并从客户端接收确认信息
  • 客户端优雅地关闭,并从服务器接收确认信息
  • 连接超时。客户端和服务器都分别被各自的操作系统告知连接已关闭
  • 连接由任意一侧强制关闭
  • 在(3)的情况下,TCP连接必须通过每隔一段时间发送虚拟消息来保持活动状态,以避免超时。您的连接可能会超时,因为双方都没有这样做(对于数据库连接,这不是您通常想要做的事情)

    一方认为连接已经关闭,另一方仍然认为连接已经打开,这是完全可能的。在这些情况下,消息可能会被发送(通常会被丢弃)

    每个连接(“套接字”)都使用一个名为文件描述符的操作系统资源(在UNIX术语中,您的操作系统可能会将其称为其他名称),该资源是I/O资源的句柄,与用于打开文件的资源相同(同样,操作系统可能会有所不同)

    数据库上的连接限制将为以下最低值:

    • 操作系统的配置限制
    • 该进程允许的最大文件描述符(减去用于I/O活动的任何描述符);及
    • (可能)连接限制的系统设置或策略
    如果连接不是基于TCP的(例如UNIX系统上经常与MySQL一起使用的文件系统套接字),那么原理实际上非常简单

    无论如何,这个故事的寓意是,数据库连接——无论其形式如何——涉及某种操作系统资源。您的hsa计划直接或间接要求提供该资源。如果程序死掉,操作系统将回收它(可能不是立即而是最终)。如果连接被垃圾回收,那么资源将以与强制关闭时大致相同的方式释放

    保持连接打开并驱动任何限制的是外部资源(而不是客户端正在使用的代码)