Sra*_*nda 3 tempdb sql-server-2019
我有以下问题,我的 TempDB 知识还没有涵盖这一点:
服务器、数据库和数据库流量的配置:
除了明显努力找到根本原因并永久解决它之外,我的主要问题是:
任何相关学习资源/建议的指针将不胜感激
编辑:为了回答约翰的评论,我想添加以下内容:
ManualPanelEntries:6933089 条记录,1221 MB 数据,2591 MB 索引 - 事实上,索引比数据本身消耗更多空间
权重:3108486条记录,178MB数据,170MB索引
============
写完这篇文章后我发现,头阻止程序(许多并行的相同 SELECT 之一)也在等待 GAM,即特定 tempdb 文件的第二页。就好像其他东西(版本存储?)在特定的 GAM 页面上持有锁定,阻止使用 TempDB 的其他查询继续进行。
减少 SQL Server tempdb 数据库中的分配争用的建议中的文档涵盖了问题的核心。您正在运行 SQL Server 2019,这意味着您将在 GAM 页面而不是 SGAM 上看到争用。
您的排序和散列操作可能不会溢出(尽管屏幕截图中的几个查询确实显示了写入),但 SQL Server 仍然必须分配结构(工作文件和工作表)来支持排序和散列,其中一些是必需的,以防出现运行时溢出。如果您足够快地执行足够多的这些操作,您可以看到 GAM 页锁存争用。
锁存器等待通常很短,但有可能遇到锁存器队列,有时会导致(很)长的等待。
如上面链接的文档中所述,主要解决方案是将文件添加到tempdb,直到争用消失或降低到可接受的水平。
可能与此处的具体问题无关,您还可以选择在 SQL Server 2019 中为tempdb启用内存优化元数据。该选项并非没有缺点,并且存在一些错误。
SQL Server 2022 引入了并发GAM 和 SGAM 更新,这用(共享)UP
闩锁取代了(更新)SH
闩锁。这大大减少了此类问题的范围。