当前位置: 首页 > article >正文

SQL Server tempdb 闩锁争用

当你反复创建和删除 TempDb 对象(临时表、表变量等)时,你可能会在 tempdb 中看到页面的闩锁争用。当你注意到tempdb 上的 PAGELATCH_* 争用(sysprocesses 中的等待资源以 2: 开头)时,请检查闩锁等待是否在 PFS、GAM 或 SGAM 页面上。当 tempdb 上存在闩锁争用时,你将看到许多会话在PAGELATCH_* 上等待,类似如下等等。

Wait type                Wait resource

PAGELATCH_UP       2:15:121320

PAGELATCH_UP       2:15:121320

上面的会话正在等待资源2:15:121320,数据库id为2,即tempdb,文件号为15,页码为121320。121320 是 8088 的倍数,所以它是一个 PFS 页面,如果不是 PFS 页面,我们也可以识别正在等待的页面是 GAM 还是 SGAM 页面。

如何识别页面是 PFS、GAM、IAM

PFS 页面:一个 PFS 页面在 8088 个页面中出现一次。SQL Server 将尝试在每个 PFS 间隔 (8088页) 的第一页上放置一个 PFS 页。文件头部页在第一个,PFS 页在其后。(页面 ID 从 0 开始,因此第一个 PFS 页面位于页面 ID 1)。如果(page number)/8088 是整数值,则该页为 PFS 页面。

GAM 页面: GAM页面是数据文件中的第 2 页,下一个 GAM 页面放置在第一个 GAM 页面之后的 511230 页(GAM 间隔)。如果 (page number-1)/511230 是整数值,那么页面就是 GAM 页面。

SGAM页面: SGAM 页面是数据文件中的第 3 页,下一个 SGAM 页面放置在第一个 SGAM 页面之后的 511230 Page 处。如果 (pagenumber-2)/511230 是整数,则该页面是 GAM 页面。

何解决闩锁争用?

  • 增加 TEMPDB 数据文件文件的数量,大小均等。这也有通用规则,如果逻辑处理器的数量小于或等于 8,则应使用与逻辑处理器相同数量的数据文件。如果逻辑处理器的数量大于 8,则使用 8 个数据文件。如果争用仍然存在,则将数据文件的数量进一步增加 4 的倍数,不过一旦达到 32 个文件,就可能没什么效果了。 

  • 启用服务器端跟踪标志 1118。跟踪标志 1118 用于启用对象的专用扩展区分配,而不是从混合扩展区分配页面。

  • 如果你在执行上述两个步骤后在 PFS 页面上还能看到闩锁争用,那么唯一的选择是修改你的代码以限制 tempdb 的使用。

  • 如果你在 2:1:103 看到争用(第 103 页用于系统表 sys.sysmultiobjrefs。该表管理每个数据库中创建的对象之间的关系)。减少此页面上的争用的唯一方法是减少关系。使用主键创建大量临时表的示例可能会导致这种争用,因为表和主键约束之间的关系必须在 sys.sysmultiobjrefs 中更新。

最佳实践是什么?

  1. 创建多个 tempdb 数据文件,而不是创建 1 个大文件,并在所有 SQL Server 实例中均等地调整它们的大小。

  2. 默认设置TF1118。

     


http://www.kler.cn/a/14375.html

相关文章:

  • freeswitch的任务引擎问题与解决方案
  • “王炸”组合竞逐「行泊一体」
  • UDS的0x19服务介绍
  • 本地配置nacos例子
  • 掌握Python属性控制的关键:深入了解@property装饰器
  • 楔形文字的破解(钉子形文字)【文字破译原理:信息的相关性】
  • C++11 关键字 =default 和 =delete
  • JS类的学习
  • 机器视觉工程师买车就买“宝马”车-德国制造-世界精工
  • 成就客户 | 企业如何培养“数据文化”?Smartbi教你3个步骤
  • JSP公司办公信息管理系统(源代码+论文)
  • 【Go】四、面向对象
  • ROS学习第二十六节——机器人仿真相关组件
  • OSCP-Slort(远程文件包含、windows定时任务提权)
  • 【c语言】带你快速理解函数的传值和传址
  • 代码随想录算法训练营第五十五天|392.判断子序列、115.不同的子序列
  • itop-3568 开发板系统编程学习笔记(18)LED 应用编程
  • qiankun 框架是怎么做的样式隔离
  • SpringBoot配置文件
  • Ingonyama团队的ZKP加速