我们知道内存I/O比磁盘I/O要快,数据库利用cache机制来提高性能,看上去好像没有CPU开销的事情。
我的意思是,通常 CPU 足够快,不会成为使用 Berkeley DB 等小型本地数据库的性能瓶颈。相对较快的 CPU 不会提高此类数据库的性能。
我的问题是,我的上面的假设是否正确。
我确实做了一些简单的测试,但结果与我的假设相反,让我感到困惑。
例如,我做了一个测试,进行 100,000 次写入/读取数据库操作,并且在每个写入操作之前都放置了一个小 FOR 循环以增加一些 CPU 开销。我期望 FOR 循环不会影响程序的总运行时间。但结果却恰恰相反。额外的运行时间与 FOR 循环单独占用的时间完全相同。
这是否意味着当 CPU 将数据写入内存时,它只是暂停等待操作完成,无论 CPU 本身的速度有多快?
PS:抱歉我的英文表达不太准确,我已经尽力了……
答案1
是的,数据库操作通常必须先写入磁盘,然后才能返回成功。这是一件非常好的事情,因为程序不应该在知道操作是否正确完成之前继续。如果您将测试程序并行化,您可能会发现循环对运行时的影响较小,因为循环可以在其他线程等待其 IO 操作完成时运行。
此外,虽然现代 CPU 最不可能成为数据库的瓶颈,但这通常并非事实:根据您的应用程序及其数据库查询,它们可能会对 CPU 造成极大的负担,导致磁盘子系统在 CPU 以 100% 运行时处于空闲状态。