Sql Server TEMPDB 设计
tempdb 和sql server 用户数据库一样都是通过model系统 数据库模板克隆创建而来,是全局资源供所有连接到sql server实例上的用户使用,不同的是tempdb 每次sql server 实例重启都会删除、重新创建初始化,主要存储以下2类对象:
用户临时对象:用户创建的全局/本地临时表、表变量、表值函数、游标、临时存储过程;
系统临时对象: create index时(指定sort_in_tempdb选项)的中间排序数据、快照隔离级别时的行版本信息、用于
哈希联接或哈希聚合操作的工作文件、order by/group by/union 中间排序数据
由于sql server 临时对象结构没有持久化,在高并发系统频繁的创建、销毁临时对象可能会导致tempdb page latch 争用影响数据库性能,以下是一些准对高并发数据库系统tempdb 设计方式、思路:
tempdb 设计(优化tempdb page latch)
1、数据文件数取决于计算机上的(逻辑)处理器数。 一般而言,如果逻辑处理器数目小于或等于 8,则使用的数据文件数与逻辑处理器数相同。 如果逻辑处理器数大于 8,请指定 8 个数据文件。 如果仍然存在争用,则以 4 的倍数增加数据文件的数量,直到争用减少到可接受的级别或对工作负荷/代码进行更改,文件增长应按照大小而不是默认的百分比来增长,每个数据文件的初始大小以及增长大小保持相同。(此为sql server 2016 以及以上版本tempdb的默认行为)
2、数据文件应放置在io 性能很好的磁盘上并预留足够的空间并做好空间监控。
3、如果是sql server 2019 以及以上版本,可以通过开启In memory tempdb metadata来基本消除 page latch 争用。
ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED TEMPDB_METADATA=ON;
4、通过开启追踪标志1117、1118 来优化数据文件增长、页面空间分配方式。
sql server 2016 之前:
DBCC TRACEON (1117, -1)
DBCC TRACEON (1118, -1)
sql server 2016以及以上:
ALTER DATABASE [tempdb]
MODIFY FILEGROUP [FileGroup_Name] AUTOGROW_ALL_FILES;(默认增长单个数据文件)
ALTER DATABASE [tempdb]
SET MIXED_PAGE_ALLOCATION OFF;(对于tempdb 以及新建的用户数据库默认不使用混合区分配空间)
本文来自博客园,作者:踏雪无痕2017,转载请注明原文链接:https://www.cnblogs.com/oradba/p/15867060.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本