- 什么是热点?
Aaron是正确的,我不会重复他上面所说的内容,但这不仅仅涉及磁盘IO。大多数人在TempDB中遇到的主要问题是由于对某些跟踪结构的争执。
由于具有多个tempdb文件,使得按比例填充和循环算法可以有效地实现分配之间的“公平”,因此添加没有分配的新文件会有些许困难。我确实不同意,如果您开始看到PAGELATCH_*
等待的是所述新文件,而其他文件上没有太多或任何其他内容,则这是“小鸡鸡”警告(请参阅下面的产品更新)。这通常发生在具有较高TempDB活动并且已经具有多个文件的系统上。
请注意,SQL Server 2019中有一些选项可以将某些基础系统表更改为内存中表,这可以有所改进,因为内存中对象的分配方式与磁盘烘焙表的分配方式不同。基于磁盘的表是多年来我们一直在使用的传统表。SQL Server 2014引入了内存优化表。SQL Server 2019可以处理内存优化表中的某些分配元数据。
SQL Server 2019中进行了另一项更改以帮助并发PFS更改,这通常是分配中内存结构的争用正在PAGELATCH_*
等待的内容。
- 热点问题会使tempdb变得更糟吗?
没什么恕我直言。是的,TempDB有更多的项目可以导致对其进行写入而无需直接使用,因此它可能会妨碍某些项目。但是,就数据更改率而言,非常繁忙的用户数据库也同样糟糕。它不仅限于TempDB。
- 数据库中哪些特定的事情会变得更糟?
我真的很喜欢亚伦的比喻!这就是正在发生的事情的本质。真正恶化的是数据库中对象的空间分配和跟踪。如果您的用户数据库大多是静态的(变化率低),或者您的TempDB并未真正使用,那么您将不会有任何注意。但是,如果这是一个非常繁忙的服务器,则您可能会启动或加剧分页等待,这可能会导致车队阻塞。
Aaron已经指出,在较旧的版本上,有跟踪标志可确保使用统一的扩展区,并确保文件组中的所有文件一起增长(Aaron指出1117和1118是2016+年的NOP)。我想再次指出的另一件事是,这不仅适用于TempDB,而且适用于任何数据库,应根据需要考虑物理布局。
这不仅是针对热点问题,还适用于系统的其他部分,例如备份/还原,文件管理,文件系统元数据碎片等,这些都可以通过拥有多个文件来解决。
您可以通过waitresource
在PFS页面(第1页,然后每8088页)上查找来查看分配结构竞争。如果看到所有文件都在同一个文件(2:file:page)中,那么您就知道发生了这种情况。