给SQL Server 2014的tempdb添加数据文件能否减少闩锁争用并提升性能?
SQL Server 2014 TempDB添加数据文件:合理性与性能影响
核心结论
添加额外的TempDB数据文件是缓解闩锁争用的合理方案,在存在相关争用场景时,确实能提升SQL实例的性能。
关键注意事项
- 先确认争用存在:别盲目加文件,先通过以下查询验证是否有TempDB相关的闩锁等待:
如果SELECT wait_type, wait_time_ms, signal_wait_time_ms, wait_count FROM sys.dm_os_wait_stats WHERE wait_type LIKE 'PAGELATCH_%' ORDER BY wait_time_ms DESC;PAGELATCH_UP这类等待占比很高,且结合sys.dm_os_latch_stats确认是TempDB的GAM/SGAM/PFS页争用,再考虑加文件。没有这类等待的话,加文件不会有明显收益。 - 文件配置要对称:
- 新增文件的初始大小必须和现有文件一致(也就是800MB),自动增长的增量和方式也要完全相同,避免文件大小不均导致新的热点。
- 文件数量建议:CPU核心数≤8时,文件数和核心数匹配;超过8核的话,最多设置8个文件(SQL Server 2014的TempDB负载均衡逻辑不如新版本,过多文件收益有限)。
- 所有TempDB数据文件要放在性能一致的存储介质上,避免部分文件拖慢整体。
- 800MB文件大小本身无问题:只要TempDB不是频繁触发自动增长(自动增长会产生碎片和等待),800MB的大小是合理的,加文件的核心是分散分配页的争用,而非单纯扩容。
对性能的实际影响
- 当存在GAM/SGAM/PFS页的闩锁争用时,多文件会将数据分配请求分散到不同文件的分配页上,减少单个页的竞争,从而降低等待时间,提升依赖TempDB的并发操作性能——比如大量临时表创建、表变量使用、排序/哈希操作溢出到TempDB等场景。
- 如果没有争用场景,添加文件不会带来性能提升,反而会增加极少量的管理开销(基本可以忽略,但没必要做无用功)。
内容的提问来源于stack exchange,提问作者Kazem Danesh
相关产品推荐
相关产品推荐

