這個(gè)小工具挺好用的,對(duì)入想深入研究或者剛剛學(xué)SQLSERVER但是想對(duì)SQL有更深入了解的朋友們特別有用。
InternalsViewerInstaller.msi 安裝就不說(shuō)了,直接雙擊安裝,安裝前最好先關(guān)閉SSMS,官方上說(shuō):可以用在SQL2005 SQL2008 ,我自己的電腦是SQL2005 Windows7可以使用。
下載安裝好之后,再打開SSMS,會(huì)看到SSMS的菜單增加了一個(gè)
點(diǎn)擊Internals Viewer會(huì)有兩個(gè)菜單:display transaction log 和Allocation Map
不知道為什么display transaction log用不了,本人非常想知道display transaction log是什么功能
只好點(diǎn)擊“Allocation Map” ,點(diǎn)擊之后會(huì)彈出 連接對(duì)話框,大家選擇驗(yàn)證方式連接就可以了不多說(shuō)了
打開之后會(huì)看到如下圖
上面幾個(gè)按鈕
選擇要查看的數(shù)據(jù)庫(kù)
PFS:查看數(shù)據(jù)庫(kù)的空閑頁(yè)面情況
buffer pool:看下圖
small:調(diào)整小方格的大小
key:是否顯示數(shù)據(jù)庫(kù)的表,如果不點(diǎn)擊key下面不會(huì)顯示表的
File Details:看上面那個(gè)圖
小方格顏色的含義
點(diǎn)擊某個(gè)小方格就會(huì)顯示那個(gè)小方格的信息,每個(gè)小方格代表一個(gè)頁(yè)面
小方格的顏色是跟下面表格的顏色是一一對(duì)應(yīng)的,表示這些表格數(shù)據(jù)在數(shù)據(jù)庫(kù)中的分布情況
鼠標(biāo)在小方格上移動(dòng)會(huì)看到這個(gè)小方格屬于哪個(gè)表
鼠標(biāo)左鍵單擊某個(gè)小方格會(huì)顯示這個(gè)頁(yè)面的信息
如果你想看某個(gè)表的數(shù)據(jù),你可以點(diǎn)擊那個(gè)表,然后就會(huì)顯示出那個(gè)表的數(shù)據(jù)分布情況,你點(diǎn)擊某個(gè)小方格就可以看到那個(gè)表的數(shù)據(jù)了~
先從數(shù)據(jù)庫(kù)的開頭幾個(gè)頁(yè)面說(shuō)起吧
數(shù)據(jù)庫(kù)第1頁(yè):file header page
數(shù)據(jù)庫(kù)第2頁(yè):PFS (Page Free Space) ,也叫頁(yè)面自由空間,該頁(yè)面用來(lái)跟蹤一個(gè)文件中每一個(gè)特定頁(yè)面的利用率情況
數(shù)據(jù)庫(kù)第3頁(yè):GAM 全局分配映射(Global Allocation Map,GAM)頁(yè)面 這些頁(yè)面記錄了哪些區(qū)已經(jīng)被分配并用作何種用途
數(shù)據(jù)庫(kù)第4頁(yè):SGAM 共享全局分配映射(Shared Global Allocation Map,SGAM)頁(yè)面 這些頁(yè)面記錄了哪些區(qū)當(dāng)前被用作混合類型的區(qū),并且這些區(qū)需含有至少一個(gè)未使用的頁(yè)面
第5頁(yè)沒(méi)有數(shù)據(jù)
第6頁(yè)沒(méi)有數(shù)據(jù)
數(shù)據(jù)庫(kù)第7頁(yè):DCM 差異變更(Differential Changed Map,DCM)頁(yè)面 他跟蹤一個(gè)文件中的哪一個(gè)區(qū)在最新一次完整數(shù)據(jù)庫(kù)備份之后被修改過(guò)。SQLSERVER
用在增量備份時(shí)只對(duì)已發(fā)生數(shù)據(jù)變更的分區(qū)進(jìn)行增量備份即可
資料:SQL Server 2008 存儲(chǔ)結(jié)構(gòu)之DCM、BCM
數(shù)據(jù)庫(kù)第8頁(yè):BCM 批量更改映射(Bulk Changed Map)頁(yè)面,該頁(yè)面當(dāng)文件中的一個(gè)區(qū)在最小量或批量日志操作中被
使用時(shí)用到。
數(shù)據(jù)庫(kù)第9頁(yè):sys.sysqnames 存在于每個(gè)數(shù)據(jù)庫(kù)中。
4 字節(jié) ID 標(biāo)記的每個(gè)命名空間或限定名均存在對(duì)應(yīng)的一行。
像dbcc checkprimaryfile命令的信息應(yīng)該就存儲(chǔ)于這個(gè)頁(yè)面中
數(shù)據(jù)庫(kù)第10頁(yè):boot page 數(shù)據(jù)庫(kù)根據(jù)這個(gè)頁(yè)面的信息來(lái)啟動(dòng)的
IAM頁(yè)面:
下面那里寫錯(cuò)了,應(yīng)該是堆表才有
具體頁(yè)面信息
每個(gè)小方格代表一個(gè)頁(yè)面,左邊這些信息估計(jì)是使用了這兩條語(yǔ)句:DBCC IND() DBCC PAGE()
下方顯示對(duì)應(yīng)的表數(shù)據(jù)
左上角顯示了這個(gè)頁(yè)面是數(shù)據(jù)頁(yè)還是IAM頁(yè)
數(shù)據(jù)行的結(jié)構(gòu)
關(guān)于數(shù)據(jù)行的結(jié)構(gòu),大家可以看文章最開始給出的
其中狀態(tài)A為如下說(shuō)明:
bit0:版本信息,在SQL Server 2005/08總是為0
bit1-3: 0=(primary record);1=(forwarded record);2=(forwarding stud);3=(index record);4=(溢出數(shù)據(jù));5=(ghost索引記錄);6=(ghost數(shù)據(jù)記錄)
bit4:表示存在NULL位圖(在數(shù)據(jù)行里SQL2005/08總存在NULL位圖)
bit5:表示存在變長(zhǎng)列
bit6:未啟用
bit7:表示存在幽靈記錄
本例中30->00110000 它是一個(gè)行屬性的位圖 從高位存到地位(右邊第一位是bit0),bit4為1即存在變長(zhǎng)列的字段,因?yàn)樵赟QLServer2005/2008中總存在NULL位圖,所以bit5也為1。
狀態(tài)位B在SQLServer2005//2008中未啟用,所以為00
IAM頁(yè)和數(shù)據(jù)頁(yè)的差別:
堆表只依靠表里的IAM頁(yè)(索引分配映射頁(yè))將堆的頁(yè)面聯(lián)系在一起,IAM里記錄了頁(yè)面編號(hào),頁(yè)面位置
紅色的小方格就是記錄了sys.syscolpars這張表他的數(shù)據(jù)頁(yè)面在數(shù)據(jù)庫(kù)中的分布情況