《sql server 2005奧秘》第5章主要研究sql server 2005資料檔案資料的儲存,本節主要介紹的是按照hobt_id獲得表的第1個頁面
按照hobt_id獲得表的第1個頁面
在系統檢視sys.system_internals_allocation_units中,其container_id欄位就代表了hobt_id的值。所以執行下列**可以查詢:
/*定義臨時變數用於表示表的物件id*/光碟**:\**\0511.sql。declare @id int
/*定義臨時變數用於表示表的名稱*/
declare @tablename char(20)
/*定義臨時變數用於表示表的hobt_id*/
declare @hobtid bigint
set @tablename='t_test'
set @id=(select object_id from db_student.sys.objects where name=@tablename)
set @hobtid=(select hobt_id from db_student.sys.partitions where object_id=@id)
select @hobtid
select * from db_student.sys.system_internals_allocation_units where container_id=@hobtid
go
查詢結果如圖5-17所示。
圖5-17 獲得表的儲存頁面資訊
分析查詢得到的資料如下。
1.allocation_unit_id
這代表儲存單元的id,在資料庫中唯一。但是不是物件的hobt_id。
例項中查詢到值為72057594044088320。
2.type
這代表分配的儲存單元的型別。
例項中為1,代表該儲存單元儲存的資料是行內資料。
3.type_desc
這代表對type的文字描述資訊。
行內資料的描述為:in_row_data。
4.container_id
該字段的含義比較特殊。
當儲存的是行內資料,即type1時,該字段的值和hobt_id的值一致。兩者的關係如下:
db_student.sys.system_internals_allocation_units.container_id= db_student.sys.partitions.hobt_id
5.filegroup_id
檔案組id。
例項的值為1,代表資料檔案的檔案組。因為日誌檔案不適用於檔案組的概念,所以該項的值始終為0。
6.total_pages
該儲存單元分配的總頁面數。
例項為2,代表該錶分配了2個頁面。
7.used_pages
實際上已經使用的頁面數。
8.data_pages
包含下列資料的已經使用的頁面數,但不包括內部索引頁和分配管理頁。
行內資料
lob資料
行溢位資料
9.first_page
代表第1個頁面的資料檔案id和頁面id。
本例項中查詢到的值為0x2d0000000100。這中間就蘊含了資料檔案的id和資料頁面的id。
10.root_page
如果是b樹儲存結構,表示b樹的根頁面的檔案和頁面id,用16進製制數值來表示。
本例項中值為0x000000000000。
11.first_iam_page
對於索引,是第1個索引管理頁面(iam頁面)的資料檔案和頁面id,用16進製制數值來表示。
本例項中值為0x4e0000000100。
查詢表上分配的頁面
可以通過dbcc extentinfo命令來檢視給表分配的資料頁面的資訊。在【management studio】中執行下列命令。
dbcc traceon(3604)光碟**:\**\0512.sql。godbcc extentinfo(db_student,t_test)
go
查詢結果如圖5-21所示。
可以看到結果中有1個頁面(page_id=45)屬於給表分配的頁面。通過dbcc extentinfo命令可以判斷分配給表的頁面數量及頁號。而通過系統檢視可以查詢到首頁面號。
查詢結果是吻合的。
圖5-21 使用dbcc extentinfo命令檢視表的頁面資訊
總結研究表資料儲存的方法
通過上述研究步驟,我們可以總結一些研究表資料儲存的基本方法如圖5-23所示。
圖5-23 研究表資料儲存的方法
SQL Server 2005資料匯入
在進行sql server2005資料匯入匯出時,可以使用sql server提供的匯入匯出功能來進行資料的匯入匯出,也可以使用bcp工具來進行。資料匯入匯出功能 使用bcp工具進行匯出語法 bcp zlzx publish.dbo.billing subject out c zlzx billin...
SQL Server 2005海量資料處理
超大型資料庫的大小常常達到數百gb,有時甚至要用tb來計算。而單錶的資料量往往會達到上億的記錄,並且記錄數會隨著時間而增長。這不但影響著資料庫的執行效率,也增大資料庫的維護難度。除了表的資料量外,對錶不同的訪問模式也可能會影響效能和可用性。這些問題都可以通過對大表進行合理分割槽得到很大的改善。當表和...
sqlserver2005 資料庫報錯 !
sql server 檢測到基於一致性的邏輯 i o 錯誤 pageid 不正確 應為 1 2356872,但實際為 0 0 在檔案 d database x.mdf 中 偏移量為 0x0000047ed10000 的位置對資料庫 id 5 中的頁 1 2356872 執行 讀取 期間,發生了該錯誤...