揭開MSSQL---extents內部的神秘面紗
一、MSSQLextent分兩種:
1. Mixed extent:每個表或索引建立時,MSSQL並不給它分配一個extent,而是在mixed extnet內分配一個頁,空間需求擴大時,再分配一個…,直到表或索引的空間需求超過8個頁,系統為它分配一個extent,這個extent就是uniform. extent;
2. Uniform. extent:當表或索引的空間需求超過8個頁時,系統就為它分配一個uniform. extent;
二、MSSQL用幾種頁來記錄extent的使用:
1. GAM:global allocation map,用來記錄extent是否已經被使用,每個位記錄一個extent,0為已用,1表示未用,一個頁大約有8000位元組、64000個位,每個GAM頁可以記錄64000個extent,每個extent為8*8k=64k,那麼GAM頁最終可以記錄64k*64000大小的空間,即大約4G的空間,也就是說GAM只能記錄4G大小的空間,超過4G必須另外分配GAM,第一和第二個GAM間隔511230個頁,第一個GAM總是檔案的第三個頁(page 2);
2. SGAM:shared global allocation map,用來記錄extent是否被用作mixed extent,每個位記錄一個extent,如果為1,說明對應的extent用作mixed extent且其中還有可用的頁,為0,說明其為uniform. extent或mixed extent但已沒可用頁。同樣,一個SGAM可以記錄4G的空間,超過這個大小就需要另外分配SGAM,第一個和第二個SGAM間隔511230個頁,第一個SGAM總是檔案的第四個頁(page 3);
3. 另外一種頁——IAM,index allocation map,用來記錄每個物件在一個檔案中extents的情況,也就是記錄物件被分配了一個檔案中的extents,IAM頁頭有八個槽,分別用來指向表或索引的頭八個頁,因為它們都被分配在mixed extents裡,後面頁頭還有一個map,其中每個位對應一個extent,如果相應檔案中extent的位是1,就說明這個extent屬於該物件,否則,就不屬於該物件;該頁可以在檔案的任何位置分配,它也可以不指向它所在檔案的extents,注意:IAM僅僅對應被一個分配單位使用的檔案中的4G範圍的extents使用情況,對應511230個頁,一旦超過這些頁,系統就要分配另外一個IAM頁,一個物件的各個IAM也都被連結在一起,IAM頭部有指向第一個extent的地址。每個分配單位中,只包含一個表或索引分割槽的一類頁,多個分割槽要用到多個IAM,而同一個分割槽不同類的頁,也要用到不同的IAM頁。
4. PFS, page free space,用來記錄每個檔案中每個頁如何使用的,檔案的第二個頁為PFS頁,其後第8088個也是PFS頁,因為一個PFS頁中只有8088個位元組可以用來記錄頁的使用情況。
5. DCM,differential changed map,用來記錄自從上次全備以來改變過的extents,主要用於差異備份需要,檔案的第七個頁(page 6)為DCM頁,也是隻能覆蓋4G的空間,超過4G就要分配另一個DCM頁,中間要間隔511230個頁。
6. BCM,bulk changed map,用來記錄最小或批次日誌操作改變的extents,檔案的第八個頁為BCM頁,只能覆蓋4G的空間,超過4G就要重新分配BCM頁,中間間隔511230個頁。
7. 至此,可以總結如下:檔案的第一個頁為檔案頭頁,即page 0,第二個頁為PFS頁,第三個頁為GAM頁,第四個頁為SGAM頁,第七個頁為DCM頁,第八個頁為BCM頁,而IAM頁可以在檔案任何位置分配。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8484829/viewspace-2118207/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 揭開Kotlin協程的神秘面紗Kotlin
- 揭開神秘面紗——深入淺出ThreadLocalthread
- 揭開AI、機器學習和深度學習的神秘面紗AI機器學習深度學習
- 揭開正規表示式語法的神秘面紗 (轉)
- 解開“QUIC”的神秘面紗UI
- 揭開神秘面紗,會stream流就會大資料大資料
- NYDIG交易所揭開區塊鏈節點神秘的面紗區塊鏈
- 在Axon框架中揭開跟蹤事件處理器的神秘面紗框架事件
- 揭開SSL的神秘面紗,瞭解如何用SSL保護資料
- 帶你揭開神秘的javascript AST面紗之AST 基礎與功能JavaScriptAST
- 【譯】用 GitHub Copilot 提交註釋揭開歷史的神秘面紗Github
- 揭開ThreadLocal的面紗thread
- 一文揭開JDK21虛擬執行緒的神秘面紗JDK執行緒
- 揭開“QUIC”的神祕面紗UI
- 【C#——揭開你的面紗】C#
- 揭開華為雲CodeArts TestPlan啟發式測試設計神秘面紗!
- 揭開OKR (Objectives and Key Results) 的面紗OKRObject
- 揭開 Hyperledger Cacti 專案的面紗
- 『MySQL』揭開索引神祕面紗MySql索引
- 揭開Java記憶體管理的面紗Java記憶體
- 揭開計算機的神祕面紗計算機
- 揭開二維碼背後的神秘面紗用二維碼識別 API 就夠了API
- 帶你揭開神秘的Javascript AST面紗之Babel AST 四件套的使用方法JavaScriptASTBabel
- 比MySQL快839倍!揭開分析型資料庫JCHDB的神秘面紗 京東智聯雲開發者MySql資料庫
- 揭開redux,react-redux的神祕面紗ReduxReact
- 揭開Future的神祕面紗——任務取消
- 揭開java記憶體模型的神祕面紗Java記憶體模型
- 揭開Future的神祕面紗——任務執行
- 揭開單體應用程式的神祕面紗
- 揭開DRF序列化技術的神祕面紗
- 揭開JS無埋點技術的神祕面紗JS
- 你未必知道的CSS故事:揭開leading的面紗CSS
- 從一個Demo開始,揭開Netty的神祕面紗Netty
- 重學MySQL-揭開面紗,顯露架構MySql架構
- 揭開網際網路公司的神秘面紗,資料解讀那些slay整個行業的網際網路公司行業
- 揭開NoahV智慧運維前端框架的神祕面紗運維前端框架
- 揭開C++移動與複製的神祕面紗C++
- 揭開SQL隱碼攻擊的神祕面紗PPT分享SQL