查看SQLSERVER內部數據頁面的小插件Internals Viewer
感覺internals viewer這個名字起得很好,內部查看。
這個小工具是我之前看園子里的某大俠轉載的文章是看到的
文章地址:
SQL Server2008存儲結構之堆表、行溢出
http://www.cnblogs.com/trams/archive/2010/09/11/1823727.html
這幾天研究了一下這個小工具,發現挺好用的,對入想深入研究或者剛剛學SQLSERVER但是想對SQL有更深入了解的朋友們特別有用
先給出下載地址,這個是codeplex上的一個項目:
http://internalsviewer.codeplex.com/
我也上傳到了自己的網盤,大家也可以到我的網盤下載:http://www.kuaipan.cn/file/id_4401224786924003.htm
InternalsViewerInstaller.msi 安裝就不說了,直接雙擊安裝,安裝前最好先關閉SSMS
官方上說:可以用在SQL2005 SQL2008 ,我自己的電腦是SQL2005 Windows7可以使用
下載安裝好之后,再打開SSMS,會看到SSMS的菜單增加了一個
點擊Internals Viewer會有兩個菜單:display transaction log 和Allocation Map
不知道為什么display transaction log用不了,本人非常想知道display transaction log是什么功能
只好點擊“Allocation Map” ,點擊之后會彈出 連接對話框,大家選擇驗證方式連接就可以了不多說了
打開之后會看到如下圖
上面幾個按鈕
選擇要查看的數據庫
PFS:查看數據庫的空閑頁面情況
buffer pool:看下圖
small:調整小方格的大小
key:是否顯示數據庫的表,如果不點擊key下面不會顯示表的
File Details:看上面那個圖
小方格顏色的含義
點擊某個小方格就會顯示那個小方格的信息,每個小方格代表一個頁面
小方格的顏色是跟下面表格的顏色是一一對應的,表示這些表格數據在數據庫中的分布情況
鼠標在小方格上移動會看到這個小方格屬於哪個表
鼠標左鍵單擊某個小方格會顯示這個頁面的信息
如果你想看某個表的數據,你可以點擊那個表,然后就會顯示出那個表的數據分布情況,你點擊某個小方格就可以看到那個表的數據了~
先從數據庫的開頭幾個頁面說起吧
數據庫第1頁:file header page
數據庫第2頁:PFS (Page Free Space) ,也叫頁面自由空間,該頁面用來跟蹤一個文件中每一個特定頁面的利用率情況
數據庫第3頁:GAM 全局分配映射(Global Allocation Map,GAM)頁面 這些頁面記錄了哪些區已經被分配並用作何種用途
數據庫第4頁:SGAM 共享全局分配映射(Shared Global Allocation Map,SGAM)頁面 這些頁面記錄了哪些區當前被用作混合類型的區,並且這些區需含有至少一個未使用的頁面
第5頁沒有數據
第6頁沒有數據
數據庫第7頁:DCM 差異變更(Differential Changed Map,DCM)頁面 他跟蹤一個文件中的哪一個區在最新一次完整數據庫備份之后被修改過。SQLSERVER
用在增量備份時只對已發生數據變更的分區進行增量備份即可
資料:SQL Server 2008 存儲結構之DCM、BCM
數據庫第8頁:BCM 批量更改映射(Bulk Changed Map)頁面,該頁面當文件中的一個區在最小量或批量日志操作中被
使用時用到。
數據庫第9頁:sys.sysqnames 存在於每個數據庫中。
4 字節 ID 標記的每個命名空間或限定名均存在對應的一行。
像dbcc checkprimaryfile命令的信息應該就存儲於這個頁面中
數據庫第10頁:boot page 數據庫根據這個頁面的信息來啟動的
http://www.cnblogs.com/double-K/p/5557748.html#top
m_type=15 file header page 第1頁
m_type=11 PFS 第2頁
m_type=8 GAM 第3頁
m_type=9 SGAM 第4頁
m_type=0 保留頁
m_type=0 保留頁
m_type=16 DCM 第7頁
m_type=17 BCM 第8頁
IAM頁面
下面那里寫錯了,應該是堆表才有
具體頁面信息
每個小方格代表一個頁面,左邊這些信息估計是使用了這兩條語句:DBCC IND() DBCC PAGE()
下方顯示對應的表數據
左上角顯示了這個頁面是數據頁還是IAM頁
數據行的結構
關於數據行的結構,大家可以看文章最開始給出的
文章地址: SQL Server2008存儲結構之堆表、行溢出
http://www.cnblogs.com/trams/archive/2010/09/11/1823727.html
我摘抄一部分
其中狀態A為如下說明:
bit0:版本信息,在SQL Server 2005/08總是為0
bit1-3: 0=(primary record);1=(forwarded record);2=(forwarding stud);3=(index record);4=(溢出數據);5=(ghost索引記錄);6=(ghost數據記錄)
bit4:表示存在NULL位圖(在數據行里SQL2005/08總存在NULL位圖)
bit5:表示存在變長列
bit6:未啟用
bit7:表示存在幽靈記錄
本例中30->00110000 它是一個行屬性的位圖 從高位存到低位(右邊第一位是bit0),bit4為1即存在變長列的字段,因為在SQLServer2005/2008中總存在NULL位圖,所以bit5也為1。
狀態位B在SQLServer2005//2008中未啟用,所以為00
IAM頁和數據頁的差別
堆表只依靠表里的IAM頁(索引分配映射頁)將堆的頁面聯系在一起,IAM里記錄了頁面編號,頁面位置
紅色的小方格就是記錄了sys.syscolpars這張表他的數據頁面在數據庫中的分布情況
關於這個軟件
我點擊了一下IAM頁面下方的小方格就報錯了,然后彈出一個對話框,原來這個軟件使用.NET來編寫的
我們國人什么時候也能夠寫一個呢?
----------------------------------------------------------------------------------------------------
最后附上各個系統頁面的作用和詳細介紹地址
PFS頁面介紹: http://dev.21tx.com/2011/11/24/11378.html
DCM BCM頁面介紹: http://tech.it168.com/a2010/0921/1106/000001106857.shtml
GAM SGAM頁面介紹:http://www.efficient-it.com.cn/space/78/viewspace/itemid/6756.html