【问题标题】:What happens to the new queries when the connection pool is exhausted?当连接池耗尽时,新查询会发生什么?
【发布时间】:2019-07-04 19:37:19
【问题描述】:

我正在使用 Node.js 和 MySQL 开发后端。有时,要对超过 50,000 个的数据库执行大量查询,而我正在使用连接池。我的问题是查询因池耗尽而被拒绝后会发生什么?它会排队直到连接可用然后执行吗?或者它永远不会被执行?

确实有类似的问题,但答案并没有突出我的观点,他们只是建议增加限制大小。

【问题讨论】:

    标签: mysql node.js connection-pooling pool


    【解决方案1】:

    也许吧。

    您可以设置一些选项来修改行为。见https://github.com/mysqljs/mysql#pool-options

    请求可能在队列中等待空闲连接,也可能不等待。这基于选项waitForConnections。如果将此选项设置为 false,则请求会立即返回错误,而不是等待。

    如果已经有多个queueLimit 请求在等待,则新请求会立即返回错误。默认值为0,表示队列没有限制。

    请求将等待最多acquireTimeout毫秒,然后如果仍然没有获得空闲连接,则返回错误。

    P.S.:我不使用 Node.js,我只是在文档中阅读了这个。

    【讨论】:

    • 回答得好,谢谢,还有一个问题:一旦连接可用,队列中的查询会立即执行,还是优先考虑新查询?
    • 我没有使用过它,所以我不确定,但我会假设按照“队列”的通用定义,它以先到先得的方式工作。
    • 我毫不怀疑队列中的查询将在FIFO中执行,我的问题是队列中的查询是否比新的新查询具有更高的优先级(同时发出连接可用)并且尚未排队?
    • 您必须对其进行测试。作为软件工程师的一部分是能够编写测试代码来凭经验回答这些问题。编写一个可以在开发环境中运行的测试程序。您有责任设计该测试,以便明确回答您的问题。
    • 这就是为什么我们在为这个职业做准备时学习计算机科学。成为一名科学家就是要从逻辑上思考问题,因此您可以设计一个测试来消除其他变量并仅回答您需要回答的问题。这就是成为科学家的技能。
    猜你喜欢
    • 2012-04-17
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 2017-07-10
    • 2017-03-25
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多