有没有办法知道需要什么缓存大小?

时间:2010-02-08 13:10:16

标签: php sql mysql database

我使用mysql作为数据库。

是否有任何公式可用于确定缓存结果所需的缓存大小?

由于

2 个答案:

答案 0 :(得分:0)

缓存在哪里?

PHP没有缓存 - 如果没有足够的内存分配,实例将通过致命错误并停止。

MySQL中有很多缓存,默认情况下会为这些缓存分配大值。 IME可以安全地单独使用 - 请注意,为MySQL分配的任何内存意味着可用于系统I / O缓存的内存较少。

为什么你认为你需要修理一些东西?

下进行。

答案 1 :(得分:0)

这通常取决于您拥有多少备用RAM,数据库大小以及“受欢迎”数据集的数量。

(下面假设您正在讨论应用程序级缓存,而不是I / O缓存,缓冲区缓存或其他低级缓存。)

如果您要调整缓存的性能(即最大化吞吐量并最大限度地减少延迟),那么一个简单的公式就是尽可能多地使用备用RAM,这比您的数据库总大小要少。另一个简单的公式是从数据库大小的1%到10%之间开始,并根据使用情况增长。

如果你想仔细计算你需要多少缓存,那么最可靠的方法就是通过实验,即针对不断增长的缓存大小运行负载测试并绘制命中率图(如果您的数据库负载/使用特征很复杂。)

例如,您可以使用X轴为缓存大小的图形,Y轴具有命中率和查询延迟。您的目标是找到最小化命中率和最小化查询延迟的最小X(缓存大小)(这些可能是不同的点)。

为了正确执行此操作,您需要进行实际负载测试,即,如果您保留查询日志,则可以重播它们。您可能只想限制仅重放非变异查询(为简单起见)。

请注意,您可以通过向实时数据库添加缓存(从1%到10%之间开始),然后随时间观察命中率和查询延迟来简化此过程,而不是加载测试。如果您没有负载测试框架设置,这可能会更容易,但在生产系统上可能更具侵入性。如果命中率太低(或查询延迟太高),则增加缓存。如果没有,那么看看它是否缩小会产生明显的差异。

(当然,这里有边缘情况,我正在讨论,但这是一般的想法。例如,有时不同类型的查询可能有不同的成本,您可能需要为不同的查询分配不同的缓存类型。)

一旦有了缓存,就应该监控它的统计信息以及其他查询统计信息,例如延迟。您可能需要随着时间的推移而增长。

或者,您可能会发现在获得任何可靠性能之前需要先升级缓存。例如,如果您依赖缓存来提供特定的查询加载,并且您的缓存组件崩溃,冷启动,那么当缓存预热时,您的数据库将在一段时间内过载。

无论如何,简短的回答是没有简单的解决方案,并且通过实验最好地调整缓存大小。