1. 程式人生 > >Pro SQL Server Internals, 2nd edition》CHAPTER 1 Data Storage Internals節選翻譯

Pro SQL Server Internals, 2nd edition》CHAPTER 1 Data Storage Internals節選翻譯

 翻譯原文:《》

作者:Dmitri Korotkevitch

資料頁和資料行

資料庫中的空間被劃分為很多個大小為8KB的邏輯頁。這些邏輯頁從0開始連續編號,並且它們可以被檔案編號和頁碼引用。這些頁面編號總是連續的,這樣當SQL Server新增資料庫檔案的時候,新頁面在檔案中最大頁面編號的基礎上加一進行編號。類似地,當SQL Server壓縮檔案時,它會從檔案中刪除編號最大的頁面。

一般來說,SQL Server儲存和處理資料庫中的資料有三種不同的方法或技術。使用傳統的行儲存模式,這些資料將與來自所有列的資料組合在一起儲存在資料行中。

SQL Server 2012引入了列儲存索引和列式儲存。這種技術是以每列而不是每行儲存資料。我們將在本書的第七章節介紹列式儲存。

最後,SQL Server 2014中引入了記憶體計算技術並在SQL Server 2016中進一步改進了。儘管是怕出現冗餘它們還是繼續將資料儲存在磁碟中,但行式儲存和列式儲存的儲存格式還是有很大的不同的。我們將在本書的第8章中討論該記憶體計算技術。

書的這一部分討論的是行式儲存和經典的B(B指的是Balanced平衡而不是Binary二叉)樹索引和堆。圖1-6顯示了資料頁的結構

一個96位元組的頁首包含一頁的各種資訊,如頁面所屬的物件(物件頁面)、行數和在頁面的空餘可利用空間,以及如果一個介面在索引頁鏈時它連結到前一頁和後一頁,等等。

頁首後面是實際資料儲存的區域。緊接著是空閒空間。最後,還有一個槽陣列,它是一個由兩個位元組的條目組成的塊,指示相應的資料行從該頁開始的偏移量。

槽陣列表示頁面上資料行的邏輯順序。如果頁面上的資料需要按照索引鍵的順序排序,SQL Server不會對頁面上的資料行進行物理排序,而是根據索引排序順序填充槽陣列。槽0(圖1-6最右邊)儲存頁上鍵值最小的資料行的偏移量;槽1,第二小的鍵值;等等。我們將在下一章更深入地討論索引。

SQL Server提供了一系列豐富的系統資料型別,根據邏輯可以分為不同的兩組:固定長度組和可變長度組。固定長度的資料型別,如int, datetime, char,以及其他型別,他們總是使用相同數量的儲存空間不管他們的大小是多少,即使它是空的。例如,int列總是使用4位元組,而nchar(10)列總是使用20位元組儲存資訊。

相反,對於可變長度的資料型別,如varchar、varbinary和其他一些型別,他們使用的儲存空間與儲存資料所需的空間相同,在此基礎上再加兩個位元組。例如,nvarchar(4000)列僅使用12位元組儲存5個字元的字串,在大多數情況下,使用2位元組儲存空值。我們將在本章後面討論變長列不為空值使用儲存空間的情況。

讓我們看看資料行的結構,如圖1-7所示。

行的前兩個位元組,稱為狀態位A和狀態位B,是其中包含關於行的資訊的點陣圖,比如行的型別,是記錄如果行已經被邏輯刪除(重定向)和如果行有NULL值、可變長度列和版本控制標記的點陣圖。

行中接下來的兩個位元組用於儲存固定長度的資料長度。然後是固定長度資料本身。

在固定長度的資料部分之後,有一個空點陣圖,它包含兩個不同的資料元素。第一個兩個位元組的元素是行中的列數。第二個是空點陣圖陣列。這個陣列對錶的每一列使用一位,不管它是否為可空型別。

空點陣圖總是出現在堆表或聚集索引葉行的資料行中,即使沒有可空型別列。但是,當索引中沒有可空型別列時,空點陣圖不會出現在非葉索引行中,也不會出現在非聚集索引的葉級行中。

在空點陣圖之後,是行中可變長度的資料部分。它從行中可變長度列的兩位元組數開始,然後是列偏移量陣列。SQL Server為行中每個變長列儲存一個兩位元組偏移量,即使該值為空。然後是資料的實際可變長度部分。最後,行末尾有一個可選的14位元組版本控制標記。此標記用於需要行版本控制的操作,例如線上索引重建、樂觀隔離級別、觸發器和其他一些操作。

提示:我們將在第6章討論索引維護,在第9章討論觸發器,在第21章討論樂觀隔離級別。

讓我們建立一個表,填充一些資料,並檢視實際的行資料。程式碼如列表1-4所示。複製函式將第一個引數提供的字元重複10次。

列表1 - 4 資料行格式:表建立

一個為標準化化但眾所周知的DBCC IND命令返回關於表頁面分配的資訊。你可以在圖1-8中看到該命令的輸出。

表1-8 DBCC IND 輸出

有兩頁是屬於這個表的。第一個它的頁面型別=10,是一種特殊型別的頁面,稱為IAM分配對映。這個頁面屬於特定物件的頁面。但是,現在不要把焦點放在這裡,因為我們將在本章後面討論分配對映頁面。

提示:SQL Server 2012引入了另一個未標準化的資料管理功能(DMF) ,sys.dm_db_ database_page_allocations可以用作DBCC IND命令的替代。與DBCC IND相比,此DMF的輸出提供了更多資訊,並且可以與其他系統dmv和/或目錄檢視連線。

頁面型別=1的頁面是包含資料行的實際資料頁。頁面檔案編碼和頁碼列顯示了頁面的實際檔案和頁碼。你可以使用另一個未標準化的命令DBCC PAGE來檢查其內容,如列表1-5所示。

列表1-5 資料行格式:DBCC PAGE  呼叫

列表1-6顯示了對應於第一行資料的DBCC頁面的輸出。SQL Server以位元組交換的順序儲存資料。例如,兩個位元組的值0001將儲存為0100。

圖1-9 第一資料行

正如你所看到的,行從兩個狀態位開始,然後是值為0800的兩個位元組。0008是位元組交換值,是行中列數屬性的偏移量。這個偏移量告訴SQL Server行中固定長度的資料部分在哪裡結束。接下來的4個位元組用於儲存固定長度的資料,在我們的示例中是ID列。然後是兩個位元組的值,該值顯示資料行有四列,然後是一個一個位元組的空點陣圖。如果只有四列,點陣圖中的一個位元組就足夠了。它以二進位制格式儲存04的值,即00000100。它表示行中的第三列包含空值。接下來的兩個位元組儲存行中可變長度列的數量,即3(位元組順序為0300)。它後面是一個偏移量陣列,其中每兩個位元組儲存變數列資料結束的偏移量。如您所見,即使Col2為NULL,它仍然使用偏移陣列中的插槽。最後,還有來自可變長度列的實際資料。現在,讓我們看看第二個資料行。清單1-7顯示DBCC頁面輸出,圖1-10顯示行資料。

第二行中的NULL位圖表示二進位制值00001010,這表明Col1和Col3是NULL。即使表有三個可變長列,行中可變長列的數量表明偏移陣列中只有兩列/槽。SQL Server不維護行中尾隨的空變長列的資訊。

提示:你可以通過建立表來減少資料行的大小,方法是將通常儲存null值的變長列定義為CREATE TABLE語句中的最後一列。這是CREATE TABLE語句中列的順序唯一重要的情況

固定長度的資料和內部屬性必須適合單個數據頁上可用的8060位元組。如果不是這樣,SQL Server不允許你建立表。例如,列表1-8中的程式碼產生了一個錯誤。

建立或更改表“BadTable”失敗,因為最小行大小為8067,包括7位元組的內部開銷。這超過了錶行大小為8060位元組的最大允許值。

相關推薦

翻譯:《Pro SQL Server Internals, 2nd edition》CHAPTER 1 Data Storage Internals中的Data Pages and Data Rows一節

觸發 nchar name 詳細 重建 server into evel 單位 原文鏈接:file:///E:/%E2%80%9C%E6%B2%BB%E6%9C%AA%E7%97%85%E2%80%9D%E5%81%A5%E5%BA%B7%E7%AE%A1%E7%90%86

Pro SQL Server Internals, 2nd edition》翻譯的CHAPTER 1 Data Storage Internals中的Data Pages and Data Rows一節

資料頁和資料行   資料庫中的空間被劃分為邏輯8KB頁面。這些頁面從開始就連續編號。它們可以通過指定檔案ID和頁碼來引用。頁碼是始終是連續的,這樣當SQL Server增長資料庫檔案時,新頁面就會開始編號從檔案的最高頁碼加1。類似地,當SQL Server收縮檔案時,它將刪除檔案中頁數最多的頁面

Pro SQL Server Internals, 2nd edition》的CHAPTER 1 Data Storage Internals中的Data Pages and Data Rows(翻譯)

資料頁和資料行 資料庫中的空間被劃分為邏輯8KB的頁面。這些頁面是以0開始的連續編號,並且可以通過指定檔案ID和頁號來引用它們。頁面編號都是連續的,這樣當SQL Server增長資料庫檔案時,從檔案中的最高頁面編號+1開始對新頁面進行編號。類似地,當SQL Server收縮檔案時,它將從檔案中刪除最高數量的

翻譯內容)《Pro SQL Server Internals, 2nd edition》(pdf已傳至群檔案)的CHAPTER 1 Data Storage Internals中的Data Pages and Data Rows一節(即P8~P14)

SQL Server中的資料儲存   一般來說,SQL Server儲存和與資料庫中的資料一起工作。使用基於行的經典儲存,資料被儲存在資料行中。將所有列的資料組合在一起。 SQL Server 2012引入了CurnSt店索引和基於列的儲存。這家技術商店每個列的資料而不是每行的資料。我們將在第

翻譯內容)《Pro SQL Server Internals, 2nd edition》的CHAPTER 1 Data Storage Internals中的Data Pages and Data Rows一節(即P8~P14)

acc 其他 管理功能 超過 相同 pro dbo off primary 原文鏈接:file:///E:/%E2%80%9C%E6%B2%BB%E6%9C%AA%E7%97%85%E2%80%9D%E5%81%A5%E5%BA%B7%E7%AE%A1%E7%90%86%E

Pro SQL Server Internals, 2nd edition》CHAPTER 1 Data Storage Internals節選翻譯

 翻譯原文:《》 作者:Dmitri Korotkevitch 資料頁和資料行 資料庫中的空間被劃分為很多個大小為8KB的邏輯頁。這些邏輯頁從0開始連續編號,並且它們可以被檔案編號和頁碼引用。這些頁面編號總是連續的,這樣當SQL Server新增資料庫檔案的時候,新頁面在檔案中最大頁面編號的基礎上加一進行編號

第十二週翻譯-《Pro SQL Server Internals, 2nd edition》

《Pro SQL Server Internals, 2nd edition》 作者:Dmitri Korotkevitch 翻譯:賴慧芳 譯文: 專業SQL伺服器內部 瞭解在引擎蓋下發生了什麼,以及它是如何影響你的 第二版 資料頁和資料行 資料庫中的空間被劃分為邏輯8KB頁面。這些頁面從0開

Pro SQL Server Internals》之Data Pages Data Rows

本文選自《Pro SQL Server Internals》 作者: Dmitri Korotkevitch 出版社: Apress 出版年: 2016-12-29 頁數: 804 作者簡介:Dmitri Korotkevitchis是微軟SQL Server MVP和微軟認證大師。作為應用程式和資

第十二周翻譯-《Pro SQL Server Internals, 2nd edition》

開始 serve 影響 文件中 交換 對象 必須 family 排序 《Pro SQL Server Internals, 2nd edition》 作者:Dmitri Korotkevitch 翻譯:賴慧芳 譯文: 專業SQL服務器內部 了解在引擎蓋下發生了什麽,以及它是

Pro SQL Server Internals, 2nd edition》節選翻譯

章節1:資料儲存內部構件 資料頁和資料行     資料庫中的空間被劃分為有邏輯結構的頁面,每頁8KB。這些頁面從0開始連續編號,可以通過指定檔案ID和頁碼來引用它們。頁面編號總是連續的,這樣當SQL Server資料庫檔案增多時,新頁面的編號將從檔案中最高的頁碼加1開始。類似地,當SQ

Pro SQL Server Internals, 2nd edition》的CHAPTER 2 Tables and Indexes中的Clustered Indexes一節

    聚集索引 聚集索引指示表中資料的物理順序, 表中的資料根據聚集索引鍵進行排序。表只能定義一個聚集索引。 假設您要使用資料在堆表上建立聚集索引。作為第一步 (如圖2-5 所示), sql server 將建立資料的另一個副本, 然後根據群集金鑰的值進行排序。資料頁連結在一個雙

翻譯:《Pro SQL Server Internals2nd edition》的CHAPTER 2 Table and Indexes中的Clustered Indexes

原文連結:http://www.allitebooks.com/pro-sql-server-internals-2nd-edition/ 原文作者:Dmitri Korotkevitch 聚集索引 聚集索引指示表中資料的物理順序,該表根據聚集索引鍵進行排序。 該表只能定義一個聚集索引。 假設您要在堆

節選翻譯Pro SQL Server Internals, 2nd edition》(P36-P45)

本文選自《Pro SQL Server Internals》 作者: Dmitri Korotkevitch 原文連結:http://www.doc88.com/p-4042504089228.html CHAPTER 2 ■ TABLES AND INDEXES: INTERNAL STRUCTURE

翻譯節選Pro SQL Server Internals, 2nd edition》CHAPTER 2(含圖解)

聚簇索引 文章選自:《Pro SQL Server Internals, 2nd edition》CHAPTER 2 Tables and Indexes 作者:Dmitri Korotkevitch 一個聚簇索引表明表中資料的物理順序,該順序是根據聚簇索引鍵排序的。一個表只能定義一個聚簇索引

Pro SQL Server Internals, 2nd edition》的CHAPTER 2 Tables and Indexes中的Clustered Indexes一節(翻譯

  《Pro SQL Server Internals》 作者: Dmitri Korotkevitch 出版社: Apress出版年: 2016-12-29頁數: 804定價: USD 59.99裝幀: Paperbac

Pro SQL Server Internals, 2nd edition》的CHAPTER 7 Designing and Tuning the Indexes中的Clustered Index Design Considerations一節(即P155~P165)

聚集索引設計注意事項 每次更改聚簇索引鍵的值時,都會發生兩件事。首先,SQL Server將行移動到聚簇索引頁鏈和資料檔案中的不同位置。其次,它更新了row-id,它是聚集索引鍵。儲存了行id,需要在所有非聚簇索引中更新。就I / O而言,這可能是昂貴的,特別是在批量更新的情況下。此外,它可以增加聚簇索引的

節選翻譯Pro SQL Server Internals, 2nd edition》(P155-P165)

本文選自《Pro SQL Server Internals》 作者: Dmitri Korotkevitch 原文連結:http://www.doc88.com/p-4042504089228.html       CHAPTER 7      

Pro SQL Server Internals, 2nd edition》節選翻譯(三)

第七章 設計和優化索引 聚集索引設計注意事項   在你改變聚集索引鍵的值時,將會發生兩件事。首先,SQL server移動行到聚集索引頁鏈和資料檔案中的不同位置。第二,它更新聚集索引鍵的行編號。這個行編號被儲存,而且被再次更新在非聚集索引裡。就I/O而言,這可能非常昂貴,尤其是在批處理更新的情況下。另外,

Pro SQL Server Internals, 2nd edition》(pdf已傳至群檔案)的CHAPTER 7 Designing and Tuning the Indexes中的Clustered Index Design Considerations一節(即P155~P165)

聚集索引設計考慮因素 每次你改變聚簇索引鍵的值時,都會發生兩件事。 首先,SQL Server將行移動到聚簇索引頁鏈和資料檔案中的不同位置。 其次,它更新聚集索引鍵,行編號。 行編號被儲存起來而且要在所有非聚簇索引中更新。 對於I / O而言,這花銷可能很昂貴,尤其是在批處理更新的情況下。此外,它可以增加聚

翻譯:《Pro SQL Server Internals, 2nd edition》CHAPTER 7 Designing and Tuning the Indexes

文章選自:《Pro SQL Server Internals, 2nd edition》CHAPTER 7 Designing and Tuning the Indexes中的Clustered Index Design Considerations一節 作者:Dmitri Korotkevitch Cl