首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免mysql缓存

如何避免mysql缓存
EN

Stack Overflow用户
提问于 2009-11-12 23:51:18
回答 4查看 1.1K关注 0票数 3

我有一个包含几百万条记录的表。在生产过程中,我们发现有一种特定类型的查询需要几秒钟才能完成。

当我尝试在复制了生产数据的机器上重现该问题时,我在mysql客户端中运行了准确的查询(从缓慢的查询日志中获得),正如预期的那样,这需要几秒钟时间。如果我随后按up和enter重复该操作,则需要0.01秒。

我查阅了文档以了解如何关闭缓存,以便能够一致地重现该问题,并希望测试添加索引是否会有所帮助。

这是我尝试过的:

重置查询缓存;刷新表;

但是,在执行完上述命令之后,再次运行相同的查询仍然只需要0.01秒。

我一定漏掉了什么。有什么想法吗?

EN

回答 4

Stack Overflow用户

发布于 2009-11-12 23:56:31

您可以通过在查询中包含SQL_NO_CACHE来告诉服务器不要将结果放在查询缓存中:

代码语言:javascript
复制
SELECT SQL_NO_CACHE id, name FROM customer;

除了查询缓存之外,MySQL中还有更多的东西在加速,它缓存了关于表和索引的其他信息,以加快未来的查询速度。查询的第一次执行也将预热操作系统文件缓存。

您真正需要做的是对查询执行EXPLAIN操作,并查看数据库引擎需要分析的行数。通过探索它是如何使用(或不使用)表索引的,您将更好地了解哪些索引可能丢失,或者是构造查询的替代方法。

票数 4
EN

Stack Overflow用户

发布于 2009-11-12 23:54:09

一旦将表加载到内存中,查询所需的时间就会大大减少。如果production机器每次运行查询都需要很长时间,我就会开始查看内存使用情况。如果你发现你的生产机器交换了很多,我会考虑升级它的RAM。

票数 0
EN

Stack Overflow用户

发布于 2009-11-12 23:55:07

have_query_cache服务器系统变量指示查询缓存是否可用:

代码语言:javascript
复制
mysql> SHOW VARIABLES LIKE 'have_query_cache';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| have_query_cache | YES   |
+------------------+-------+

使用标准MySQL二进制文件时,即使禁用了查询缓存,此值也始终为YES。

其他几个系统变量控制查询缓存操作。这些设置可以在选项文件中设置,也可以在启动mysqld时在命令行上设置。查询缓存系统变量的名称都以query_cache_开头。在5.1.3节“服务器系统变量”中对它们进行了简要描述,并在此处给出了其他配置信息。

http://dev.mysql.com/doc/refman/5.0/en/query-cache-configuration.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1723227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档