AWS的MongoDB性能问题

时间:2019-05-30 17:29:01

标签: ruby-on-rails mongodb mongoid

我对MongoDB的性能有一些疑问。预先感谢您的帮助。

数据库体系结构

已根据以下说明安装了数据库: https://docs.aws.amazon.com/quickstart/latest/mongodb/step2.html

它有一个堡垒和三个副本。

该数据库在MongoDB 4.09和Ruby on Rails 5应用程序中使用

问题

  1. 我想知道'hosts'参数是否应包含所有副本或仅包含主副本?

mongoid.yml配置

Microsoft.AspNetCore.Mvc.ApiExplorer 2.2.0
  1. max_pool_size的合适值是多少?每个Mongo DB节点大约有16 GiB的RAM和2个虚拟CPUS。还有其他应从默认值修改的相关参数吗?

  2. 使用不同参数的并发API请求存在性能问题。具有相同参数的API请求的平均响应为11毫秒,但是只要参数更改并且是并发的,平均响应为8904毫秒。还有一些超时。我想知道是什么原因引起的?

具有相同参数11 ms的API请求

enter image description here

具有不同参数的API请求8904毫秒

enter image description here

1 个答案:

答案 0 :(得分:1)

  1. 所有MongoDB主机都应在应用程序配置中列出。哪个服务器是主要的服务器,例如在维护期间会随时间而变化。如果该应用程序仅引用一台服务器并且该服务器正在重新启动,则该应用程序将无法找到其他任何服务器(其中一个可能是当前的主服务器),并且可能会发生故障。

    驱动程序执行集群中节点的发现,如果它能够联系种子列表(这是配置中的服务器列表)中的节点,则将能够发现所有其他节点在集群中并遵循主要更改。但是,如果您恰巧重新启动该应用程序,并且当时它仅引用一台服务器并且该服务器已关闭,则该应用程序将无法找到其他服务器。

  2. 最大池大小是每个客户端将保持的最大打开连接数。 16 GB RAM节点与200个打开的连接应该没有问题。如果最大池大小设置得太小,则应用程序可能会遇到错误,因为它将无法获得连接以执行操作。

    请注意,最多200个大致表明您期望同时执行大约200个操作,对于典型的Rails应用程序,这似乎不太可能。但是,将最大值保留为200并没有错。

  3. 鉴于您提供的详细信息,具体的性能问题并不能真正回答。缩小时间是花在应用程序中还是数据库中;如果花费在数据库中,查询是什么以及查询之间的区别。如果花费时间在应用程序中,则通常必须自己对应用程序进行概要分析,因为时间可能会有很多可能。