您的位置:首页 > 家居用品 > 箱包 > insert rows into heap/clustered table

insert rows into heap/clustered table

luyued 发布于 2010-12-26 21:59   浏览 N 次  

Insert row to a heap.

IAM包含一个对象所占用所有空间(extent), PFS包含了所有数据页的空间使用情况的信息。

当向堆(heap)插入一条记录时, sqlserver会检测这个对象的IAM页和PFS页(加上S LATCH),判断是否和可用的数据页,如果有,则向相应的数据页插入数据,如果插入的数据量达到了PFS的阀值,会更新PFS页内的信息(需要U LATCH)

如果没有可用的数据页,则会

如果当前页的数量>8,检测GAM页(加上S LATCH),查看时候有可用的Extent,如果没有,则检测下一个GAM...如果找到可用的extent,则更新相应的GAM,IAM,PFS(需要U LATCH)

如果当前页的数量<8检测SGAM页(加上S LATCH),查看时候有可用的Extent,如果没有,则检测下一个SGAM...如果找到可用的extent,则更新相应的SGAM,IAM,PFS(需要U LATCH)

如果对数据有delete,update操作,导致数据页空间上的变化,也要更新PFS,也可能更新相应的GAM,SGAM,IAM,这都需要u latch. 可以想象的出,在高并发所以如果在高频发的情况下, 会出现这些分配页上的热点,形成瓶颈(假设其它的资源不是瓶颈)

接下来看看clustered table的情况。

Insert row to a clustered index table

假设clustered key符合unique,narrow,static ,ever-increasing原则。

插入的过程和index seek的过程有些类似, 首先通过root page intermate page定位新的行应该插入的位置,这样就定位到了行所在的数据页,然后完成插入操作。

广告赞助商