Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-强制不使用缓存来测试查询速度_Mysql - Fatal编程技术网

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

MySQL-强制不使用缓存来测试查询速度,mysql,Mysql,我正在测试MySQL中一些查询的速度。数据库正在缓存这些查询,这使得我在测试这些查询的速度时很难获得可靠的结果 有没有办法禁用查询缓存 系统:MySQL 4在Linux网络主机上,我有权访问PHPMyAdmin 谢谢请尝试在查询中使用(MySQL 5.7)选项。 (MySQL 5.6用户点击) 例如 这将停止MySQL缓存结果,但是请注意,其他操作系统和磁盘缓存也可能会影响性能。这些问题很难解决。您还可以运行follow命令来重置查询缓存 RESET QUERY CACHE 如果要禁用查询缓存

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

有没有办法禁用查询缓存

系统:MySQL 4在Linux网络主机上,我有权访问PHPMyAdmin

谢谢

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

例如


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

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

RESET QUERY CACHE

如果要禁用查询缓存,请在mysql配置文件中将“查询缓存大小”设置为0。如果设置为0,mysql将不使用查询缓存。

数据库有一个问题

RESET QUERY CACHE
SELECT SQL_NO_CACHE * FROM TABLE

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

还有一个配置选项:query\u cache\u size=0

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


请参见

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

SELECT *,NOW() FROM TABLE

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

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

SET SESSION query_cache_type=0;

在查询中使用用户定义的变量会使查询无法继续。我发现它比使用
SQL\u NO\u缓存
要好得多。但应将变量放置在变量设置不会严重影响性能的位置:

SELECT t.*
FROM thetable t, (SELECT @a:=NULL) as init;
我会使用以下方法:

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

虽然有些答案是好的,但有一个主要的警告

mysql查询可能会被阻止缓存,但它不会阻止底层O.S缓存磁盘访问内存。对于某些查询来说,这可能是一个严重的减速,尤其是当它们需要从旋转的磁盘中提取数据时


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

这可能是过度使用了。。。理想情况下,您只希望MySQL暂时忽略缓存。您还需要对此具有特殊权限。这是一篇关于MySQL查询缓存的好文章。如何设置和查看正在运行的缓存!值得一读。在尝试提高性能之前,请尝试重新启动mysql服务器。可能是某些过程影响着一切。这事发生在我身上。虽然这是一条与问题没有直接联系的评论,但它可以帮助很多人。这会阻止它缓存结果,但也会阻止它使用缓存吗?@Brett早在'11年就看到了SalmanPK的评论。该文档页面由4个句子组成,直接回答您的问题。如果将来删除该页面:“它既不检查查询缓存以查看结果是否已缓存,也不缓存查询结果。”我的问题是。我看到的是
query\u cache\u size
而不是
query\u cache\u type
。我把你的答案和SeniorDev的答案搞混了。“我发现它比使用
SQL\u NO\u缓存
要好得多”怎么回事?看来,在显式关键字上使用晦涩的黑客攻击需要一个非常有力的理由,除非显式关键字没有达到它所声称的效果。@Air我发现这个解决方案也比SQL\u NO\u缓存工作得更好。SQL\u NO\u缓存在第一次运行查询时起作用,但之后就不再起作用了。我假设这是由于其他缓存机制造成的。我认为这样做效果更好,因为依赖变量的搜索不能被任何层或机制缓存——至少,这是我最好的猜测。但是如果你的缓存被其他人填满,你会得到快速的错觉。但有时并非如此。