我阅读了 Brent Ozar 发表的一篇很棒的文章,并提出了一些与内存授予相关的问题。我无法在他文章的评论部分解决我的问题,所以我想从这里获得任何帮助。
- 问题:有多少数据溢出到磁盘中? 400 MB还是60 MB (7643KB*8)?
他在文章中说:
而且无论我更新多少次统计数据,我仍然会得到大约400MB的磁盘溢出。
我在这里有点困惑(
- 问题:如果估计一切正常,统计数据是最新的,盒子有足够的内存,并且当时没有运行任何查询,那么为什么会发生溢出到磁盘?
查看估计的行数与实际的行数。它们是相同的。统计数据很好。
我也没有使用小型服务器:我的虚拟机有 32GB 内存,我已将其中的 28GB 分配给 SQL Server。没有其他查询同时运行——它只是一个孤独的查询,溢出到磁盘......
如工具提示所示,溢出了 7643 个 8KB 页面 = 59.71MB。其余的排序发生在分配的内存中。
排序溢出有两个原因:
在 SQL Server 2019 上,可以通过行模式内存授予反馈机制自动调整执行之间授予的内存以避免溢出。
60MB。您可以通过转储来验证这一点
查询前后
行大小是一个估计值,内存需要在并行扫描线程之间分配,其中任何一个都可能需要溢出。