SQL SERVER中的頁和區
真題1、 SQL Server的兩種存儲結構是什麼?
答案:SQL Server的兩種儲存結構是頁與區間。
(1)頁:用於資料儲存的連續的磁碟空間塊,SQL Server中資料儲存的基本單位是頁,磁碟I/O操作在頁級執行,頁的大小為8KB,每頁的開頭是96位元組的頁頭,用於儲存有關頁的系統資訊,包括頁碼、頁型別、頁的可用空間以及擁有該頁的物件的分配單元ID。
(2)區間:區是管理空間的基本單位,一個區是8個物理上連續的頁(即64KB)的集合,所有頁都儲存在區中。SQL Server有兩種型別的區:統一區和混合區。
l 統一區:由單個物件所有,區中的所有8頁只能由一個物件使用。
l 混合區:最多可由8個物件共享。區中8頁中的每頁可以由不同物件所有,但是一頁總是隻能屬於一個物件。
官方文件:
頁和區
SQL Server 中資料儲存的基本單位是頁。為資料庫中的資料檔案(.mdf 或 .ndf)分配的磁碟空間可以從邏輯上劃分成頁(從 0 到 n 連續編號)。磁碟 I/O 操作在頁級執行。也就是說,SQL Server 讀取或寫入所有資料頁。
區是八個物理上連續的頁的集合,用來有效地管理頁。所有頁都儲存在區中。
在 SQL Server 中,頁的大小為 8 KB。這意味著 SQL Server 資料庫中每 MB 有 128 頁。每頁的開頭是 96 位元組的標頭,用於儲存有關頁的系統資訊。此資訊包括頁碼、頁型別、頁的可用空間以及擁有該頁的物件的分配單元 ID。
下表說明了 SQL Server 資料庫的資料檔案中所使用的頁型別。
頁型別 |
內容 |
---|---|
Data |
當 text in row 設定為 ON 時,包含除 text、ntext、image、nvarchar(max)、varchar(max)、varbinary(max) 和 xml 資料之外的所有資料的資料行。 |
Index |
索引條目。 |
Text/Image |
大型物件資料型別:
資料行超過 8 KB 時為可變長度資料型別列:
|
Global Allocation Map、Shared Global Allocation Map |
有關區是否分配的資訊。 |
Page Free Space |
有關頁分配和頁的可用空間的資訊。 |
Index Allocation Map |
有關每個分配單元中表或索引所使用的區的資訊。 |
Bulk Changed Map |
有關每個分配單元中自最後一條 BACKUP LOG 語句之後的大容量操作所修改的區的資訊。 |
Differential Changed Map |
有關每個分配單元中自最後一條 BACKUP DATABASE 語句之後更改的區的資訊。 |
注意 |
---|
日誌檔案不包含頁,而是包含一系列日誌記錄。 |
在資料頁上,資料行緊接著標頭按順序放置。頁的末尾是行偏移表,對於頁中的每一行,每個行偏移表都包含一個條目。每個條目記錄對應行的第一個位元組與頁首的距離。行偏移表中的條目的順序與頁中行的順序相反。
大型行支援
行不能跨頁,但是行的部分可以移出行所在的頁,因此行實際可能非常大。頁的單個行中的最大資料量和開銷是 8,060 位元組 (8 KB)。但是,這不包括用 Text/Image 頁型別儲存的資料。包含 varchar、nvarchar、varbinary 或 sql_variant 列的表不受此限制的約束。當表中的所有固定列和可變列的行的總大小超過限制的 8,060 位元組時,SQL Server 將從最大長度的列開始動態將一個或多個可變長度列移動到 ROW_OVERFLOW_DATA 分配單元中的頁。每當插入或更新操作將行的總大小增大到超過限制的 8,060 位元組時,將會執行此操作。將列移動到 ROW_OVERFLOW_DATA 分配單元中的頁後,將在 IN_ROW_DATA 分配單元中的原始頁上維護 24 位元組的指標。如果後續操作減小了行的大小,SQL Server 會動態將列移回到原始資料頁。有關詳細資訊,請參閱。
區是管理空間的基本單位。一個區是八個物理上連續的頁(即 64 KB)。這意味著 SQL Server 資料庫中每 MB 有 16 個區。
為了使空間分配更有效,SQL Server 不會將所有區分配給包含少量資料的表。SQL Server 有兩種型別的區:
-
統一區,由單個物件所有。區中的所有 8 頁只能由所屬物件使用。
-
混合區,最多可由八個物件共享。區中八頁的每頁可由不同的物件所有。
通常從混合區向新表或索引分配頁。當表或索引增長到 8 頁時,將變成使用統一區進行後續分配。如果對現有表建立索引,並且該表包含的行足以在索引中生成 8 頁,則對該索引的所有分配都使用統一區進行。
概念
其他資源
About Me
.............................................................................................................................................
● 本文整理自網路
● 本文在itpub(http://blog.itpub.net/26736162/abstract/1/)、部落格園(http://www.cnblogs.com/lhrbest)和個人微信公眾號(xiaomaimiaolhr)上有同步更新
● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/
● 本文部落格園地址:http://www.cnblogs.com/lhrbest
● 本文pdf版、個人簡介及小麥苗雲盤地址:http://blog.itpub.net/26736162/viewspace-1624453/
● 資料庫筆試面試題庫及解答:http://blog.itpub.net/26736162/viewspace-2134706/
● DBA寶典今日頭條號地址:
.............................................................................................................................................
● QQ群:230161599 微信群:私聊
● 聯絡我請加QQ好友(646634621),註明新增緣由
● 於 2017-07-01 09:00 ~ 2017-07-31 22:00 在魔都完成
● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解
● 版權所有,歡迎分享本文,轉載請保留出處
.............................................................................................................................................
● 小麥苗的微店:
● 小麥苗出版的資料庫類叢書:http://blog.itpub.net/26736162/viewspace-2142121/
.............................................................................................................................................
使用微信客戶端掃描下面的二維碼來關注小麥苗的微信公眾號(xiaomaimiaolhr)及QQ群(DBA寶典),學習最實用的資料庫技術。
小麥苗的微信公眾號 小麥苗的QQ群 小麥苗的微店
.............................................................................................................................................
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2142922/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL Server中count(*)和Count(1)的區別SQLServer
- MySql/Oracle和SQL Server的分頁查MySqlOracleServer
- SQL Server中內連線和外連線的區別SQLServer
- MS SQL Server和MySQL區別ServerMySql
- SQL中where和on的區別SQL
- 理解和使用SQL Server中的並行SQLServer並行
- MySQL、Oracle和SQL Server的分頁查詢語句MySqlOracleServer
- SQL Server 聚集索引和非聚集索引的區別SQLServer索引
- 分頁procedure (SQL Server)SQLServer
- Oracle 和 SQL Server 個別小區別OracleSQLServer
- SQL Server 和 MySql 語法和關鍵字的區別ServerMySql
- sql server中的一個坑-len與datalength區別SQLServer
- order by在SQL Server與Oracle中的一個區別SQLServerOracle
- SQL中IN和EXISTS用法的區別SQL
- SQL Server中的日期和時間:DATEADD()SQLServer
- SQL Server中,WITH AS的使用SQLServer
- [SQL Server]分頁功能的實現SQLServer
- SQL Server Express和SQL Server Compact的應用SQLServerExpress
- sql server agent與sql server有什麼區別 ?SQLServer
- SQL Server中臨時表與表變數的區別SQLServer變數
- SQL Server中TempDB管理(版本儲存區的一個example)SQLServer
- SQL Server中的集合運算: UNION, EXCEPT和INTERSECTSQLServer
- SQL Server中的臨時表和表變數SQLServer變數
- sql中UNION和UNION ALL的區別SQL
- SQL 中having 和where的區別SQL
- SQL Server CE和SQL Server 2000/2005中的ISNULL函式的異同SQLServerNull函式
- SQL Server中@@ROWCOUNT的用法SQLServer
- SQL server中的NULL值SQLServerNull
- SQL Server中distinct的用法SQLServer
- SQL Server中tempdb的管理SQLServer
- (SQL Server)分頁的儲存過程SQLServer儲存過程
- SQL SERVER中SQL優化SQLServer優化
- SQL SERVER分頁演算法SQLServer演算法
- SQL Server 管理常用的SQL和T-SQLSQLServer
- SQL Server 2008 表和索引的行壓縮和頁壓縮SQLServer索引
- 優化 SQL Server 中的備份和還原效能優化SQLServer
- Mysql學習總結(50)——Oracle,mysql和SQL Server的區別MySqlOracleServer
- [zt] 使用SQL Server中的Linked Server及Remote ServerSQLServerREM