婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > SQL Server 2008存儲結構之GAM、SGAM介紹

SQL Server 2008存儲結構之GAM、SGAM介紹

熱門標簽:寧夏外呼系統方案 智能語音外呼系統打電話 怎樣在地圖標注自己的信息 400電話怎么申請收費標準 電銷外呼系統違規 濟南電銷外呼防封卡怎么樣 南京外呼系統租用 高德地圖標注生成 400電話辦理2273649Z空間
當我們創建一個數據庫的時候,例如以缺省的方式CREATE DATABASE TESTDB,SQLServer自動幫我們創建好如下兩個數據庫文件。

這兩個數據文件是實實在在的操作系統文件,其中一個是叫行數據文件,用來存儲數據庫的各種對象,另外一個是日志文件,從來記錄數據變化的過程。

  從邏輯角度而言,數據庫的最小存儲單位為頁即8kb。

  數據庫被分成若干邏輯頁面(每個頁面8KB),并且在每個文件中,所有頁面都被連續地從0到x編號,其中x是由文件的大小決定的。我們可以通過指定一個數據庫ID、一個文件ID、一個頁碼來引用任何一個數據頁。每個數據頁則用來存儲表和索引,以及相關的數據庫管理信息。

  我們順著上面數據文件的路徑可以找到該文件,觀察一下新建的數據文件的大小為:

  2.18 MB (2,293,760 字節)=2,293,760b/8kb=280個頁面=35個區

  數據庫進行空間管理的最小單位為區(extents)。

  一個區由8個邏輯上連續的頁面組成(64KB的空間)。為了能夠更有效地分配空間,SQL Server 2008不會為少量的數據向數據表分配整區的空間。SQL Server 2008有兩種類型的區。

  統一類型的區 這些區為單個對象所有,區中所有的8個數據頁只能被所屬對象使用。

  混合類型的區 這些區能為最多8個對象共享。

  SQL Server為新的表或索引從混合類型的區中分配頁面。當該表或索引增長到8個頁面時,以后所有的分配都使用統一類型的區。

  當一張表或一個索引需要更多的空間時,SQL Server需要找到能夠用來分配的空間。如果該表或索引整體仍然少于8個頁面,SQL Server必須找到能夠用來分配的混合類型區構成的空間。如果表或索引有8個頁面或更大,SQL Server必須找到一個自由的統一類型的區。

  SQL Server使用兩種特殊類型的頁面來記錄哪些區已經被分配出去了,哪些類型(混合類型或統一類型)的區可供使用:

  全局分配映射(Global Allocation Map,GAM)頁面 這些頁面記錄了哪些區已經被分配并用作何種用途。一個GAM頁面在它所覆蓋空間里針對每一個區都有一個數據位。如果數據位為0,那么對應的區正在使用;如果該數據位為1,那么該區為自由區。一個GAM頁面除了頁面頭部和其他一些需要記入的開銷大概有8 000字節或者說64 000位空間可用,所以每個GAM頁面可以覆蓋64 000個區,也就是大約4GB的數據。這意味著一個文件的每4GB空間對應一個GAM頁面。

  共享全局分配映射(Shared Global Allocation Map,SGAM)頁面 這些頁面記錄了哪些區當前被用作混合類型的區,并且這些區需含有至少一個未使用的頁面。就像一個GAM頁面,每一個SGAM頁面覆蓋了大約64 000個區,也就是大約4GB的數據。一個SGAM頁面在它所覆蓋空間里針對每一個區都有一個數據位。如果數據位為1,那么對應的被使用的區為混合類型,并且該區有一些自由頁面;如果數據位為0,那么對應的區不是一個混合類型的區,或者雖然是一個混合類型的區,但是所有的頁面都已被使用了。

  表4-2顯示了基于每一個區當前的使用情況,在GAM和SGAM中該區所對應的比特位模式。
區的當前使用情況 GAM比特位設置 SGAM比特位設置
自由,未使用 1 0
統一類型或已全部使用的混合區 0 0
含有自由頁面的混合區 0 1

  如果SQL Server需要找到一個新的完全沒有使用的區,那么它可以使用任何一個在GAM頁面中對應的比特位值為1的區。如果SQL Server需要找到一個有著可用空間(有一個或多個自由頁面)的混合類型的區,那么它可以尋找一個對應的GAM中的值為0、SGAM中的值為1的區。如果不存在有可用空間的混合類型的區,SQL Server會使用GAM頁面來尋找一個全新的區并將其分配為混合類型的區,然后使用該區中的一頁。如果根本沒有自由區,那么這個文件已經滿了。

第0頁 第1頁 第2頁 第3頁 第4頁 第5頁 第6頁 第7頁
m_type=15 m_type=11 m_type=8 m_type=9 m_type=0 m_type=0 m_type=16 m_type=17
頭文件頁 PFS頁 GAM頁 SGAM頁 保留頁 保留頁 DCM頁 BCM頁

  SQL Server能夠迅速地鎖定一個文件中的GAM頁面,因為它總是位于任何數據庫文件的第三頁上(頁碼為2)。SGAM頁面是在第四頁上(頁碼為3)。下一個GAM頁面出現在第一個GAM頁面(頁碼為2)以后的每511 230個頁面中,并且下一個SGAM頁面出現在第一個SGAM頁面(頁碼為3)以后的每511 230個頁面中。每一個數據庫文件的頁碼為0的頁面是文件頭頁面,并且每個文件僅有一頁。頁碼0是頭文件頁,頁碼1是頁面自由空間頁(Page Free Space,PFS)。

  在SQLServer2008的每一個數據庫中的前八頁順序都是固定的。

  除了第9頁為數據庫的BOOT頁以外,從第8頁到第173頁為SQLServer2008內部系統表的相關存儲信息,然后從第174頁到第279頁為未分配頁面。因為第一頁從0開始,所以剛好280頁,即和我們看到的數據庫數據文件的大小完全相等。

第8頁 第8頁 第8頁 第N頁 第173頁 第279頁
m_type=1 m_type=13 m_type in (1,2,10) N/A
Data頁 Boot頁 主要為內部系統表相關信息 未分配

  以下截圖是通過SQLServer2008的Internals Viewer插件看到的整體頁面結構,該插件是從http://www.SQLInernalsViewer.com網站下載的,分為不同的.net版本。

  備注:TESTDB為新創建的空數據庫,沒有任何用戶自定義對象,直到有建表腳本為止;


關于數據庫頁類型如下所示:

類型 頁面類型名稱 頁面類型描述
1 Data page 堆表和聚集索引的葉子節點數據
2 Index page 聚集索引的非葉子節點和非聚集索引的所有索引記錄
3 Text mixed page A text page that holds small chunks of LOB values plus internal parts of text tree. These can be shared between LOB values in the same partition of an index or heap.
4 Text tree page A text page that holds large chunks of LOB values from a single column value.
7 Sort page 排序時所用到的臨時頁,排序中間操作存儲數據用的。
8 GAM page 全局分配映射(Global Allocation Map,GAM)頁面 這些頁面記錄了哪些區已經被分配并用作何種用途。
9 SGAM page 共享全局分配映射(Shared Global Allocation Map,GAM)頁面 這些頁面記錄了哪些區當前被用作混合類型的區,并且這些區需含有至少一個未使用的頁面。
10 IAM page. 有關每個分配單元中表或索引所使用的區的信息
11 PFS page. 有關頁分配和頁的可用空間的信息
13 boot page. 記錄了關于數據庫的信息,僅存于每個數據庫的第9頁
15 file header page 記錄了關于數據庫文件的信息,存于每個數據庫文件的第0頁
16 DCM page 記錄自從上次全備以來的數據改變的頁面,以備差異備份
17 BCM page 有關每個分配單元中自最后一條 BACKUP LOG 語句之后的大容量操作所修改的區的信息


  實際上SQLServer還包括一些未公開的頁面類型,例如type 19,type 14等等。

  本章我們主要介紹GAM頁和SGAM頁,其他頁面類型會稍后介紹。

  那么如何查看頁面信息呢,從SQLServer2000起便開始提供了一個讀取數據頁結構的命令DBCC Page。該命令為非文檔化的命令,具體如下:

  DBCC Page ({dbid|dbname},filenum,pagenum[,printopt])

  具體參數描述如下:

  dbid               包含頁面的數據庫ID

  dbname       包含頁面的數據庫的名稱

  filenum         包含頁面的文件編號

  pagenum      文件內的頁面

  printopt            可選的輸出選項;選用其中一個值:

                            0:默認值,輸出緩沖區的標題和頁面標題

                           1:輸出緩沖區的標題、頁面標題(分別輸出每一行),以及行偏移量表

                           2:輸出緩沖區的標題、頁面標題(整體輸出頁面),以及行偏移量表

                           3:輸出緩沖區的標題、頁面標題(分別輸出每一行),以及行偏移量表;每一行后跟分別列出的它的列值

  如果要想看到這些輸出的結果,還需要設置DBCC TRACEON(3604)。

  如前文所述,GAM頁一定存在于該數據庫的第二個頁面,SGAM頁則一定存在于該數據庫的第三個頁面;而每一個數據庫都會存在文件編號為1的數據庫文件,所以我們執行以下命令即可。

復制代碼 代碼如下:

DBCC TRACEON(3604)
DBCC PAGE(TESTDB,1,2,1) —查看GAM頁信息
DBCC PAGE(TESTDB,1,3,1) —查看SGAM頁信息
DBCC PAGE(TESTDB,1,2,2) —查看GAM頁信息和整體輸出頁面
DBCC PAGE(TESTDB,1,3,2) —查看SGAM頁信息和整體輸出頁面
DBCC PAGE(TESTDB,1,2,3) —查看GAM頁信息及相應列值
DBCC PAGE(TESTDB,1,3,3) —查看SGAM頁信息及相應列值
DBCC PAGE(TESTDB,1,2,1) WITH TABLERESULTS —以表格形式查看SGAM頁信息及相應列值
DBCC PAGE(TESTDB,1,3,1) WITH TABLERESULTS —以表格形式查看SGAM頁信息及相應列值

我們可以看到一個完整的頁面分為四個部分;BUFFER、PAGE HEADER、DATA和OFFSET TABLE。

  讓我們首先從GAM頁開始看起:

  BUFFER部分:

  顯示給定頁面的緩沖信息,是內存中的結構,用于管理頁面,該信息僅當該頁面處于內存時才有意義。關于這個部分我們知之甚少,基本上無法找到相關材料。

BUF @0x03585CD8 每一次清空緩存再次查詢,地址都會改變
bpage = 0x060B4000 每一次清空緩存再次查詢,地址都會改變
bhash = 0x00000000 相對不變
bpageno = (1:2) 當前頁面地址
bdbid = 8 sys.databases.database_id
breferences = 1 每一次清空緩存再次查詢,地址都會改變
bUse1 = 41490 每一次清空緩存再次查詢,地址都會改變
bstat = 0xc00009 相對不變
blog = 0x59ca2159 相對不變
bnext = 0x00000000 相對不變

  PAGE HEADER部分:
PAGE HEADER部分顯示的是該頁面上的所有報頭字段的數據

PAGE HEADER這部分內容只有通過DBCC PAGE(TESTDB,1,2,2)即整體輸出頁面才能夠展現;通過與上面表格的對照,我們勉強能識別一些相關存儲信息;當這部分缺乏官方文檔的支持,為了避免無謂的猜測,所以暫時就不做深入探討了。

DATA 部分

DATA部分一般分為若干插槽號(Slot),如果是數據頁或索引頁的話,可以理解為一行記錄,SQLServer通過文件號+頁面號+插槽號用來唯一標識表中的每一條記錄。但在GAM頁中我們可以把Slot 0理解為GAM頁的保留頁,共計94個字節。

  從第194個字節開始(頁面總是從第0個字節開始的),到第196個字節,這三個字節代表已分配的分區的情況。即0000C0。

  我們再來看一下DBCC PAGE(TESTDB,1,2,3)的執行結果。

上面顯示從第1頁到第168頁已分配,而第176頁到272頁未分配,和DBCC PAGE(TESTDB,1,2,2)顯示的194個頁面似乎有些矛盾,實際上是不矛盾的。如前文所述,GAM對未使用的分區標識為0,而對已分配的分區標識為1
  1個分區=64頁,因為前128個頁面均已分配,所以前兩個字節為00 00
  從第128個頁面起到第175個頁面也均已分配,實際上為6個區為0也就是說連續6個bit為0,一個字節為8個bit,最后兩個bit為11,所以該字節為0000 0011,在此需要反轉一下相關二進制位;反轉之后為1100 0000即為C0。
  最后讓我們用Internals Viewer插件看一下GAM頁的全貌吧。



SGAM頁面

PAGE: (1:3)

BUFFER:
BUF @0x0358A7F4
bpage = 0x062AE000 bhash = 0x00000000 bpageno = (1:3)
bdbid = 8 breferences = 3 bUse1 = 14428
bstat = 0xc00009 blog = 0x21212159 bnext = 0x00000000

PAGE HEADER:
Page @0x062AE000
m_pageId = (1:3) m_headerVersion = 1 m_type = 9
m_typeFlagBits = 0x0 m_level = 0 m_flagBits = 0x200
m_objId (AllocUnitId.idObj)=99 m_indexId (AllocUnitId.idInd)=0 Metadata: AllocUnitId=6488064
Metadata: PartitionId = 0 Metadata: IndexId = 0 Metadata: ObjectId = 99
m_prevPage = (0:0) m_nextPage = (0:0) pminlen = 90
m_slotCnt = 2 m_freeCnt = 6 m_freeData = 8182
m_reservedCnt = 0 m_lsn = (18:435:5) m_xactReserved = 0
m_xdesId = (0:0) m_ghostRecCnt = 0 m_tornBits = 177043542
Allocation Status
GAM (1:2)=ALLOCATED SGAM (1:3)=NOT ALLOCATED PFS(1:1)=0x44 ALLOCATED 100_PCT_FULL
DIFF (1:6) = CHANGED ML (1:7) = NOT MIN_LOGGED

DATA:
Slot 0, Offset 0x60, Length 94, DumpStyle BYTE
Record Type = PRIMARY_RECORD Record Attributes =
Memory Dump @0x4F32C060
00000000: 00005e00 00000000 00000000 00000000 ?..^.............
00000010: 00000000 00000000 00000000 00000000 ?................
00000020: 00000000 00000000 00000000 00000000 ?................
00000030: 00000000 00000000 00000000 00000000 ?................
00000040: 00000000 00000000 00000000 00000000 ?................
00000050: 00000000 00000000 00000000 0000??????..............

Slot 1, Offset 0xbe, Length 7992, DumpStyle BYTE
Record Type = PRIMARY_RECORD Record Attributes =
Memory Dump @0x4F32C0BE
00000000: 0000381f 20ee2000 00000000 00000000 ?..8. . .........
00000010: 00000000 00000000 00000000 00000000 ?................
00001F30: 00000000 00000000 ???????????????????........

  以下為DBCC PAGE(TESTDB,1,3,3)得到的相關信息,有興趣的可以和20ee20做一下對比。

(1:0) - (1:32) = NOT ALLOCATED
(1:40) - = ALLOCATED
(1:48) - (1:64) = NOT ALLOCATED
(1:72) - (1:88) = ALLOCATED
(1:96) - = NOT ALLOCATED
(1:104) - (1:120) = ALLOCATED
(1:128) - (1:160) = NOT ALLOCATED
(1:168) - = ALLOCATED
(1:176) - (1:272) = NOT ALLOCATED

  最后讓我們用Internals Viewer插件看一下SGAM頁的全貌吧。



總結一下,關于GAM和SGAM頁比較困難的地方:

  1、 關于GAM和SGAM頁中的BUFFER信息基本無法理解,也找不到相關材料。

  2、 PAGE HEADER的部分信息和Slot 0中的一部分信息,也無法找到相關材料。

  3、 SGAM頁中的NOT ALLOCATED實際上是統一類型區或者已使用完的混合類型的區,而ALLOCATED實際上為含有自由頁面的混合區。

  4、 GAM頁中0代表已分配,1代表自由區;和一般的標志位的含義剛好相反。

  5、 GAM和SGAM實際上只分配了280個頁面,即35個區;顯示出來的數據內容雖然很多,但后面的分區信息實際上是不存在的。

  6、 GAM和SGAM通過DBCC的printopt為3的屬性顯示出來的頁面分配信息看似是斷號的。

  7、 GAM和SGAM的區信息的字節是通過二級制反轉得到的。

  GAM和SGAM頁的總的大小為8192個字節;文件頭為96個字節,slot 0為94個字節,slot 1的頭部的系統信息為4個字節,尾部的系統信息為10個字節,所以有效存儲應為7988個字節,63904個區,511230個頁;事實上當數據文件超過約4G的時候,我們將能在第511232頁、 第511233頁分別找到其對應的GAM、SGAM頁面。

標簽:平頂山 唐山 惠州 茂名 仙桃 長白山 貴港 潛江

巨人網絡通訊聲明:本文標題《SQL Server 2008存儲結構之GAM、SGAM介紹》,本文關鍵詞  SQL,Server,2008,存儲,結構,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SQL Server 2008存儲結構之GAM、SGAM介紹》相關的同類信息!
  • 本頁收集關于SQL Server 2008存儲結構之GAM、SGAM介紹的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩亚洲欧美成人一区| 国产精品免费免费| 寂寞少妇一区二区三区| 亚洲第一福利一区| 中文字幕精品一区 | 青青草国产成人av片免费| 国产精品九色蝌蚪自拍| www.欧美日韩国产在线| 人人狠狠综合久久亚洲| 日韩精品电影一区亚洲| 免费观看在线综合| 国产·精品毛片| 91麻豆国产福利精品| 欧美丰满一区二区免费视频| 久久综合九色综合欧美就去吻| 国产一区二区三区四区在线观看| 亚洲成人tv网| 成人手机电影网| 欧美午夜在线一二页| 日韩一区二区三| 国产网站一区二区| 天天亚洲美女在线视频| 日韩av中文在线观看| 国产99久久久精品| voyeur盗摄精品| 欧美刺激午夜性久久久久久久| 欧美国产视频在线| 亚洲国产日日夜夜| 国产成人午夜片在线观看高清观看| 成人免费黄色在线| 91九色02白丝porn| 717成人午夜免费福利电影| www精品美女久久久tv| 亚洲成人在线免费| 欧洲精品在线观看| 日韩理论片网站| 日本乱人伦aⅴ精品| 亚洲欧美激情插 | 久久精品久久99精品久久| 91老司机福利 在线| 亚洲天堂中文字幕| 成人激情动漫在线观看| 国产精品高潮久久久久无| 国产伦精品一区二区三区免费| 欧美国产精品久久| 国产99久久久精品| 欧美一二三区在线| 美女视频网站黄色亚洲| 狠狠色综合播放一区二区| 91亚洲永久精品| 欧美成人a∨高清免费观看| 日韩三级电影网址| 日产国产欧美视频一区精品| 欧美一区二区三区在线看| 一区二区三区日韩精品| 不卡的电影网站| 亚洲美女免费在线| 久久久久久一二三区| 国产福利一区二区| 亚洲私人黄色宅男| 91国偷自产一区二区使用方法| 亚洲天堂免费看| 欧美日韩在线播| 国产精品亚洲第一| 日韩av中文在线观看| 欧美一区二区国产| 成人91在线观看| 亚洲一区二区在线免费看| 日韩一区二区不卡| 99精品欧美一区二区三区小说| 国产午夜精品一区二区三区嫩草| 欧美日韩你懂的| 久久综合狠狠综合久久激情| 国产91在线观看| 伊人色综合久久天天| 日韩视频在线观看一区二区| 在线精品视频小说1| 成人激情小说网站| 国产成人午夜片在线观看高清观看| 久久99国产精品成人| 肉色丝袜一区二区| 日韩久久久精品| 欧美va亚洲va香蕉在线| 51精品秘密在线观看| 欧美一区二区三区不卡| 欧美视频第二页| 欧美一区二区三区日韩| 欧美日韩你懂得| 欧美亚洲高清一区二区三区不卡| 91麻豆精品在线观看| 成人av免费在线播放| av午夜精品一区二区三区| 国产精品一区二区黑丝| 成人免费视频app| 波多野结衣亚洲| 91电影在线观看| 欧美一级高清片在线观看| 欧美久久婷婷综合色| 精品国产91亚洲一区二区三区婷婷| 欧美一区二区黄| 精品国产一二三| 一区二区三国产精华液| 国产91精品在线观看| 精品日韩一区二区三区免费视频| 一区二区三区久久| 国产九色sp调教91| 欧美精品xxxxbbbb| 亚洲国产成人av网| av电影一区二区| 国产精品色哟哟网站| 精品一区二区三区久久久| 欧美一区二区在线视频| 国产欧美精品在线观看| 亚洲小少妇裸体bbw| 国产成人精品综合在线观看 | 亚洲日本护士毛茸茸| 婷婷久久综合九色综合伊人色| 大陆成人av片| 国产精品美女www爽爽爽| 99免费精品视频| 亚洲精品少妇30p| 在线成人午夜影院| 韩国午夜理伦三级不卡影院| 在线免费一区三区| 亚洲精品日韩一| 99久久精品国产导航| 亚洲精品中文在线影院| 国产在线精品一区二区| 欧美tk丨vk视频| 久热成人在线视频| 久久综合久久综合九色| 国产精品91xxx| 欧美国产欧美综合| 国产河南妇女毛片精品久久久 | 欧美日韩视频在线一区二区| 国内外成人在线| 久久美女艺术照精彩视频福利播放| 国产一区二区成人久久免费影院| 亚洲美女少妇撒尿| 欧美一区永久视频免费观看| 国产精品一区二区三区四区| 中文字幕一区二区在线观看| 91国产成人在线| 国产精品一区久久久久| 亚洲天堂福利av| 亚洲精品一区二区三区福利 | 69堂亚洲精品首页| 国精产品一区一区三区mba视频| 久久精品视频在线看| 欧美三级电影网| 99久久久无码国产精品| 久久成人久久鬼色| 一区二区三区成人| 亚洲欧洲综合另类在线| 欧美一区2区视频在线观看| 色哟哟日韩精品| 成人激情视频网站| 国产一区二区h| 免费观看日韩av| 日韩av电影天堂| 午夜影院久久久| 午夜成人免费视频| 日韩高清一级片| 日韩电影在线一区二区三区| 亚洲网友自拍偷拍| 亚洲男同1069视频| 亚洲激情在线播放| 亚洲久本草在线中文字幕| 国产目拍亚洲精品99久久精品| 日韩精品一区二区三区三区免费| 97久久人人超碰| www.在线欧美| www.亚洲在线| 欧美伊人精品成人久久综合97| 懂色av一区二区夜夜嗨| 精品无人码麻豆乱码1区2区| 国产成人精品免费在线| caoporn国产一区二区| 91在线视频观看| 日本丶国产丶欧美色综合| 欧美日韩免费一区二区三区| 欧美日韩国产123区| 日韩一区二区中文字幕| 国产精品高潮呻吟久久| 亚洲精品一卡二卡| 国内精品伊人久久久久av影院 | 激情六月婷婷综合| 99免费精品视频| 日韩亚洲欧美成人一区| 国产精品天天看| 男男成人高潮片免费网站| 成人一区二区三区视频| 日韩视频永久免费| 伊人开心综合网| www.亚洲在线| 国产丝袜在线精品| 国产91精品欧美| 2023国产精品视频| 另类调教123区| 欧美另类变人与禽xxxxx|