首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL MyISAM多核优化

MySQL MyISAM多核优化
EN

Server Fault用户
提问于 2013-06-14 20:14:08
回答 1查看 4K关注 0票数 2

我注意到,当执行一个要求很高的请求时,我们的应用程序不会响应请求。运行top似乎可以确定问题的根源:

代码语言:javascript
运行
复制
top - 13:54:25 up 1 day, 13:43,  2 users,  load average: 1.02, 0.98, 0.83
Tasks: 110 total,   1 running, 109 sleeping,   0 stopped,   0 zombie
Cpu(s): 11.9%us,  1.1%sy,  0.0%ni, 86.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.2%st
Mem:   3145728k total,  2329220k used,   816508k free,        0k buffers
Swap:   131072k total,   128164k used,     2908k free,  1585060k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND           
26073 mysql     20   0  397m 209m 3452 S 99.1  6.8   3:02.49 mysqld             
16419 mailnull  20   0  9848 3288 2664 S  2.3  0.1   1:17.63 exim               
 2085 nobody    20   0 44312  10m 3436 S  1.3  0.3   4:50.98 litespeed          
24727 nobody    20   0  320m  50m  41m S  0.3  1.7   0:06.86 lsphp5             
26314 root      20   0  2428 1104  832 S  0.3  0.0   0:00.36 top                

在我看来,mysql占用了它运行的整个CPU (99.1%)。这意味着,我们的一个核心是100%,而其他7个(7个!)闲坐在0%。

我知道,如果我们的表是InnoDB,负载将分布在内核之间。这是正确的吗?

有没有任何方法在我们的表使用MyISAM的核心之间分配工作负载?

我看错地方了吗?当资源繁重的查询占用一个CPU时,MySQL难道不能利用另一个CPU进行单独的查询吗?或者,这是否受到我们对MyISAM的使用的限制?

EN

回答 1

Server Fault用户

发布于 2013-06-14 21:23:10

您对InnoDB和分布在更多内核中的负载的理解是不正确的,但非常接近。

MyISAM表执行“基于表的锁定”,这意味着任何锁定表的查询都必然会阻塞需要获取锁的所有其他查询。

InnoDB在大多数操作中使用“基于行的锁定”,这允许其他不需要锁定准确行的查询并行地继续。

一个大型查询无论是MyISAM还是InnoDB,仍然只能使用一个核心,但是多个访问同一表的查询应该能够在不同的核心上同时执行,前提是它们不会被行级锁阻塞。

票数 3
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/515948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档