国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

數據庫空間管理 學習筆記

2024-07-21 02:50:49
字體:
來源:轉載
供稿:網友
數據庫空間管理 學習筆記

SQL Server 中數據存儲的基本單位是頁(Page)。磁盤I/O 操作在頁級執行。

SQL Server 讀取或寫入數據的最小單位就是以8 KB 為單位的頁。

每頁的開頭是一個96 B 的頁頭,用于存儲有關頁的系統信息。包括頁碼、頁類型、頁的可用空間,以及擁有該頁

的對象的分配單元ID。不同類型的數據,存儲在不同類型的頁面里。

在正常數據頁上,數據行緊接著頁的標頭按順序放置。頁的末尾是行偏移量表,對于頁中的每一行,每個行偏移表都包含一個條目。

每個條目記錄對應行的第一個字節與頁首的距離。行偏移表中的條目的順序與頁中行的順序相反。

------------------此處插入宋大神的注解------------------------

除了頁頭占用的空間和行偏移矩陣占用的空間,中間剩下的空間就是給數據行使用的。一個數據行中還存在其他的信息用于表示該行數據,具體的結構是這樣的:狀態位A 1字節狀態位B 1字節定長數據類型的長度 2字節定長數據的內容 具體定長數據字節列數 2字節NULL位圖 列數/8個字節變長列的個數 2字節變長列的偏移矩陣 變長列個數*2個字節變長列的數據 具體變長數據字節 這些最少占據1+1+2+2+1=7

-------------------------------------------------------------------

輸出指定的頁面,可以使用:DBCC PAGE(<db_id>, <file_id>, <page_id>, <format_id>)

Db_id 可以從sp_helpdb 的結果中得到。

File_id 可以從sp_helpfile 的結果中得到。

Format_id 是你指定的輸出格式。

在運行DBCC PAGE 之前,還需要打開跟蹤標志(trace flag)3604

在 SQL Server 中,行不能跨頁,屬于同一行的所有字段的數據都要放在同一個頁面里。頁的最大數據量是8 060 B(8 KB)。

所以一般數據類型字段所組成的一行,最長加起來不能超過8 KB。

但是,這一限制不包括Text/Image數據類型字段的數據。

這些類型字段的數據會被單獨存放在LOB(LargeObject)頁面里。

SQL Server 2005 開始的版本中,提供了varchar(max)、nvarchar(max)、varbinary(max)這樣的數據類型。

如果包含這一類數據類型字段的行,總長不超過8 KB,數據還是會一起存放在普通數據頁面里。

如果總長超過了8 KB,SQL Server 就會把這些字段的數據分開,單獨存放在一種叫Row-Overflow(行溢出)的頁面里。

區(Extent)是8 個物理上連續的頁的集合,用來有效地管理頁。所有頁都存儲在區中。

• 統一區,由單個對象所有。區中的所有8 頁只能由一個對象使用。

• 混合區,最多可由8 個對象共享。區中8 頁的每頁可由不同的對象所有。但是一頁總是只能屬于一個對象。

通常從混合區向新表或索引分配頁。當表或索引增長到8 頁時,將變成使用統一區進行后續分配。

DBCC SHOWFILESTATS

這個命令能直接從GAM 和SGAM 這樣的系統分配頁面上面讀取區分配信息,直接算出數據庫文件里有多少區已被分配。

sp_spaceused (+ updateusage才會準確)

DBCC SHOWCONTIG( 慎用,SQL Server 2005 之后可以使用sys.dm_db_index_physical_stats)

sys.dm_db_partition_stats

可以從頁面這個級別來分析檢查數據庫空間大小。

日志文件不是按頁/區來組織的。

數據庫引擎在內部將每一物理日志文件分成多個虛擬日志單元。虛擬日志單元沒有固定大小,

且一個物理日志文件所包含的虛擬日志單元數不固定。

日志文件每自動增長一次,會至少增加一個虛擬日志單元。

如果一個日志文件經歷了多次小的自動增長,里面的虛擬日志單元數目會比正常的日志文件多很多。

這種情況會影響到日志文件管理的效率,甚至造成數據庫啟動要花很長時間。

事務日志是一種回繞的文件。當創建數據庫時,邏輯日志文件從物理日志文件的始端開始。

新日志記錄被添加到邏輯日志的末端,然后向物理日志的末端擴張。

當邏輯日志的末端到達物理日志文件的末端時,新的日志記錄將回繞到物理日志文件的始端,繼續向后寫。

DBCC SQLPERF(LOGSPACE)可以查看日志文件的使用情況。

Tempdb 系統數據庫是一個全局資源,可供連接到SQL Server 實例的所有用戶使用,在SQL Server2005 中,用于保存下列各項:

用戶對象

• 用戶定義的表和索引。

• 系統表和索引。

• 全局臨時表和索引。

• 局部臨時表和索引。

• table 變量。

• 表值函數中返回的表。

內部對象

• 用于游標或假脫機操作以及臨時大型對象(LOB)存儲的工作表。

• 用于哈希聯接或哈希聚合操作的工作文件。

• 用于創建或重新生成索引等操作(如果指定了SORT_IN_TEMPDB)的中間排序結果,

或者某些GROUP BY、ORDER BY 或UNION 查詢的中間排序結果。

每個內部對象至少使用9 頁:一個IAM 頁,一個8 頁的區。

版本存儲區

• 由使用快照隔離級別或已提交讀隔離級別(基于行版本控制)的數據庫中的數據修改事務生成的行版本。

• 由數據修改事務為實現聯機索引操作、多個活動的結果集(MARS)以及AFTER 觸發器等功能而生成的行版本。

Tempdb 空間使用的一大特點,是只有一部分對象,例如用戶創建的臨時表、table 變量等,

可以用sys.allocation_units 和sys.partitions 這樣的管理視圖來管理。

tempdb 的空間使用是不能用sp_spaceused 來跟蹤的。(不準確)

sys.dm_db_file_space_usage這張視圖能反映tempdb 在幾個大類里的空間使用分布。

是用戶對象(user_object_reserved_page_count),還是系統對象(internal_object_reserved_page_count)

,還是版本存儲區(version_store_reserved_page_count)。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 普陀区| 大冶市| 高陵县| 开鲁县| 聂拉木县| 宜君县| 名山县| 启东市| 榆树市| 婺源县| 焉耆| 克什克腾旗| 齐河县| 弥渡县| 滦平县| 太湖县| 紫金县| 昂仁县| 石渠县| 云阳县| 临武县| 吉首市| 通许县| 抚顺市| 曲松县| 宝山区| 南漳县| 钦州市| 安塞县| 伊通| 温州市| 海阳市| 灌阳县| 云南省| 勐海县| 元江| 会同县| 通州区| 汉寿县| 那坡县| 时尚|