mysql - 缓存总是能提高性能吗?

标签 mysql performance caching webserver mediawiki

我有许多站点使用PHPMySQL,尤其是运行MediaWiki,我需要提高性能。但是,我只能使用有限百分比的 CPU。

我能想到的提高性能的最佳方法是启用缓存。但是,我很困惑:这是否真的提高了整体性能或只是提高了速度?

我能想到的是,如果缓存会用到文件,那么获取这些文件的内容就需要更多的处理。如果会使用SQL表,那么查询这些表也会花费更多的处理,也许时间会更短,但CPU使用率会更高。

这对不对?缓存会消耗更多 CPU 以提供更快的结果还是提高整体性能?

最佳答案

在最基本的层面上,应该使用缓存来存储 CPU 密集型进程的结果。例如,如果您有一个服务器端图像处理程序可以即时创建图像(例如缩略图和更大的预览),那么您不希望在每次请求时都发生此操作 - 您希望运行此过程一次并存储结果;然后,每个其他请求都会获得保存的结果。

这显然是对基本缓存的极其简化的描述,在这种情况下使用图像很好,因为您不必担心过时的数据,即实际图像多久更改一次?在您的情况下,数据库有很大的不同。如果缓存数据,那么如何保证真实数据和缓存数据之间不会立即出现不匹配?查询数据库并不总是 CPU 密集型任务(假设您必须考虑数据库在索引、表大小等方面的设计方式),但在大多数情况下,查询设计良好的数据库在磁盘 I/O 上的密集程度远高于它在 CPU 周期上。

首先,您需要查看您的数据库设计,其次是您的查询。例如你是normalizing your database correctly ,您的查询是否在您可以存档的情况下拖网搜索大量数据,您是否在非索引字段上连接表,您的 where 子句查询字段是否可以被索引(IN 在这些中特别糟糕个案)。

我建议您获取 query analyzer并花一些时间优化您的表结构和查询以找到瓶颈,然后再进行更剧烈的更改。

关于mysql - 缓存总是能提高性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12618016/

相关文章:

mysql - 从表中选择相等或最接近的较大数字?

iOS 模拟器 CPU 负载

performance - ffmpeg 一图视频转换速度更快

linux - 确定进程花费时间等待的系统调用或子系统

caching - JBossCache evict() 与 removeNode()

http - Golang 检测飞行中的请求

mysql - SQL获取字段中间的字符

javascript - 如何在页面加载时使用 mysql 查询结果设置单选按钮值后触发 javascript 函数

java - Hibernate不保存对象

caching - 仅使用 RxJS 操作符缓存 Http 请求