我知道SQL查询将使用查询缓存来接收数据而不是重新处理所有数据。这是我想问的问题,
我使用数据库服务器,我是开发人员之一,我需要对我处理的查询进行性能测试
如果我清除查询缓存
使用B
或FLUSH QUERY CACHE;
,
它会影响其他开发人员,还是只会清除我的本地查询缓存?
如果它会影响其他人,有没有办法在本地清除或允许我的查询不会使用查询缓存进行测试
答案 0 :(得分:2)
开始时的两个澄清:
MySQL查询缓存是服务器端功能,没有“本地缓存”这样的东西。您可能会对LOCAL
命令中的FLUSH
关键字感到困惑。正如docs解释它只是NO_WRITE_TO_BINLOG
的别名(因此它与复制有关,而“本地”则表示“此服务器”)。
如果您启用了该功能,MySQL将仅返回缓存数据,并将其设为默认值或选择SQL_CACHE
提示。根据我的经验,大多数服务器默认没有它。
现在让我们回答你的问题。在The MySQL Query Cache,我们可以阅读:
查询缓存在会话之间共享,因此生成的结果集 可以发送一个客户端以响应另一个客户端发出的相同查询 客户端。
这是有道理的:无法重用存储数据的缓存不那么有用。
我不知道你想要准确测试什么。您的数据应始终保持新鲜:
查询缓存不会返回陈旧数据。修改表格时 刷新查询缓存中的任何相关条目。
但是,您可能想了解查询运行的时间。您随时可以选择退出the SQL_NO_CACHE
keyword:
服务器不使用查询缓存。它既不检查查询 缓存以查看结果是否已缓存,也不缓存 查询结果。
考虑到第二次运行的查询即使没有缓存也可能运行得更快,因为部分数据段可能已经加载到RAM中。
答案 1 :(得分:1)
尝试在查询中使用SQL_NO_CACHE选项。这将阻止MySQL缓存结果
SELECT SQL_NO_CACHE * FROM TABLE
答案 2 :(得分:1)
使用SQL Server缓存数据,您可以使用DBCC DROPCLEANBUFFERS并强制使用CHECKPOINT。
但它适用于服务器(实例)级别:
使用DBCC DROPCLEANBUFFERS使用冷缓冲区缓存测试查询,而无需关闭并重新启动服务器。
要从缓冲池中删除干净缓冲区,首先使用CHECKPOINT生成冷缓冲区缓存。这会强制将当前数据库的所有脏页写入磁盘并清除缓冲区。执行此操作后,您可以发出DBCC DROPCLEANBUFFERS命令以从缓冲池中删除所有缓冲区。
编辑*
SQL查询缓冲区缓存是全局的,但不是本地的。如果缓冲区或查询缓存被丢弃,它将全局删除它,并将影响使用数据库服务器的所有用户。