![缓存查询如何在 Sql Server 2008 上花费 2500 毫秒?](https://linux22.com/image/509020/%E7%BC%93%E5%AD%98%E6%9F%A5%E8%AF%A2%E5%A6%82%E4%BD%95%E5%9C%A8%20Sql%20Server%202008%20%E4%B8%8A%E8%8A%B1%E8%B4%B9%202500%20%E6%AF%AB%E7%A7%92%EF%BC%9F.png)
缓存查询怎么可能花那么长时间?清除缓存后需要 25000 毫秒(我知道这太长了,但这不是问题所在)。缓存后需要 2500 毫秒。这里可能是什么问题?如果缓存了,我假设 Sql Server 会将其从 RAM 中取出。那么,又是 2500 毫秒???
答案1
因为可能需要很长时间?
缓存意味着查询计划被缓存,而不是结果。如果缓存不是最优的,或者您只是有糟糕的索引或大量数据 - 为什么不呢?;) 我见过查询运行了几个小时 - 在计划确定之后。
现在,您指出这是在虚拟机上 - 我只能说虚拟机通常对数据库来说很糟糕。一般来说它们没有什么问题,但是当我计划一个合适的数据库服务器时,我会花时间考虑我的磁盘布局。我见过的大多数虚拟机实现 - 忽略这一点。结果:糟糕的 IO。结果:处理缓慢。
对不起,VM 并没有抽象出物理现实。
我会真正查看 VM - 分配的 RAM、CPU、磁盘 - 然后进入物理层并查看磁盘如何转换为物理磁盘。