为什么我的服务器不尝试使用更多资源进行繁重的 mysql 搜索


Why doesn't my server attempt to use more resources for a heavy mysql search?

我有一个大约 90k 行的 mysql 表。我编写了一个例程,它循环遍历这些行中的每一行,然后在另一个包含大约 90k 行的表中交叉检查结果。如果有匹配项,我会删除其中一行。我正在交叉检查的所有列都在 mysql 中做了索引。

当我在具有 2 个四通道 2.4GHz 英特尔至强、24GB 内存(php memory_limit设置为 12288m)和 SSD 的专用本地服务器上运行此脚本时,整个脚本大约需要一分钟才能完成。我会想象服务器资源正在最大化,但实际上 CPU 大约 93% 空闲,内存利用率约为 6%,我正在查看 SSD 上的读/写,就像根本没有发生太多事情一样。

向其他人提到了这个问题,他说问题是我正在执行一个单线程进程,并想知道为什么它没有使用所有 8 个处理器,但即便如此,检查 mysql 表 90k 次真的是一件大事吗?至少一个 CPU 不会最多运行吗?

为什么我的服务器在运行脚本时不尝试向脚本投入更多资源?或者,如何释放更多资源,使我的本地 Web 应用程序不像低规格的 VPS 那样运行?

根据行的大小,90K 行并不是很多。它们很可能都缓存在 RAM 中。

至于CPU,您的进程不是完全单线程的,但它非常接近。您的进程和数据库服务器都是单独的进程,问题当然是您的进程在数据库服务器处理请求时停止,因此无论您计划的进程是什么核心,都会关闭,就像数据库假脱机一样。

正如评论者所提到的,通过将大部分处理卸载到 DB 服务器,您可能可以更有效地执行此操作。大部分时间只是在向服务器发送 90K SQL 语句的语句开销中。