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

时间:2008-10-08 09:05:12

标签: mysql

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

有没有办法禁用查询的缓存?

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

由于

10 个答案:

答案 0 :(得分:491)

尝试在查询中使用SQL_NO_CACHE(MySQL 5.7)选项。 (MySQL 5.6用户点击HERE

例如

SELECT SQL_NO_CACHE * FROM TABLE

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

答案 1 :(得分:111)

另一种仅影响当前连接的替代方案:

SET SESSION query_cache_type=0;

答案 2 :(得分:53)

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

SELECT *,NOW() FROM TABLE

请参阅“http://dev.mysql.com/tech-resources/articles/mysql-query-cache.html

的”MySQL查询缓存使用的先决条件和注意事项“

答案 3 :(得分: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

答案 4 :(得分:24)

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

RESET QUERY CACHE

答案 5 :(得分:20)

的一个问题
SELECT SQL_NO_CACHE * FROM TABLE

方法似乎只是阻止查询结果被缓存。但是,如果您要查询正在与要测试的查询一起使用的数据库,则其他客户端可能会缓存您的查询,从而影响您的结果。我正在继续研究解决这个问题的方法,如果我找到一个,我会编辑这篇文章。

答案 6 :(得分:13)

我会使用以下内容:

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

答案 7 :(得分:3)

在查询中使用用户定义的变量会使查询无法缓存。我发现它比使用SQL_NO_CACHE更好的指标。但是你应该把变量放在变量设置不会严重影响性能的地方:

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

答案 8 :(得分:2)

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

答案 9 :(得分:0)

虽然一些答案很好,但有一个重要警告。

可能会阻止mysql查询被缓存,但不会阻止您的底层操作系统将磁盘访问缓存到内存中。对于某些查询而言,这可能是一个严重的减慢,尤其是当它们需要从旋转磁盘中提取数据时。

尽管使用上述方法很好,但我每次也会尝试使用不同的数据集/范围进行测试,这很可能不会从磁盘拉到磁盘/内存缓存中。