SQL Server中TempDB管理(version store的邏輯結構)
原文來自:
http://blogs.msdn.com/b/sqlserverstorageengine/archive/tags/tempdb/
前面幾篇博文已經初步介紹了版本儲存區,現在我們來了解一下它的邏輯結構,看看它究竟是如何儲存不同結構的表格和索引行的。其實我們只要看一下DMV
sys.dm_tran_version_store這個DMV就夠了.
這個DVM檢視顯示了版本儲存區全部邏輯結構。有兩點值得注意。第一,版本儲存區也和資料頁面索引頁面一樣由8k大小的頁組成。這些頁存在緩衝池中,可以在TempDB面臨記憶體壓力時被寫入磁碟。第二,版本儲存區儲存的是完整的二進位制檔案,就像在資料頁儲存的一樣。這種二進位制檔案分為前後兩個部分,然後在SQL
Server內部會對其進行組合。這使得行版本儲存獨立於它所屬的物件的架構,即一個儲存區的頁可以儲存來自不同表不同索引的行,甚至可能來自同一例項下的不同資料庫。換句話說,版本儲存區是一個SQL
Server例項下公用的。和資料頁和索引頁一樣,在記憶體緊張的時候版本儲存頁也會從緩衝池中被清除。
如果檢視名為sys.dm_tran_version_store的DMV會發現,我們會發現版本行有很多原始資料或索引頁面所沒有的的新屬性,如database-id,行長度等。您可能會問,行版本同樣受到SQL
Server最大行長度8060的限制,那麼它是如何儲存原始資料行(最大行長度也是8060)並增長新屬性的呢。答案是,資料行在版本儲存頁實際上被分成了2行,只是在DMV檢視中表現成一大行。
下面是一個版本儲存的例子。事務57已經更新了三個不同的行,同時事務58只更新1行內容。請注意,如果一個事務中多次更新同一行,只會建立一個行版本,因為對其他事務來說,它從一開始就持有了X鎖。
transaction_sequence_num
version_sequence_num database_id
------------------------
-------------------- -----------
57 1 9
57 2 9
57 3 9
58 1 9
rowset_id status min_length_in_bytes
--------------------
------ -------------------
72057594038321152 0
12
72057594038321152 0
12
72057594038321152 0
12
72057594038386688 0
16
record_length_first_part_in_bytes
---------------------------------
29
29
29
33
record_image_first_part
--------------------------------------------------------------------
0x50000C0073000000010000000200FCB000000001000000270000000000
0x50000C0073000000020000000200FCB000000001000100270000000000
0x50000C0073000000030000000200FCB000000001000200270000000000
0x500010000100000002000000030000000300F800000000000000002E0000000000
record_length_second_part_in_bytes record_image_second_part
----------------------------------
----------------------
0 NULL
0 NULL
0 NULL
0 NULL
相關文章
- 如何在SQL Server中最佳化TempdbSQLServer
- PostgreSQL:邏輯結構SQL
- oracle 邏輯結構Oracle
- SQL Server 索引結構SQLServer索引
- 理解Nginx中Server和Location的匹配邏輯NginxServer
- 3:Oracle體系結構(邏輯結構)Oracle
- Oracle OCP(41):邏輯結構Oracle
- HBase學習之Hbase的邏輯結構和物理結構
- 檔案的邏輯結構、檔案目錄
- SQL Server中GROUP BY(連結)SQLServer
- 物理結構和邏輯結構更通俗解釋
- SQL Server資料庫出現邏輯錯誤的資料恢復SQLServer資料庫資料恢復
- 資料結構知識點--儲存結構與邏輯結構資料結構
- 理解SQL Server 2008索引的儲存結構YDSQLServer索引
- 從巢狀結構中取值時如何編寫兜底邏輯巢狀
- LVM 邏輯卷管理LVM
- C++ 煉氣期之基本結構語法中的底層邏輯C++
- 如何在 Ubuntu 中管理和使用邏輯卷管理 LVMUbuntuLVM
- 在Linux中,如何使用LVM管理邏輯卷?LinuxLVM
- 如何將SQL寫成複雜邏輯 和構造資料SQL
- 11 管理邏輯備庫
- LVM_邏輯卷管理LVM
- SQL Server Page資料庫結構深入分析SQLServer資料庫
- sql優化之邏輯優化SQL優化
- sql生成可讀性邏輯圖SQL
- Vue原始碼探究-資料繫結邏輯架構Vue原始碼架構
- 物流供應鏈管理是什麼?供應鏈物流管理系統邏輯結構應用
- SQL Server 2008中Analysis Services的新特性——深入SQL Server 2008SQLServer
- JS 中的邏輯運算子JS
- Python中的邏輯表示式Python
- 如何搭建文章結構——常見技術文章的邏輯框架框架
- 賽靈思(Xilinx)BlockRam(Bram)的結構與讀邏輯解釋BloC
- SQL SERVER日常運維巡檢系列——結構設計SQLServer運維
- Linux下LVM邏輯卷管理LinuxLVM
- SAP CRM服務訂單頁面顯示組織結構管理區域的實現邏輯
- Go快速入門 03 | 控制結構:if、for、switch 邏輯語句Go
- 微信小程式學習總結01:專案結構中增加業務邏輯目錄微信小程式
- SQL Server 批量生成資料庫內多個表的表結構SQLServer資料庫
- NgRx Store createSelector 返回的 selector 執行取數邏輯的單步除錯除錯