数据库分配空间问题

sqn1982 2014-04-11 03:50:38
T-SQL查询一书中说:当表或索引需要更多的空间以存储数据时,SQL Server为该对象分配一个完整的区。但有一个例外:如果该对象不足64KB,则当需要更多空间时,SQL Server通常只分配一个单独的页,而不是整个区。

问题:
①如果该对象(比如表)在第一次建立插入数据的时候,数据量很小,如果不满一页,这时候是分配一个完整的区还是只分配就一个页?
②如果该对象该对象初始化的时候分配了整个区,那么是不是当需要更多的空间时,超过一个区的部分如果小于一页的话那就在混合区分配一个页?如果超过一个区的部分如果大于一页的话那么就会再分配一个新的区而不是在混合区分配一个页?

以上,欢迎高手解答。。。
...全文
198 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
guguda2008 2014-04-11
  • 打赏
  • 举报
回复
引用 2 楼 sqn1982 的回复:
[quote=引用 1 楼 guguda2008 的回复:] 没啥数据的新表放混合区,如果表数据量足够放8页,而且做了索引重建之类的动作,就放统一区了
有数据且数据量很小的时候呢?[/quote] 混合区
yoan2014 2014-04-11
  • 打赏
  • 举报
回复
DBCC TRACEON(3604,1)
DBCC IND(AdventureWorks2012,test,1)
--得到結果中pagetype為10的為IAM頁 , 我這邊為PagePID 24130
--查看IAM頁的內容,數據量少時
DBCC PAGE(AdventureWorks2012 , 1 , 24130 , 3)
/*
 IAM: Single Page Allocations @0x000000000F4AA08E   --8個單獨分配頁的分配情況

Slot 0 = (1:24124)                  Slot 1 = (0:0)                      Slot 2 = (0:0)
Slot 3 = (0:0)                      Slot 4 = (0:0)                      Slot 5 = (0:0)
Slot 6 = (0:0)                      Slot 7 = (0:0)                      


IAM: Extent Alloc Status Slot 1 @0x000000000F4AA0C2  --統一區的分配情況

(1:0)        - (1:28280)    = NOT ALLOCATED   
 */
 --再插入一些數據
 INSERT INTO test ( 	productid, 	orderid,shipmentquantity,	valueid,valuestr,	productname )
 VALUES ( 	3, 	'8', 	8, 	'8', 	'aaaaaaaaa', 	'bbbbbbb' )
 GO 1000
 --再看看IAM頁的情況
 DBCC PAGE(AdventureWorks2012 , 1 , 24130 , 3)
 /*
  IAM: Single Page Allocations @0x000000000B24A08E --8個單獨分配頁都已經用掉了

Slot 0 = (1:24124)                  Slot 1 = (1:24131)                  Slot 2 = (1:24132)
Slot 3 = (1:24133)                  Slot 4 = (1:24342)                  Slot 5 = (1:24343)
Slot 6 = (1:24360)                  Slot 7 = (1:24361)                  


IAM: Extent Alloc Status Slot 1 @0x000000000B24A0C2 --統一區的分配情況

(1:0)        - (1:24360)    = NOT ALLOCATED                              
(1:24368)    -              =     ALLOCATED      --已經分配                       
(1:24376)    - (1:28280)    = NOT ALLOCATED   
  */
樓主這是我做了一些測試後的結果,給你參考參考 可以看一下大神的blog http://blog.csdn.net/misterliwei/article/details/5943447
霜寒月冷 2014-04-11
  • 打赏
  • 举报
回复
太抽象的文字,看看着就想睡,用的时候好像没太注意这些细节。反正现在硬盘很便宜,能大就大点呗。
sqn1982 2014-04-11
  • 打赏
  • 举报
回复
引用 1 楼 guguda2008 的回复:
没啥数据的新表放混合区,如果表数据量足够放8页,而且做了索引重建之类的动作,就放统一区了
有数据且数据量很小的时候呢?
guguda2008 2014-04-11
  • 打赏
  • 举报
回复
没啥数据的新表放混合区,如果表数据量足够放8页,而且做了索引重建之类的动作,就放统一区了

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧