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 阅读( ...) 评论( ...)