- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在 AWS 上有一个 MySQL m2.2xlarge 实例。 MySQL 数据目录位于根 EBS/。它是单个 EBS 而不是 RAID。我们有三个主要表。其中一个Table C
,内容最大,只使用了最近几天的数据。这些表中的插入率约为每天 80.000 行。这 3 个表有大约 4200 万行。 innodb_buffer_pool_size 有大约 30GB 的实例 RAM。
Table A
是最重要的,它的数据长度约为 33GB,索引约为 11GB表 B
的数据长度约为 8GB,索引约为 5GB
在我们的网站中,两个主要查询(延迟方面)是这样的:
SELECT * FROM TableA WHERE id in (.....)
SELECT * FROM TableB JOIN .... WHERE id in (.....)
在大多数页面中,(...) 将是大约 50 个最近的 ID,这些查询每次花费 < 50 毫秒。但在其他一些页面中,我们命中了较旧的 ID,这些查询的延迟飙升至 500 毫秒、800 毫秒,最高可达 1.5 秒。
我做了一个测试,在 Mysql 重启后,我做了一个 SELECT id FROM TableB
来强制索引到缓存/内存中。 Table B
查询仍然很慢。然后我执行了 SELECT * FROM TableB
。现在整个表都在缓存/内存中,查询变得非常快(<50 毫秒)。
我的问题:> 500 毫秒,> 1000 毫秒对于仅通过主键检索行的查询来说是合理的延迟吗?即使在42M的表中?即使所有行都在磁盘中?这对我来说似乎太多了。
将 MySQL 数据移动到临时存储 (/mnt) 会改善这种情况吗?使用预配置 IOPS 有帮助吗?
最佳答案
免责声明:我根本不是 (My)SQL 性能方面的专家,只是评论您用例的 AWS 方面。
除此之外,还有几个问题需要解决,首先也是最重要的:
Would moving MySQL data to ephemeral storage (/mnt) improve this?
我已经为相同的问题提供了答案 Will moving data from EBS to ephemeral storage improve MySQL query performance? ,请查看一些重要的细节 - 长话短说:如果您有任何持久性需求(除非您确切知道自己在做什么),并且通过声明中的临时存储获得性能提升,您绝对不想这样做从今天的角度来看,即使不是完全错误,过去也充其量是可疑的。
Would using Provisioned IOPS help with?
当然,Provisioned IOPS Volumes专门设计用于满足 I/O 密集型工作负载的需求,尤其是数据库工作负载,这些工作负载对存储性能和随机访问 I/O 吞吐量的一致性很敏感,请参阅帖子 Fast Forward - Provisioned IOPS for EBS Volumes进行一般介绍。
请注意,这些理想情况下(但不一定)与 EBS-Optimized Instances 齐头并进。 ,它使用优化的配置堆栈并为 EBS I/O 提供额外的专用容量。此优化通过最大限度地减少 EBS I/O 与来自您的 Amazon EC2 实例的其他流量之间的争用,为您的 EBS 卷提供最佳性能。
具体来说,您需要通读专用部分 Increasing EBS Performance ,它解决了如何查看您需要的 I/O 性能,以及如何通过 RAID 和/或预置 IOPS 来提高 EBS 性能以满足这些要求,具体取决于您的使用情况案例。
My question: > 500 ms, > 1000ms is a reasonable latency for a query that just retrieves rows by PRIMARY KEY? Even in a 42M table? Even when all rows are in disk? It seems too much for me.
如前所述,我无法判断这些值,但是,鉴于您的规范,您似乎存在内存争用,目前 m2.2xlarge 实例“仅”具有 34.2 GiB 的内存,而您正在为 innodb_buffer_pool_size
已经-考虑到操作系统和/或 MySQL 的其他内存要求,这对我来说似乎有点高,因此可能已经涉及交换,这将完美地解释您的缓存/内存预热行为体验。
最后,我建议阅读最近关于 Improving PostgreSQL performance on AWS EC2 的帖子- 那里的建议也主要针对 AWS 方面的问题,并且相应地也适用于 MySQL; 持久数据库部分几乎总结了我上面的建议:
For a durable database where you care about your data, what you want instead of a high I/O instance is an EBS Optimized instance, which has guaranteed network bandwidth to the EBS storage servers. Use EBS volumes with provisioned IOPs and, for best results, stripe a group of EBS volumes into a RAID10 array. See increasing EBS performance.
关于EC2/EBS 上的 MySQL。太慢了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14839560/
尽管我的 EC2 实例(带有针对 ECS 优化的 AIM)正在运行 ecs 代理,但容器并未在我的 EC2 中启动。为了确认 ecs-agent 正在我的 EC2 实例上运行,我检查了: ecs 日志
我想在一个任务定义中使用客户端和服务器在 aws ecs 中运行套接字程序。当我使用 awsvpc 网络模式并每次连接到本地主机上的服务器时,我都可以运行它。这很好,所以我不需要知道服务器的 IP 地
我有一个在 AWS ECS 上运行的 Docker 容器。我不想要负载均衡器,因为容器是用来处理 websocket 连接的。 https://aws.amazon.com/getting-start
我想在我的 AWS ECS/Fargate 集群上的公共(public) Docker 镜像中启动交互式 shell,以便从集群内部运行网络/连接测试。 似乎官方的方法是使用 aws ecs run-
我在 ECS Fargate 上托管了一个 Shiny 的应用程序。它运行得相当好,但偶尔在使用该应用程序时它会崩溃。我在事件选项卡中将其追溯到以下内容: service YYYY has start
在 AWS ECS 中创建容量提供程序时。我们正在填充的值 Target capacity %,在超过这个值后我们的集群缩小,但我很好奇当前集群的这个值是如何计算的,如果我想检查当前的是什么集群的值(
在 AWS ECS 中创建容量提供程序时。我们正在填充的值 Target capacity %,在超过这个值后我们的集群缩小,但我很好奇当前集群的这个值是如何计算的,如果我想检查当前的是什么集群的值(
我在 AWS 上设置了具有多个目标组和应用程序负载均衡器的 Fargate ecs 服务。它按预期运行。 然后我尝试使用本教程设置管道 https://docs.aws.amazon.com/Amaz
我有一个运行任务的 ECS 集群服务,可以使用 AWS 控制台查看其 Cloudwatch 日志流。 如何为 awslogs-stream-prefix 设置日期,因为我想按日期识别日志流。 "c
我正在使用两个容器部署 ECS Fargate 任务:1 个反向代理 nginx 和 1 个 python 服务器。对于每个我有一个 ECR 存储库,我有一个 CI/CD CodePipeline 设
我在 AWS ECS 上部署了一个 CloudFormation 堆栈,比如 teststack , 通过命令 aws cloudformation deploy --template-file ./
我这里有一些具体的用例。我需要自动扩展在 ECS Fargate 上运行的分布式 Web 应用程序。问题是所有节点都需要在内存中保留相同的数据(因此增加节点数量无助于内存压力)。因此,只有在水平(添加
我正在寻找有关为 ECS 任务分配内存的指南。我正在为希望在服务器成本上尽可能便宜的客户运行 Rails 应用程序。我正在查看具有 2 个 CPU 和 4 GB 内存的中等服务器大小。 大多数情况下,
我是 ECS 新手,我正在尝试使用 Cloudformation 部署它。 我通过查看文档以及从博客和一些文章中找到的一些示例来制作以下 cloudformation 模板。 但是,由于某种原因,它在
也许这很愚蠢,但如果我创建一个 ECS 任务定义(例如参见 https://aws.amazon.com/blogs/compute/better-together-amazon-ecs-and-aw
ECS 的容器定义允许您指定 memoryReservation对于每个容器: The soft limit (in MiB) of memory to reserve for the contain
我在 ca-central 区域创建了一个 AWS ECS 实例。它与每次更新服务时都会更改的动态公共(public) ip 一起使用。到目前为止一切都很好。 由于需要一个公网静态IP,所以我在同一区
Invalid 'containerPort' setting for container 'prerenderContainer'.(Service: AmazonECS; Status Code:
如果我在 ECS 服务级别进行自动扩展,我看不到使用容量提供程序扩展 ECS 集群的意义: https://docs.aws.amazon.com/AmazonECS/latest/developer
关闭。这个问题不符合 Stack Overflow guidelines 。它目前不接受答案。 想改进这个问题?更新问题,使其成为 Stack Overflow 的 on-topic。 1年前关闭。
我是一名优秀的程序员,十分优秀!