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

问题描述 投票:0回答:12

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

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

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

谢谢

mysql
12个回答
599
投票

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

例如。

SELECT SQL_NO_CACHE * FROM TABLE

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


140
投票

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

SET SESSION query_cache_type=0;

75
投票

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

SELECT *,NOW() FROM TABLE

请参阅“MySQL 查询缓存使用的先决条件和注意事项”@ http://dev.mysql.com/tech-resources/articles/mysql-query-cache.html


32
投票

还有配置选项:query_cache_size=0

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

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


25
投票

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

RESET QUERY CACHE

21
投票

有一个问题

SELECT SQL_NO_CACHE * FROM TABLE

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


15
投票

我会使用以下内容:

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

6
投票

在查询中使用用户定义的变量会使查询结果不可缓存。我发现它是一个比使用

SQL_NO_CACHE
更好的指标。但你应该把变量放在变量设置不会严重影响性能的地方:

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

4
投票

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

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

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


2
投票

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


0
投票

您必须更改 SQL 字符串。因为SQL字符串是一个缓存键。 例如,为 SQL 注释添加时间戳。

PHP 函数:

function db_RunSQL($SQL, $NoCacheMode=false)
{
$SQL = (($NoCacheMode) ? '/*'.time().'*/ ' : '') . $SQL;
return mysqli_query(db_SavedConnect(), $SQL);
}

-1
投票

要在没有缓存的情况下在 MySQL 中获得准确的查询速度测试,可以使用 SQL_NO_CACHE 关键字禁用查询缓存。方法如下:

1- 修改您的查询:在查询前添加 SQL_NO_CACHE 以防止缓存。

SELECT SQL_NO_CACHE * FROM your_table WHERE 条件;

2- 会话设置:或者,您可以禁用会话的查询缓存。

设置会话query_cache_type = OFF;

3- PHPMyAdmin:您可以直接在 PHPMyAdmin 中运行这些查询。

这些方法将帮助您更准确地测试查询速度,而不受缓存的影响。

学习免费技能

© www.soinside.com 2019 - 2024. All rights reserved.