gpt4 book ai didi

mysql - 刷新 InnoDB 缓存

转载 作者:可可西里 更新时间:2023-11-01 06:49:12 26 4
gpt4 key购买 nike

我有一些很少运行的报告查询,我需要在不依赖于将它们缓存在系统中的任何位置的情况下提高性能。在测试各种模式和存储过程更改时,我通常会看到第一次运行非常慢而后续运行很快,所以我知道有一些缓存正在进行,这使得测试更改变得很麻烦。重新启动 mysqld 或运行其他几个大型查询是重现它的唯一可靠方法。我想知道是否有更好的方法。

MySQL 查询缓存已关闭。

监控磁盘,除了第一次运行,我没有看到任何读取发生。我不太熟悉磁盘缓存,但我希望如果那是缓存发生的地方,我仍然会看到磁盘读取,它们会非常快。

MONyog 给了我我认为是决定性的证据,即 InnoDB 缓存命中率。监控它,我发现当查询速度快时,它会访问 InnoDB 缓冲区,当查询速度慢时,它会访问磁盘。

在实时系统上,我很乐意让 InnoDB 这样做,但出于开发和测试目的,我对最坏的情况感兴趣。

我在 Windows Server 2008R2 上使用 MySQL 5.5

最佳答案

我找到了 a post on the Percona blog上面写着:

For MySQL Caches you can restart MySQL and this is the only way to clean all of the caches. You can do FLUSH TABLES to clean MySQL table cache (but not Innodb table meta data) or you can do “set global key_buffer_size=0; set global key_buffer_size=DEFAULT” to zero out key buffer but there is no way to clean Innodb Buffer Pool without restart.

在评论中他接着说:

Practically everything has caches. To do real profiling you need to profile real query mix which will have each query having appropriate cache/hit ratio not running one query in the loop and assuming results will be fine.

我想这就是总结。它确实使测试单个查询变得困难。我的情况是,我想尝试强制使用不同的索引以确保查询规划器选择了正确的索引,显然我必须在测试之间重新启动 MySQL 才能将缓存排除在外!

关于mysql - 刷新 InnoDB 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7373399/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com