我有一台 CPU 能力非常强大的服务器。
我的 CPU 空闲率约为 95%,IO 等待率为 0.2%。如何利用更多 CPU 来获得更快的整体数据库?我是否应该将一些 MyISAM 表切换为 InnoDB?
答案1
我怀疑你正在触及表锁,因为你的 CPU 和 iowait 都很低。
InnoDB 可能会有帮助,但最终最好还是修复在其上运行的应用程序。
您应该获得有关已请求的锁数、立即授予的锁数等的统计数据 - 这应该可以确认这是否确实是问题所在。
另一种检查方法是定期从 mysql 中提取进程列表。您很快就会发现一种模式(例如,所有查询都在等待,使用“foo”表)。阻塞其他查询的活动查询是开始优化软件的好地方;该表是考虑转换为 InnoDB 的好地方。
答案2
如果您的数据库足够小,则增加缓存的大小,以便将整个数据库存储在内存中。假设您的查询都经过优化,并且索引位于正确的位置,那么您无法让您的数据库比这更快。
磁盘访问实际上并不是一项 CPU 密集型任务。CPU 说“开始”并等待答案。I/O 控制器和磁盘完成所有工作。不要指望磁盘访问会占用 CPU 的红线。
答案3
您可以尝试使用 racker hacker 的 mysql tuner。