我正在测试MySQL中某些查询的速度。数据库正在缓存这些查询,这使我很难在测试这些查询的速度时获得可靠的结果。

是否可以禁用查询的缓存?

系统:Linux虚拟主机上的MySQL 4,我可以访问PHPMyAdmin。

感谢

#1 楼

尝试在查询中使用SQL_NO_CACHE(MySQL 5.7)选项。
(MySQL 5.6用户单击此处)

例如。

SELECT SQL_NO_CACHE * FROM TABLE


这将停止MySQL缓存结果,但是请注意,其他操作系统和磁盘缓存也可能会影响性能。这些很难解决。

评论


文献资料

–萨尔曼·冯·阿巴斯
11-10-23在20:38

关于mysql查询缓存的一篇不错的文章。如何设置并查看运行中的缓存!值得一读。 databasejournal.com/features/mysql/article.php/3110171/…

– Adrian P.
2014年2月20日在18:03

在尝试提高性能之前,请尝试重新启动mysql服务器。可能某些过程正在影响一切。它发生在我身上。尽管此评论与问题没有直接关系,但可以为许多人提供帮助。

–德拉萨维亚
2014-12-09 16:15



这可以阻止它缓存结果,但是也可以阻止它使用缓存吗?

–布雷特
15年3月18日在15:53



@Brett看到SalmanPK在11年前的评论方式。该文档页面实际上是4个句子,可直接回答您的问题。如果将来要删除该页面:“它既不检查查询缓存以查看结果是否已经缓存,也不缓存查询结果。”

–莫里斯
15年7月15日在19:02



#2 楼

另一个仅影响当前连接的替代方法:

SET SESSION query_cache_type=0;


评论


我的错。我正在查看的是query_cache_size,而不是query_cache_type。我混淆了您和SeniorDev的答案。

–迈克
13年4月23日在3:55

#3 楼

对当前日期/时间的任何引用将禁用该选择的查询缓存:

.mysql.com / tech-resources / articles / mysql-query-cache.html

#4 楼

还有一个配置选项:query_cache_size = 0


要在服务器启动时禁用查询缓存,请将query_cache_size系统变量设置为0。通过禁用查询缓存代码,没有明显的开销。如果从源代码构建MySQL,则可以通过使用--without-query-cache选项调用configure来完全从服务器中排除查询缓存功能。请参见http:// dev。 mysql.com/doc/refman/5.1/zh-CN/query-cache.html

#5 楼

您还可以运行follow命令重置查询缓存。

评论


可能这是矫over过正...理想情况下,您只希望MySQL暂时忽略缓存。

–BMiner
2011年9月21日在16:24

您还需要特殊权限。

–埃里克·罗伯逊(Erick Robertson)
2014年2月3日,18:55

#6 楼



SELECT SQL_NO_CACHE * FROM TABLE


方法的一个问题是,它似乎只能阻止查询的结果被缓存。但是,如果要查询正在与要测试的查询一起使用的数据库,则其他客户端可能会缓存您的查询,从而影响您的结果。我正在继续研究此问题的方法,如果发现一个问题,将对其进行编辑。

评论


但是,如果您的缓存被其他人填满了,您会感到速度很快。但有时不是。

– karatedog
2015年9月4日在9:38

#7 楼

我会使用以下内容:

SHOW VARIABLES LIKE 'query_cache_type';
SET SESSION query_cache_type = OFF;
SHOW VARIABLES LIKE 'query_cache_type';


#8 楼

在查询中使用用户定义的变量会使查询的结果不可缓存。我发现它比使用SQL_NO_CACHE更好。但是您应该将变量放置在变量设置不会严重影响性能的地方:

SELECT t.*
FROM thetable t, (SELECT @a:=NULL) as init;


评论


“我发现它是比使用SQL_NO_CACHE更好的指标。”为何如此?似乎您需要一个非常有力的案例来对显式关键字使用晦涩的破解,除非显式关键字没有按照其要求进行操作。

–Air
2014年6月2日15:53

@Air我发现此解决方案也比SQL_NO_CACHE更好地工作。 SQL_NO_CACHE第一次运行该查询,但是此后它不再起作用。我假设这是由于其他缓存机制引起的。我认为这样做效果更好,因为依赖于变量的搜索不能被任何层或机制缓存-至少,这是我的最佳猜测。

– Klik
15年4月16日在13:36

#9 楼

如果要禁用查询缓存,请在mysql配置文件中将'query_cache_size'设置为0。如果将其设置为0,则mysql将不使用查询缓存。

#10 楼

虽然某些答案是好的,但有一个主要警告。
可以防止mysql查询被缓存,但是它不会阻止您的底层OS将磁盘访问磁盘缓存到内存中。对于某些查询而言,这可能是一个严重的减慢,尤其是当它们需要从旋转磁盘中提取数据时。 ,很可能不会将其从磁盘拉到磁盘/内存缓存中。