gpt4 book ai didi

sql - mysql 第一次查询慢,然后相关查询快

转载 作者:IT老高 更新时间:2023-10-29 00:07:52 34 4
gpt4 key购买 nike

我一直在努力解决一个问题,该问题仅在数据库为查询的数据空闲一段时间时才会发生。第一个查询将非常慢,大约 30 秒,然后相关查询将像 0.1 秒一样快。我假设这与缓存有关,但我一直无法找到它的原因。

将 mysql 变量 tmp_table_size、max_heap_table_size 更改为更大的大小除了在内存中创建临时表之外没有任何效果。

我认为这与查询本身无关,因为它已被很好地索引,并且在第一次慢查询之后,同一查询的变体不会出现在慢查询日志中。我最感兴趣的是尝试确定导致此问题的原因或重置有问题的缓存的方法,以便解决问题。

最佳答案

innodb 数据文件的页面缓存在 innodb 缓冲池中。这是你所期望的。读取文件速度很慢,即使在良好的硬盘驱动器上也是如此,尤其是随机读取,这主要是数据库看到的。

可能是您的第一个查询正在执行某种表扫描,这会将大量页面拉入缓冲池,然后访问它们会很快。或类似的东西。

这是我所期望的。

理想情况下,对所有表使用相同的引擎(异常(exception):系统表、临时表(可能)和非常小的表或短期的表)。如果您不这样做,那么他们必须为 ram 而战。

假设你所有的表都是 innodb,让缓冲池使用服务器物理内存的 75%(假设你没有在机器上运行太多其他任务)。

然后您将能够将大约 12G 的数据库放入 ram,因此一旦“预热”,您的数据库“最常用”的 12G 将在 ram 中,在那里访问它既好又快。

一些 mysql 用户倾向于在重新启动后通过向他们发送从另一台机器复制的查询一段时间(这些将是复制从属服务器)来“预热”生产服务器,直到他们将它们添加到他们的生产池中。这避免了缓存冷时出现的极度缓慢。例如,Youtube 会这样做(或者至少以前是这样做的;谷歌收购了他们,他们现在可能会使用 Google-fu)

关于sql - mysql 第一次查询慢,然后相关查询快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1786870/

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