今天发现一台线上 8 核 16G 机器 mysql 机器平均一直有 6-8 个线程在处于 running 数据不多应该都能命中 bufferpool 看了下 cpu 使用率 6%-10%左右 想了下 cpu 应该是挂起在等内存返回数据所以说使用率很低 这样理解对吗
1
23571113 2020-11-02 22:09:12 +08:00
parser sql 和查询优化之类的还是很耗 cpu 的。
|
2
littlewing 2020-11-02 22:13:18 +08:00 via iPhone
sql 解析
执行计划 内存拷贝 |
3
XDJI OP @23571113 这个是有一定消耗 但是像 mov 指令等待内存返回数据会让出 cpu 去执行别的吗 [之前我以为对上层是占用] 不然 cpu 使用率应该在 800%了
|
4
vk42 2020-11-02 22:46:02 +08:00
@XDJI CPU 内部流水线会调度不冲突的指令执行,但这些对 CPU 外部是不可见的。CPU 读写内存不会挂起,实在没有可执行的会空转等,不要和 I/O 搞混了
|
5
XDJI OP @vk42 那这样理解和我最初想法一样 8 个线程满载 那岂不是说 cpu 使用率很高,和现在数据不一样呀 还是说因为双 1 落盘 io 导致的 。如果非双 1cpu 会上去吗
|
6
vk42 2020-11-03 00:27:24 +08:00
@XDJI 因为瓶颈在别的地方啊,redis 和 mysql 的话大量开销应该是在监听和处理网络 I/O 这里。要想读写内存跑满 CPU 你可以直接写 8 个进程全做 memcpy……
|
7
DoctorCat 2020-11-03 02:54:34 +08:00
感觉要全局看这问题,要具体看系统进程调度策略的,因为内核抢占、cpu 亲和性、时间记账和队列优先级都会影响到你这 CPU 使用率的统计
|
8
cholerae 2020-11-03 12:41:29 +08:00
perf 一下不就知道了,你咋知道来 V2EX 上能问到正确结果呢
|