MySQL-强制不使用缓存来测试查询速度


343

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

有没有一种方法可以禁用查询的缓存?

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

谢谢

mysql 

Answers:


527

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

例如。

SELECT SQL_NO_CACHE * FROM TABLE

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



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

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

2
这会阻止它缓存结果,但是还会阻止它使用缓存吗?
Brett 2015年

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

121

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

SET SESSION query_cache_type=0;

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


30

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

要在服务器启动时禁用查询缓存,请将query_cache_size系统变量设置为0。通过禁用查询缓存代码,不会有明显的开销。如果您从源代码构建MySQL,则可以通过使用--without-query-cache选项调用configure来将查询缓存功能完全从服务器中排除。

参见http://dev.mysql.com/doc/refman/5.1/en/query-cache.html


24

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

RESET QUERY CACHE

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

3
您还需要特殊权限。
艾里克·罗伯森

19

一个问题

SELECT SQL_NO_CACHE * FROM TABLE

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


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


3

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

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

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

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

2

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.