【发布时间】:2015-02-20 20:21:59
【问题描述】:
我们看到在负载测试中使用 Mongoose 时出现了一些奇怪但有些可预测的行为。测试完成后,服务会在负载结束后继续查询一段时间。我认为可能是查询正在排队并且在超时到期后没有被丢弃。
假设我们每 5 毫秒进行一次查询,执行需要 10 毫秒。使用单个连接,可能会发生两件事:
- 一半的查询被丢弃,因为连接正在使用中。
- 当连接释放时,多余的查询被排入队列并执行。
当数据库像这样重载时,我在描述 Mongoose 行为的文档中找不到任何内容。看起来后一种选择正在发生。
有一个设置查询超时的选项,但它没有说明该超时是从初始查询请求还是从对数据库执行查询开始计算的。我怀疑也是后者。
【问题讨论】:
-
我相信这是由于 Node 的行为,而不是 Mongoose。当您的请求向 Mongoose 询问查询时,该查询将异步执行,这意味着它将“尽可能”执行。如果到数据库的连接池已用尽,“可能时”部分将是池中有新连接可用时,这可能在您的测试结束后很长时间。