Mysql 缓存是否总能提高性能?

Mysql 缓存是否总能提高性能?,mysql,performance,caching,webserver,mediawiki,Mysql,Performance,Caching,Webserver,Mediawiki,我有许多网站使用PHP和MySQL,尤其是运行MediaWiki,我需要提高性能。然而,我只允许使用有限百分比的CPU 我能想到的提高性能的最好办法是启用缓存。然而,我感到困惑:这真的提高了整体性能还是仅仅提高了速度 我能想到的是,如果缓存将使用文件,那么获取这些文件的内容将需要更多的处理。如果它将使用SQL表,那么查询这些表也将需要更多的处理,也许时间会更短,但CPU使用率会更高 对不对?缓存是否会消耗更多的CPU来提供speeder结果,还是会提高总体性能?您需要分析您的内存,并找出瓶颈在哪

我有许多网站使用
PHP
MySQL
,尤其是运行MediaWiki,我需要提高性能。然而,我只允许使用有限百分比的CPU

我能想到的提高性能的最好办法是启用缓存。然而,我感到困惑:这真的提高了整体性能还是仅仅提高了速度

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


对不对?缓存是否会消耗更多的CPU来提供speeder结果,还是会提高总体性能?

您需要分析您的内存,并找出瓶颈在哪里发生。缓存是最好的页面加载类型,它根本不会影响服务器。您可以构建一个非常简单的缓存系统,每次只需15分钟就可以重新加载信息。因此,如果在过去15分钟内缓存了该页面,则会为它们提供一个预呈现页面。一旦加载页面,它就会创建一个临时文件。每15分钟创建一个新的(如果有人加载该页面)

缓存仅存储服务器已完成工作的文件。创建文件的工作已经完成,您只需存储即可。

参考:

性能:缓存技术通常用于通过尽可能靠近数据使用者存储相关数据来提高应用程序性能,从而避免重复的数据创建、处理和传输。 例如,在缓存中存储不变的数据(例如国家列表)可以通过最小化数据访问操作和消除为每个请求重新创建相同数据的需要来提高性能

可伸缩性:应用程序中的许多用户和流程通常需要相同的数据、业务功能和用户界面片段。如果为每个请求处理此信息,则会浪费宝贵的资源来重新创建相同的输出。相反,您可以将结果存储在缓存中,并对每个请求重用它们。这提高了应用程序的可伸缩性,因为随着用户群的增加,这些任务对服务器资源的需求保持不变。 例如,在Web应用程序中,需要Web服务器为每个用户请求呈现用户界面。您可以将呈现的页面缓存在ASP.NET输出缓存中,以用于将来的请求,从而释放用于其他目的的资源

缓存数据还可以帮助扩展数据库服务器的资源。通过将经常使用的数据存储在缓存中,可以减少数据库请求,这意味着可以为更多用户提供服务

可用性:有时向应用程序提供信息的服务可能不可用。通过将这些数据存储在另一个地方,您的应用程序可能能够在系统故障(如网络延迟、Web服务问题或硬件故障)下生存。
例如,每次用户从您的数据存储请求信息时,您都可以返回信息并缓存结果,并在每次请求时更新缓存。如果数据存储变得不可用,您仍然可以使用缓存的数据为请求提供服务,直到数据存储恢复联机。

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

这显然是对基本缓存的过度简化的描述,在这种情况下使用映像是很好的,因为您不必担心过时的数据,即实际映像的更改频率?在您的情况下,数据库是非常不同的。如果缓存数据,那么如何保证真实数据与缓存的数据之间不会出现即时不匹配?查询数据库并不总是一个CPU密集型任务(当然,您必须考虑数据库是如何根据索引、表大小等来设计的),但在大多数情况下,查询一个设计良好的数据库在磁盘I/O上比CPU周期要密集得多。 首先,您需要查看数据库设计,其次是查询。例如,当您可以归档时,您的查询是否会拖网浏览大量数据,您是否会在非索引字段上连接表,您的where子句是否会查询可以索引的字段(中的
在这些情况下尤其糟糕)


我建议您在进行更剧烈的更改之前,先找到一个表结构和查询,并花一些时间优化表结构和查询,以找到瓶颈。

您使用的术语是“性能”和“速度”。我假设“性能”与web服务器上的CPU周期有关,“速度”与向用户提供页面所需的时间有关。您希望最大化web服务器的“性能”(通过降低服务页面所需的CPU周期总数),同时最大化“速度”(降低服务web页面所需的时间)

好消息是缓存可以同时提高这两个指标。通过缓存内容,您可以创建一个输出页面,该页面存储在缓存中,可以直接重复提供给用户,而无需重新执行最初创建该输出页面的PHP代码(从而降低CPU周期)。从缓存中获取缓存页面比重新执行PHP代码消耗更少的CPU周期

缓存对于所有请求页面进行检查的用户来说都是一样的网页特别好