我正在使用 Mysql Server 5.6.15,并且我有一个包含许多复杂查询的庞大数据库。
看来,当我第一次运行查询时,它花费了X时间。
当我再次执行它时,它花费的时间少于 X 时间。这意味着某些内容已被缓存。
我希望能够对我的查询进行性能测试,以便在不考虑缓存的情况下改进它们。
有没有办法禁用 mysql 中的所有缓存类型,以便我正确测试查询的执行时间?
任何与该问题相关的信息都将不胜感激。
答案1
您真正想要的是查询缓存未命中率接近 100%。我想我找到了想要的结果。2011 年 7 月 9 日,我在 DBA StackExchange 中回答了此帖子:测试查询速度。
以下是答案:
您可能需要施加压力测试环境以使查询结果尽可能实时。例如,MyISAM Key Buffer(大小由key_buffer_size决定)默认为8MB,最小值为8(没错,8个字节)。它负责保存 .MYI 文件中的索引页。将此值设置为 8,则 MyISAM 中的每个键控查找都必须一遍又一遍地读取。
原则上这也适用于 InnoDB。默认的 InnoDB 缓冲池大小(由 innodb_buffer_pool_size 控制)为 128MB,最小为 1MB(在 MySQL 5.5 中)。它负责保存来自 .ibd 和/或 ibdata1 文件的数据和索引页。将此值设置为 1M,InnoDB 中的每个键查找(始终包括在聚集行索引中的额外查找(gen_clust_index))必须反复阅读。
为了增加压力,将 query_cache_type 设置为 0 以强制不缓存查询。
只需将这三个 (3) 个最小值添加到 /etc/my.cnf 中即可
[mysqld] innodb_buffer_pool_size=1M key_buffer_size=8 query_cache_type=0
并重新启动 MySQL。
这样做应该会使所有查询每次都达到其最低最佳(或最差)性能。
试一试 !!!
好吧,别只是坐在那里盯着显示器……