- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在 EC2
实例(7GB RAM)上安装了 mongodb
(版本:2.0.8),数据大小仍然小于 1GB
。我正在使用配置的 100 IOPS
磁盘来提高磁盘性能。
问题是,我收到了一些随机的慢查询,如下所示(来自 mongo 日志)
db.UserInfoShared query: { _id: "999081873179" } ntoreturn:1 idhack:1 reslen:108 1919ms
几乎 2 秒
!
这只是对一个集合的 _id
查找,该集合包含大约 100,000
个条目,每个条目的大小都小于 500 字节
。该实例中仅运行了 mongo,通常此类查找不到 0.01 秒
。
这可能是什么原因造成的?我应该如何解决它?非常感谢任何帮助...
最佳答案
@angela,@Asya,非常感谢您帮助我。
事实证明,延迟的主要原因是 mongodb GLOBAL LOCK
本身。我们的锁定百分比平均为 5%,有时会达到 30-50% 的峰值,这会导致查询缓慢。
如果你遇到这个问题,你必须做的第一件事就是启用 mongodb MMS 服务 (mms.10gen.com
),这会让你深入了解到底发生了什么在您的数据库服务器中。
在我们的案例中,LOCK PERCENTAGE 非常高,并且有多种原因。你要做的第一件事就是阅读关于并发的 mongodb 文档, http://docs.mongodb.org/manual/faq/concurrency/
锁定的原因可能是在应用程序级别、mongodb 或硬件。
1) 我们的应用程序进行了大量的更新
并且每次更新(超过100 ops/sec
)都持有一个全局锁
mongodb。问题是,当一个不在内存中的条目发生更新时,mongo 必须先将数据加载到内存中,然后再更新(在内存中),整个过程发生在 global lock
。如果说整个事情需要 1 秒才能完成(0.75sec
从磁盘加载数据,0.25sec
在内存中更新),其余的更新调用等待(整个 1 秒
)这样的更新开始排队……您会注意到您的应用服务器中的请求越来越慢。
它的解决方案(虽然听起来可能很愚蠢)是在进行更新
之前查询
相同的数据。它有效地做的是将“将数据加载到内存”(0.75 秒)部分从 global lock
中移出,这大大降低了您的 lock percentage
2) 造成全局锁的另一个主要原因是mongodb的数据flush
到磁盘。基本上每 60 秒(或更短)mongodb(或操作系统)将数据写入磁盘,并在此过程中持有一个 global lock
。 (这有点解释随机慢查询)。在您的 MMS 统计信息中,查看 background flush avg
图表...如果它很高,则意味着您必须获得更快的磁盘。
在我们的例子中,我们在 EC2
中迁移到一个新的 EBS 优化
实例,并将我们预置的 IOPS
从 100
到 500
这几乎将 background flush avg
减半,服务器现在更快乐了。
关于MongoDB 随机慢查询 - EC2 IOPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15446132/
我们有 PostgreSQL 实例每秒处理数十个 r/w 查询。 实例类型:db.m3.2xlarge 实例预置 IOPS (SSD):1000 实例存储大小:100GB,数据库大小约为5-10GB。
我读过 GCP docs关于性能,我read关于 mongo 批量操作,我想知道批量操作是否算作 1 个操作(例如,我可以每秒每 GB 执行 30 次这样的操作)还是等于批量操作的数量。 谢谢你! 最
大数据存储中 IOPS 和吞吐量之间的主要区别是什么? 文件大小对 IOPS 有影响吗?为什么? 最佳答案 IOPS 衡量每秒读取和写入操作的数量,而吞吐量衡量每秒读取或写入的位数。 尽管它们衡量的是
在 Azure 中,每个虚拟机可以连接一定数量的驱动器,每个驱动器的最大速度为 500 IOPS。请参阅VM specifications 我正在配置 SQL 服务器,并尝试衡量传统硬盘驱动器意义上的
在 Azure 中,每个虚拟机可以连接一定数量的驱动器,每个驱动器的最大速度为 500 IOPS。请参阅VM specifications 我正在配置 SQL 服务器,并尝试衡量传统硬盘驱动器意义上的
由于我们的应用程序包含大量文件,尤其是来自 resources/views/和 vendor/(每个请求 588 个),我想跟踪每个请求的 I/O 数量。此外,我们正在从当前托管在同一服务器上的我们自
我想知道创建一个空文件需要多少次 I/O 操作 (iops)。我对 linux 和 GFS 文件系统很感兴趣,但是也非常欢迎其他文件系统信息。 也非常欢迎提出如何准确衡量这一点的建议。 真实场景(答案
我在 EC2 实例(7GB RAM)上安装了 mongodb(版本:2.0.8),数据大小仍然小于 1GB。我正在使用配置的 100 IOPS 磁盘来提高磁盘性能。 问题是,我收到了一些随机的慢查询,
如果查看 Azure 存储中磁盘的定价等级(截至目前,美国东部地区的高级 SSD 低于一级),就会发现提供的 IOPS 越高,磁盘大小就越大。 人们可以选择更高的性能层,但使用较小的磁盘大小(尽管这可
使用 Azure 一段时间后,我很清楚 Azure 存储帐户默认的 20,000 IOPS 限制。然而,我还没有找到有关如何监控帐户 IOPS 以确定其是否受到限制的最新文档。这在调试应用程序、虚拟机
如果查看 Azure 存储中磁盘的定价等级(截至目前,美国东部地区的高级 SSD 低于一级),就会发现提供的 IOPS 越高,磁盘大小就越大。 人们可以选择更高的性能层,但使用较小的磁盘大小(尽管这可
使用 Azure 一段时间后,我很清楚 Azure 存储帐户默认的 20,000 IOPS 限制。然而,我还没有找到有关如何监控帐户 IOPS 以确定其是否受到限制的最新文档。这在调试应用程序、虚拟机
我目前在 MySql 中有一个表,如果我运行此查询,则有 730 万行,大小为 1.5GB: How to get the sizes of the tables of a mysql databas
我想计算 Linux 中命令消耗的IOs。例如,如果我运行“ls”命令,我应该让它消耗 IOs。 我已经尝试过这里提供的帮助: How to measure IOPS for a command in
我使用 fio 进行存储基准测试,使用 fio2gnuplot 绘制图表,每次我运行测试并查看 iops 的日志文件时,第二列始终为 1,即 iops 值,由于该图表只是垂直于Y 轴。这没有意义。我尝
我一直在针对具有复制 1 和 3 的 3 节点 Cassandra 集群运行一些基本压力测试。该系统是 Linux 且位于 SAN 上。我还在对 EC2 与 SSD 存储进行比较。与 EC2 上的 S
使用 blktrace 捕获 IOS 的痕迹,并使用 blkreplay 重放相同的痕迹。我想检查吞吐量、队列深度和 IOS 等参数,因此我们使用eekwatcher 和 iowatcher 等工具。
我一直在关注 OpenCL 的一些教程,很多时候人们用 FLOPS 来说话.维基百科确实解释了公式,但没有说明它的实际含义?例如,1光年= 9.4605284 × 10^15米,其实就是光在一年中行进
我正在研究一个模拟模型,我想确定存储 IOPS 容量何时成为瓶颈(例如,HDD 有大约 150 IOPS,而 SSD 可以有 150,000)。所以我试图想出一种方法来在命令 (git) 中针对其中一
据我了解,RDS 实例上的通用 SSD 具有基于磁盘大小的 IOPS 限制,直到达到 1TB,当您可以以 3000 IOPS 无限突增时。 一旦你有一个 1TB 的磁盘,你就可以在 3000 处连续爆
我是一名优秀的程序员,十分优秀!