我正在运行一个写入密集型的MongoDB Web应用程序,但它的性能非常差。但我比较确定问题与我们的代码、设置和/或使用有关,而不是mongo本身。
我快要因绝望而砸开我的头,所以我想知道是否有人可以看一下我准备好的一些输出,看看是否有什么问题。
- db.stats() - fstab, mdadm 和 iostat -xm 2 - mongostat 这个代码并不太复杂(顺便说一下,它是用PHP编写的)。它基本上是许多的-find()和-update()操作。我确保对两个调用都使用了索引,并通过对查询进行解释(explain())来确认它们确实被使用。
我尝试了1个服务器(ec2 m2.2xlarge),4个服务器(2个副本集的2个分片)和9个服务器(3个副本集的3个分片),但是没有取得太大的成果。在好时候,我最多只能获得每秒1500次写入(插入+更新)。大部分时间,我很幸运能够达到100次插入/更新的总量,而且我总是有一个很大的“locked%”和很多排队的查询“qr | qw”。现在,我有一个正在运行并正在爬行的脚本。最糟糕的是,当我观察mongostat一段时间后,“res”中使用的RAM量约为服务器可用RAM的50%,并且有足够的RAM来适合所有集合的索引。没有理由为什么这不会像疯狂地输出数据。我必须已经重编码了应用程序2-3次,尝试找到更好的数据访问模式。我读了所有关于索引、更新、分片键等方面的文章。我放置mongo的所有服务器都使用了8个EBS磁盘RAID 10设置,并添加了一些性能调整(blockdev,noatime等)。
我知道问题出在我的端上,不是在责怪mongodb。我知道比我更大的公司正在使用它进行写入密集型应用,并且他们绝对喜欢它(例如foursquare)。同时,无论我做什么,我都无法理解我做错了什么以及为什么我会得到如此糟糕的表现。
附加信息:
- 所有服务器(客户端和服务器)都在运行Ubuntu 10.04 LTS和MongoDB 1.8.2。 - 所有服务器都在EC2 East并且在同一个区域内。 - 目前,我回到了1个m2.2xlarge服务器(4个核心,34.2 GB RAM),直到我能找出问题所在。
我快要因绝望而砸开我的头,所以我想知道是否有人可以看一下我准备好的一些输出,看看是否有什么问题。
- db.stats() - fstab, mdadm 和 iostat -xm 2 - mongostat 这个代码并不太复杂(顺便说一下,它是用PHP编写的)。它基本上是许多的-find()和-update()操作。我确保对两个调用都使用了索引,并通过对查询进行解释(explain())来确认它们确实被使用。
我尝试了1个服务器(ec2 m2.2xlarge),4个服务器(2个副本集的2个分片)和9个服务器(3个副本集的3个分片),但是没有取得太大的成果。在好时候,我最多只能获得每秒1500次写入(插入+更新)。大部分时间,我很幸运能够达到100次插入/更新的总量,而且我总是有一个很大的“locked%”和很多排队的查询“qr | qw”。现在,我有一个正在运行并正在爬行的脚本。最糟糕的是,当我观察mongostat一段时间后,“res”中使用的RAM量约为服务器可用RAM的50%,并且有足够的RAM来适合所有集合的索引。没有理由为什么这不会像疯狂地输出数据。我必须已经重编码了应用程序2-3次,尝试找到更好的数据访问模式。我读了所有关于索引、更新、分片键等方面的文章。我放置mongo的所有服务器都使用了8个EBS磁盘RAID 10设置,并添加了一些性能调整(blockdev,noatime等)。
我知道问题出在我的端上,不是在责怪mongodb。我知道比我更大的公司正在使用它进行写入密集型应用,并且他们绝对喜欢它(例如foursquare)。同时,无论我做什么,我都无法理解我做错了什么以及为什么我会得到如此糟糕的表现。
附加信息:
- 所有服务器(客户端和服务器)都在运行Ubuntu 10.04 LTS和MongoDB 1.8.2。 - 所有服务器都在EC2 East并且在同一个区域内。 - 目前,我回到了1个m2.2xlarge服务器(4个核心,34.2 GB RAM),直到我能找出问题所在。