我在其中一台服务器(SQL Server 2008 R2)上存在 tempdb 争用(我猜,至少)。
拦截器和服务员(其中 10 个)在数据库 tempdb 上都有 PAGELATCH_EX 等待类型,并且所有会话(拦截器和服务员)的 waitresource 都是“2:1:122”。
我检查了 SQL 代码,发现在大多数会话中都创建了表变量,我怀疑这可能是罪魁祸首。
任何有关如何进一步诊断和缓解此问题的建议表示赞赏。
我在其中一台服务器(SQL Server 2008 R2)上存在 tempdb 争用(我猜,至少)。
拦截器和服务员(其中 10 个)在数据库 tempdb 上都有 PAGELATCH_EX 等待类型,并且所有会话(拦截器和服务员)的 waitresource 都是“2:1:122”。
我检查了 SQL 代码,发现在大多数会话中都创建了表变量,我怀疑这可能是罪魁祸首。
任何有关如何进一步诊断和缓解此问题的建议表示赞赏。
PAGELATCH_XX - 这表示 SQL 正在等待访问数据库页面,但该页面没有进行物理 IO。此类问题是由大量 spid 试图同时访问同一个物理页引起的。wait_resource 是正在访问的页码(格式为 dbid:file:pageno)。如果在实时服务器上进行诊断,性能仪表板报告将运行 DBCC PAGE 并显示输出以告诉您争用的页面对象和类型(分配、数据、文本......)
由于 SQL 最常等待的页面位于 tempdb 数据库中(dbid 中的页码为 2),因此您可能面临 tempdb 分配锁存器争用。
Tempdb 分配页面锁存器争用可能发生在每秒数百或数千次创建和销毁临时对象(包括用于排序或散列操作的工作表/工作文件)的工作负载中。
解析度 -
1.实现跟踪标志-T1118。
2.增加 tempdb 中的数据文件数量,以最大限度地提高磁盘带宽并减少分配结构中的争用。作为一般规则,如果逻辑处理器的数量小于或等于 8,则使用与逻辑处理器相同数量的数据文件。如果逻辑处理器的数量大于 8,则使用 8 个数据文件,然后如果争用继续,则将数据文件的数量增加 4 的倍数(直到逻辑处理器的数量),直到争用减少到可接受的水平或使更改工作负载/代码。