Andone勇闯天涯

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

tempdb页面分配争用

当用户向tempdb中申请空间时,此时一个数据文件会有特定的3个页,PFS页面(2:1:1),GAM页面(2:1:2),SGAM(2:1:3)
PFS(页面空闲空间表)
PFS页面为每个页面存储1字节的信息表示这个页面的空闲空间大小及其作用
8k=8192字节,相当于可以存储8192个页面,也就是一个PFS页面可以存储64M的页面信息。所以没接近一个64MB的位置就可以看到一个PFS页面
GAM(全局分配映射表)
GAM页面为每个盘区存储1比特的信息,表示哪些盘区正在使用以及哪些为空。在数据库文件中大约隔4GB就能发现一个GAM页面
SGAM(共享全局分配映射表)
SGAM页面为每个盘区存储1比特的信息,表示是否带有空闲空间的混合区还是混合区。在数据库文件中大约隔4GB就能发现一个GAM页面

页面分配争用
假设创建一个临时表,为了确定在tempdb中的什么位置创建这个表,sqlserver会读取SGAM页面找到合适的区分配给这个表,在更新SGAM页面的时候,sqlserver会对SGAM页面加排他闩锁
然后继续读取PFS页面,找到盘区的空闲页分配给临时表,然后更新PFS页面,也会对PFS页面使用排他闩锁,保证其他人不会分配同一个数据页,更新完释放闩锁
当很多申请的时候,会造成页面分配争用。


解决的办法就是添加多个tempdb数据文件,最多不超过8个数据文件。
注意:多个数据文件的大小一定要一样,并不要求在多个磁盘,不是为了提高I/O,只是为了增加分配页的数量

posted on 2018-12-29 17:39  Andone勇闯天涯  阅读(102)  评论(0编辑  收藏  举报