这些是我的RDS实例吐露
我有一个托管在node.js实例中的基于EC2的后端,还有一个带有10分钟缓存窗口的云前端,它承载了我们的密集查询之一,大约需要20到30秒(我知道这很紧张,我正在优化它),但同时以最少的用户(比如2-3个用户)来说,CPU的峰值达到了85%-100%左右,我无法弄清楚原因。任何建议和想法都是非常感谢的。
发布于 2018-01-11 00:19:48
你所描述的是预期的行为。
一个m3.xlarge有4个vCPU(虚拟CPUs -其中有4个通常意味着两个核心,每个内核都有两个超级线程)。100%的利用率意味着所有4个vCPU都是完全繁忙的,而75%意味着3个忙,50%表示2个,25%表示1。(低于100%,这不一定意味着确切3个工作,一个空闲,而是指每个vCPU的总空闲时间除以vCPU的数量,从100%减去)。
在MySQL服务器中,任何一个查询都只能使用相当于一个vCPU的查询(操作系统并不物理地锁定到一个特定的vCPU,但它的消耗不能超过一个).因此,对于2到3个长时间运行的查询,50%-75%的CPU利用率将是完全正常的,假设首先导致查询需要很长时间的是处理它所需的CPU工作量--任何小于这一点的操作都意味着CPU周期不是导致查询长时间运行的主要因素。(长时间运行查询的另一个常见原因是必须执行磁盘I/O以满足查询的数量。查询的性能通常受到可用磁盘或可用CPU的限制,查询的性质以及缓冲池相对于工作数据集的大小是重要因素)。
如果CPU周期确实是查询需要这么长时间的主要原因,那么您可以理解为什么CPU上的数字是这样的--人为地限制查询使用更少的时间是没有意义的,从而使它更慢,仍然.但这就是必须要发生的事。
目前,MySQL将尽可能快地消耗它所需的资源,以便尽可能快地执行任何单独的查询。如果在给定时间运行的查询比系统上有vCPU的长时间运行的查询多,并且查询是CPU绑定的,那么OS线程调度程序就是负责为每个查询分配合理的可用资源份额的实体--因此,在一个4 vCPU系统上,已经运行了4个长时间的查询,如果第5个查询启动,它不会坐等其他查询完成--它实际上会将每个查询的速度降低约20%,因为它声称自己在所有可用的CPU周期中所占的份额--所有正在运行的查询都得到了一个份额,根据他们想要做的工作。
在只有1 vCPU的机器上,您会发现只有一个长时间运行的查询会将利用率提高到100%,如果对CPU周期的需求是影响查询总体执行时间的主要因素,那么这也是完全正常的。
https://dba.stackexchange.com/questions/195084
复制相似问题