Sqlserver关于tempdb临时数据库文件个数的最佳实践

官方文档

https://learn.microsoft.com/zh-cn/sql/relational-databases/databases/tempdb-database?view=sql-server-ver16

https://learn.microsoft.com/en-US/troubleshoot/sql/database-engine/performance/recommendations-reduce-allocation-contention

一般而言,如果逻辑处理器数目小于或等于 8,则使用的数据文件数与逻辑处理器数相同。 如果逻辑处理器数大于 8,请指定 8 个数据文件。 如果仍然存在争用,则以 4 的倍数增加数据文件的数量,直到争用减少到可接受的级别或对工作负荷/代码进行更改。tempdb 数据文件的最佳数量取决于 tempdb 中的争用程度。首先,您可以将 tempdb 配置为至少等于为 SQL Server 分配的逻辑处理器的数量。对于更高端的系统,起始数字可以是八 (8)。如果争用没有减少,您可能必须增加数据文件的数量。

Tempdb 系统数据库是包含以下内容的全局资源:

显式创建的临时用户对象。 它们包括全局或局部临时表及索引、临时存储过程、表变量、表值函数返回的表或游标。

数据库引擎创建的内部对象。 它们包括:

用于储存假脱机、游标、排序和临时大型对象 (LOB) 存储的中间结果的工作表。

用于哈希联接或哈希聚合操作的工作文件。

用于创建或重新生成索引等操作(如果指定了 SORT_IN_TEMPDB)的中间排序结果,或者某些 GROUP BY、ORDER BY 或 UNION 查询的中间排序结果。

复制代码
版本存储区是数据页的集合,它包含支持用于行版本控制的功能的数据行。 有两种类型:公用版本存储区和联机索引生成版本存储区。 版本存储区包含:
    由通过行版本控制隔离或快照隔离事务使用 READ COMMITTED 的数据库中的数据修改事务生成的行版本。
    由数据修改事务为实现联机索引操作、多重活动结果集 (MARS) 以及 AFTER 触发器等功能而生成的行版本。

tempdb 中的操作是最小日志记录操作,以便回滚事务。 每次启动 SQL Server 时都会重新创建 tempdb,从而在系统启动时总是具有一个干净的数据库副本。 在断开联接时会自动删除临时表和存储过程,并且在系统关闭后没有活动连接。

tempdb 不会有什么内容从 SQL Server 的一个会话保存到另一个会话。 不允许对 tempdb 执行备份和还原操作。

辅助数据文件数取决于计算机上的(逻辑)处理器数。 一般而言,如果逻辑处理器数目小于或等于 8,则使用的数据文件数与逻辑处理器数相同。 如果逻辑处理器数大于 8,请指定 8 个数据文件。 如果仍然存在争用,则以 4 的倍数增加数据文件的数量,直到争用减少到可接受的级别或对工作负荷/代码进行更改。

The optimal number of tempdb data files depends on the degree of contention seen in tempdb. As a starting point, you can configure tempdb to be at least equal to the number of logical processors that are assigned for SQL Server. For higher-end systems, the starting number could be eight (8). If the contention is not reduced, you may have to increase the number of data files.

tempdb 数据文件的最佳数量取决于 tempdb 中的争用程度。首先,您可以将 tempdb 配置为至少等于为 SQL Server 分配的逻辑处理器的数量。对于更高端的系统,起始数字可以是八 (8)。如果争用没有减少,您可能必须增加数据文件的数量

How increasing the number of tempdb data files reduces contention

The following list explains how increasing the number of tempdb data files that have equal sizing reduces contention:

If you have one data file for the tempdb, you only have one GAM page, and one SGAM page for each 4 GB of space.

Increasing the number of data files that have the same sizes for tempdb effectively creates one or more GAM and SGAM pages for each data file.

The allocation algorithm for GAM allocates one extent at a time (eight contiguous pages) from the number of files in a round robin fashion while honoring the proportional fill. Therefore, if you have 10 equally sized files, the first allocation is from File1, the second from File2, the third from File3, and so on.

The resource contention of the PFS page is reduced because eight pages at a time are marked as FULL because GAM is allocating the pages.

增加 tempdb 数据文件的数量如何减少争用

以下列表说明了增加具有相同大小的 tempdb 数据文件的数量如何减少争用:

如果 tempdb 有一个数据文件,则每 4 GB 空间只有一个 GAM 页和一个 SGAM 页。

增加 tempdb 具有相同大小的数据文件的数量可以有效地为每个数据文件创建一个或多个 GAM 和 SGAM 页。

GAM 的分配算法以循环方式从文件数量中一次分配一个范围(八个连续页),同时遵守比例填充。因此,如果有 10 个大小相同的文件,则第一个分配来自 File1,第二个分配来自 File2,第三个分配来自 File3,依此类推。

PFS 页面的资源争用减少了,因为 GAM 正在分配页面,一次将八个页面标记为 FULL。

相关推荐
真正的醒悟17 分钟前
什么是安全设备组网
服务器·数据库·php
小哈里31 分钟前
【软考架构】2025H2系统架构设计师考试复习.jpg(软件架构、软件工程、数据库、Web开发、高项)
数据库·架构·系统架构·软件工程·后端开发
B站_计算机毕业设计之家40 分钟前
深度学习:Yolo水果检测识别系统 深度学习算法 pyqt界面 训练集测试集 深度学习 数据库 大数据 (建议收藏)✅
数据库·人工智能·python·深度学习·算法·yolo·pyqt
wei_shuo3 小时前
全场景自动化 Replay 技术:金仓 KReplay 如何攻克数据库迁移 “难验证“ 难题
数据库·自动化·king base
葡萄城技术团队3 小时前
打破误解!MongoDB 事务隔离级别深度实测:快照隔离竟能防住 8 种异常?
数据库
Gold Steps.3 小时前
数据库正常运行但是端口变成了0?
数据库·mysql
杂亿稿3 小时前
增删改查操作
数据库
Code_Geo3 小时前
在postgres数据库中Postgres FDW 全面详解
数据库·fdw
QT 小鲜肉3 小时前
【个人成长笔记】将Try Ubuntu里面配置好的文件系统克隆在U盘上(创建一个带有持久化功能的Ubuntu Live USB系统)
linux·开发语言·数据库·笔记·ubuntu
LWy6104263 小时前
数据库库、表的创建及处理
数据库