SlideShare a Scribd company logo
SQL Server Data Page Structure
Deep Dive
Masayuki Ozawa (@Masayuki_Ozawa)
A25
自己紹介
db tech showcase 20152
 フリーランスエンジニアとして SQL Server の
データベースエンジン機能を使用した案件を中心に従事
 案件等で協力できることがありましたらお声掛けいただけると幸いです
 「SQL Server 現状診断」による SQL Server 稼働状況の報告書作成
 SQL Serverのオンサイト / オフサイトでの技術支援
 コミュニティやブログで SQL Server の情報を発信
 ブログ : SE の雑記 (http://blog.engineer-memo.com)
 Microsoft MVP for SQL Server (July 2011 - June 2015)
2015/6/11
本日の内容
2015/6/11db tech showcase 20153
 SQL Server Data Page Structure Deep Dive
 SQL Server のデータ格納領域についてのセッション
 行ストアを例としたデータ格納の概念と実際
データ領域の基本単位
2015/6/11db tech showcase 20154
SQL Server のデータ領域の基本単位
2015/6/11db tech showcase 20155
 ページ
 SQL Server の基本的なデータの格納単位
 Page = 8KB
 エクステント
 8KB ページを 8 個まとめた領域
 1 Extent = 8 Page = 64KB
 領域の拡張を行う場合はエクステントサイズで実施される
 通常は 64KB の拡張だが、オプション (-E) を指定することで 2MB 単位にすることが可能
 ページとエクステントのアーキテクチャ
 https://technet.microsoft.com/ja-jp/library/cc280360(v=sql.105).aspx
ページの基本構造 #1
2015/6/11db tech showcase 20156
ページヘッダ
データ
オフセット
8096 バイト
8192 バイト
96 バイト
レコード 1
レコード 2
レコード 3
123
行ごとの最大データ : 8060 バイト
行オーバーフローによりこれ以上のデータを格納することも可能
(varchar /nvarchar/varbinary/sql_variant )
8 KB を超える場合の行オーバーフロー データ
https://technet.microsoft.com/ja-jp/library/ms186981(v=sql.105).aspx
ページヘッダ :
ページの管理情報
データ:
実レコードのデータ
オフセット:
レコードの位置を示す情報
ページの基本構造 #2
2015/6/11db tech showcase 20157
 各ページ間はリンク情報を持っており、自身の前後のページを把握す
ることができる。
 最初 / 最終のページについては前後のリンク情報が 0 となっている。
ページ #1 ページ #2 ページ #3
m_nextPage = 101
Page ID 100 Page ID 101 Page ID 102
m_prevPage = 0 m_nextPage = 102m_prevPage = 100
m_nextPage = 0m_prevPage = 101
エクステントの基本構造
2015/6/11db tech showcase 20158
 混合エクステント
 最初は混合エクステント内に格納され、8 ページを超えるデータが格納された
場合は、以降のデータは単一エクステントとして格納される。
 単一エクステント
 一つのオブジェクトの情報のみが格納されたエクステント
 -T 1118 は混合エクステントの利用を抑制するためのトレースフラグ
エクステント
テーブル A テーブル B テーブル C テーブル D
テーブル A テーブル B テーブル C テーブル D
エクステント
テーブル A テーブル A テーブル A テーブル A
テーブル A テーブル A テーブル A テーブル A
ページ / エクステントを確認する方法
2015/6/11db tech showcase 20159
 DBCC PAGE
 DBCC TRACEON (3604) を実行する必要がある
 How to use DBCC PAGE
http://blogs.msdn.com/b/sqlserverstorageengine/archive/2006/06/10/625659.aspx
 sys.dm_db_database_page_allocations
 SQL Server 2012 で追加された以下の情報を取得できる DMV
 DBCC IND
 DBCC EXTENTINFO
 Visualizing Index Fragmenation
http://blogs.msdn.com/b/timchapman/archive/2012/12/03/visualizing-index-fragmenation.aspx
 SQL SERVER 2012 – sys.dm_db_database_page_allocations – dynamic management function
http://raresql.com/2013/01/24/sql-server-2012-sys-dm_db_database_page_allocations-dynamic-management-function/
DEMO
2015/6/11db tech showcase 201510
ページとエクステントの基本構造
ページの種類
2015/6/11db tech showcase 201511
主要なページの種類
2015/6/11db tech showcase 201512
 Allocation Bitmap (Allocation Page)
 PFS : Page Free Space (ページの空き領域を管理)
 8,088 ページ (64MB) ごとに存在する
 GAM : Global Allocation Map (単一エクステントを管理)
 SGAM : Shared Global Allocation Map (混合エクステントを管理)
 DCM : Differential Changed Map (差分変更の管理情報)
 BCM : Bulk Changed Map (一括変更の管理情報)
 GAM / SGAM / DCM / BCM は 64,000 エクステント → 4GB 分の情報を管理
 IAM : Index Allocation Map (インデックスの割り当てを管理)
 Data Page
 Data Page : リーフレベルのデータページ
 Index Page : 階層構造のインデックスページ
Page Type
2015/6/11db tech showcase 201513
 ページの種類は Page Type という情報により管理されている
 1 - data page
 2 - index page
 3 , 4 - text pages
 8 - GAM page
 9 - SGAM page
 10 - IAM page
 11 - PFS page
 13 – Boot Page
 15 – File Header Page
 16 - DCM Page
 17 - BCM Page
データファイルの構造
2015/6/11db tech showcase 201514
 MDF (プライマリデータファイル)
 NDF (セカンダリデータファイル)
ページ番号 0 1 2 3 4 5 6 7 8 9
種別
File
Header
Page
PFS GAM SGAM DCM BCM
Boot
Page
ページタイプ 15 11 8 9 16 17 13
ページ番号 0 1 2 3 4 5 6 7
種別
File
Header
Page
PFS GAM SGAM DCM BCM
ページタイプ 15 11 8 9 16 17
2015/6/11db tech showcase 201515
各ページの内容を確認
DEMO
インデックスの構造
2015/6/11db tech showcase 201516
クラスター化インデックスの構造
2015/6/11db tech showcase 201517
 クラスター化インデックスは階層構造のインデックス
 リーフにはデータを持つ
ルート
中間
リーフ リーフ
中間
リーフ リーフ
一意にならないクラスター化インデックス
2015/6/11db tech showcase 201518
 SQL Server ではデザイナーで主キーを設定すると、キー項目がクラス
ター化インデックスとして設定される
 一意にならない列に対してクラスター化インデックスを設定するとど
うなるか
 4 バイトの uniqueifer 列が自動的に設定され、内部的に一意に識別される値が
付与されている
 クラスタ化インデックスの設計ガイドライン
https://technet.microsoft.com/ja-jp/library/ms190639(v=sql.105).aspx
 ヒープテーブルの場合は RID (Row ID) により、行を一意に識別できる
非クラスター化インデックスの構造
2015/6/11db tech showcase 201519
 非クラスター化インデックスは階層構造のインデックス
 リーフにはインデックスキーのデータを持つ
 リーフにはインデックスキーのほかに行データへのリンクを持つ
ルート
中間
リーフ リーフ
中間
リーフ リーフ
行データ
行データへのリンク
2015/6/11db tech showcase 201520
インデックス構造の確認
DEMO
ページポインター
2015/6/11db tech showcase 201521
 レコード内に他のページへのポインターを持つことがある
 BLOB データ (行外データ)
 行内データ
https://technet.microsoft.com/ja-jp/library/ms189087(v=sql.100).aspx
 バージョニング情報
 ポインターを持つデータにアクセスした場合、複数ページのアクセスとなる
 行内データのアクセスコスト / 行外データのアクセスコスト
 timestamp から自身がアクセスすべき情報を取得
ページヘッダ
データ
オフセット
レコード 1 レコード 2
レコード 3
ページヘッダ
データ
オフセット
レコード 1 レコード 2
レコード 3
2015/6/11db tech showcase 201522
ページポインター
DEMO
FILL FACTOR
2015/6/11db tech showcase 201523
 ページ内の空き領域を設定するための項目
 インデックスのメンテナンスをした際に設定された FILL FACTOR に応じて空き領域
を作り、新規のデータが挿入された場合のページ分割を抑制することができる
 インデックスのメンテナンスをした際に空き領域を生成する設定であり、通常の利用時に
は 100% データを格納する
 FILL FACTOR を設定することでデータ追加時の 50/50 分割の発生頻度を抑えることが
できるがページ密度が低下する
FILL FACOTR
設定なし (既定)
100%
20% の空き領域
FILL FACOTR
80%
インデックスメンテナンス後のページ密度
断片化
2015/6/11db tech showcase 201524
 アクセス効率の低下
 ページ密度の低下
 FILL FACTOR とのトレードオフもある
 ページ連続性の低下
 シーケンシャルアクセス > ランダムアクセス
 ページの連続性の低下
 再構成 (REORGANIZE) / 再構築 (REBUILD)で解消
 エクステントの連続性の低下
 再構築で解消 (REBUILD)
50%
50%
50%
50%
100% ページ #1 ページ #2 ページ #3
Page ID 100 Page ID 890 Page ID 2000
50/50 分割 ページ連続性の低下
2015/6/11db tech showcase 201525
FILLFACTOR と断片化
DEMO
最後に
2015/6/11db tech showcase 201526
さらに情報を知りたい方は
「Internals Deep Dive」
のキーワードで検索
海外の情報になりますが、
さらに詳細な情報を確認できます

More Related Content

PDF
Sql database 基本構成と直近で追加されていた機能の紹介
Masayuki Ozawa
 
PDF
Data consistency 入門 data partitioning ガイダンス
Masayuki Ozawa
 
PDF
Sql server 構築 運用 tips
Masayuki Ozawa
 
PDF
Oracle と sql server 比べてみよう (sql server)
Masayuki Ozawa
 
PDF
Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう
Masayuki Ozawa
 
PDF
db tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解する
Masayuki Ozawa
 
PDF
Sql server よく聞く設定とその効果
Masayuki Ozawa
 
PPTX
Sql server 運用 101
Masayuki Ozawa
 
Sql database 基本構成と直近で追加されていた機能の紹介
Masayuki Ozawa
 
Data consistency 入門 data partitioning ガイダンス
Masayuki Ozawa
 
Sql server 構築 運用 tips
Masayuki Ozawa
 
Oracle と sql server 比べてみよう (sql server)
Masayuki Ozawa
 
Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう
Masayuki Ozawa
 
db tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解する
Masayuki Ozawa
 
Sql server よく聞く設定とその効果
Masayuki Ozawa
 
Sql server 運用 101
Masayuki Ozawa
 

What's hot (20)

PPTX
DBA から開発者への情報提供
Masayuki Ozawa
 
PDF
Sql server data store data access internals
Masayuki Ozawa
 
PPTX
Sql server これだけはやっておこう 最終版
elanlilac
 
PDF
待ち事象から考える、Sql server の改善ポイント
Masayuki Ozawa
 
PDF
COD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアル
Masayuki Ozawa
 
PDF
SQL Server 2014 In Memory OLTP Overview
Masayuki Ozawa
 
PDF
SQL Server運用実践 - 3年間80台の運用経験から20の教訓
貴仁 大和屋
 
PDF
SQL Server 2014 データベースエンジン新機能
Masayuki Ozawa
 
PDF
オンプレのDbaがazureのデータベースを使ってみた
Masayuki Ozawa
 
PDF
SQL Server/SQL Database の新機能のお話し
Insight Technology, Inc.
 
PPTX
ここからはじめる SQL Server の状態取得
Masayuki Ozawa
 
PDF
SQL Server パフォーマンスカウンター
Masayuki Ozawa
 
PDF
[B31,32]SQL Server Internal と パフォーマンスチューニング by Yukio Kumazawa
Insight Technology, Inc.
 
PPTX
Sql server2014復習とsqlserver2016の紹介
Oda Shinsuke
 
PPTX
Sql server 2016 ctp 3.0 新機能
Masayuki Ozawa
 
PDF
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
Masayuki Ozawa
 
PDF
Sql server 2012 の新機能を使ってみよう。db 管理者向け機能の紹介
Masayuki Ozawa
 
PDF
Sql server浅く広く
okumar savurou
 
PPTX
Sql server 2014 新機能の紹介 改訂版
Oda Shinsuke
 
PDF
db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!
Masayuki Ozawa
 
DBA から開発者への情報提供
Masayuki Ozawa
 
Sql server data store data access internals
Masayuki Ozawa
 
Sql server これだけはやっておこう 最終版
elanlilac
 
待ち事象から考える、Sql server の改善ポイント
Masayuki Ozawa
 
COD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアル
Masayuki Ozawa
 
SQL Server 2014 In Memory OLTP Overview
Masayuki Ozawa
 
SQL Server運用実践 - 3年間80台の運用経験から20の教訓
貴仁 大和屋
 
SQL Server 2014 データベースエンジン新機能
Masayuki Ozawa
 
オンプレのDbaがazureのデータベースを使ってみた
Masayuki Ozawa
 
SQL Server/SQL Database の新機能のお話し
Insight Technology, Inc.
 
ここからはじめる SQL Server の状態取得
Masayuki Ozawa
 
SQL Server パフォーマンスカウンター
Masayuki Ozawa
 
[B31,32]SQL Server Internal と パフォーマンスチューニング by Yukio Kumazawa
Insight Technology, Inc.
 
Sql server2014復習とsqlserver2016の紹介
Oda Shinsuke
 
Sql server 2016 ctp 3.0 新機能
Masayuki Ozawa
 
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
Masayuki Ozawa
 
Sql server 2012 の新機能を使ってみよう。db 管理者向け機能の紹介
Masayuki Ozawa
 
Sql server浅く広く
okumar savurou
 
Sql server 2014 新機能の紹介 改訂版
Oda Shinsuke
 
db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!
Masayuki Ozawa
 
Ad

Similar to A25 sql server data page structure deep dive (20)

PDF
[db tech showcase Sapporo 2015] A26:SQL Server Data Page Structure Deep Dive ...
Insight Technology, Inc.
 
PPTX
SQL Server 入門
Tsuyoshi Kitagawa
 
PDF
[D11] SQL Server エンジニアに知ってもらいたい!! SQL Server チューニングアプローチ by masayuki ozawa
Insight Technology, Inc.
 
PDF
Share pointを支えるsql server2014最新情報 tokyo_公開用
Yukio Kumazawa
 
PDF
C11,12 SQL Server 2012 Performance Tuning by Yukio Kumazawa
Insight Technology, Inc.
 
PDF
Seas で語られたこととは?
Masayuki Ozawa
 
PDF
データベースのインデックスの種類と内部の仕組み.pdf
釣りキチ翔平
 
PDF
Sql serverインデックスの断片化と再構築の必要性について
貴仁 大和屋
 
PDF
COD2012 T2/T3 : 実機で試す SQL Server の現状取得
Masayuki Ozawa
 
PDF
[db tech showcase Tokyo 2014] L34: そのデータベース 5年後大丈夫ですか by 日本ヒューレット・パッカード株式会社 後藤宏
Insight Technology, Inc.
 
PDF
db tech showcase_2014_A14_Actian Vectorで得られる、BIにおける真のパフォーマンスとは
Koji Shinkubo
 
PDF
性能問題を起こしにくい信頼されるクラウド RDB のつくりかた
Tomoyuki Oota
 
PDF
はじめてのSSAS開発
Masaya Sawada
 
PDF
今だからこそ考えるSAP on SQL Server
Hitoshi Ikemoto
 
PPTX
Microsoft Azure - SQL Data Warehouse
Microsoft
 
PDF
[db tech showcase Tokyo 2015] B12:カラムストアデータベースの技術と活用法 by 日本電気株式会社 田村稔
Insight Technology, Inc.
 
PDF
[db tech showcase Sapporo 2015] B16:ビッグデータには、なぜ列指向が有効なのか? by 日本ヒューレット・パッカード株式...
Insight Technology, Inc.
 
PDF
性能問題を起こしにくい 強いDBシステムの作り方(Ver. 2018.9)
Tomoyuki Oota
 
PPTX
Dat006 sql server_2016_はとにかく速
Tech Summit 2016
 
PDF
Dat006 sql server_2016_はとにかく速い
Tech Summit 2016
 
[db tech showcase Sapporo 2015] A26:SQL Server Data Page Structure Deep Dive ...
Insight Technology, Inc.
 
SQL Server 入門
Tsuyoshi Kitagawa
 
[D11] SQL Server エンジニアに知ってもらいたい!! SQL Server チューニングアプローチ by masayuki ozawa
Insight Technology, Inc.
 
Share pointを支えるsql server2014最新情報 tokyo_公開用
Yukio Kumazawa
 
C11,12 SQL Server 2012 Performance Tuning by Yukio Kumazawa
Insight Technology, Inc.
 
Seas で語られたこととは?
Masayuki Ozawa
 
データベースのインデックスの種類と内部の仕組み.pdf
釣りキチ翔平
 
Sql serverインデックスの断片化と再構築の必要性について
貴仁 大和屋
 
COD2012 T2/T3 : 実機で試す SQL Server の現状取得
Masayuki Ozawa
 
[db tech showcase Tokyo 2014] L34: そのデータベース 5年後大丈夫ですか by 日本ヒューレット・パッカード株式会社 後藤宏
Insight Technology, Inc.
 
db tech showcase_2014_A14_Actian Vectorで得られる、BIにおける真のパフォーマンスとは
Koji Shinkubo
 
性能問題を起こしにくい信頼されるクラウド RDB のつくりかた
Tomoyuki Oota
 
はじめてのSSAS開発
Masaya Sawada
 
今だからこそ考えるSAP on SQL Server
Hitoshi Ikemoto
 
Microsoft Azure - SQL Data Warehouse
Microsoft
 
[db tech showcase Tokyo 2015] B12:カラムストアデータベースの技術と活用法 by 日本電気株式会社 田村稔
Insight Technology, Inc.
 
[db tech showcase Sapporo 2015] B16:ビッグデータには、なぜ列指向が有効なのか? by 日本ヒューレット・パッカード株式...
Insight Technology, Inc.
 
性能問題を起こしにくい 強いDBシステムの作り方(Ver. 2018.9)
Tomoyuki Oota
 
Dat006 sql server_2016_はとにかく速
Tech Summit 2016
 
Dat006 sql server_2016_はとにかく速い
Tech Summit 2016
 
Ad

More from Masayuki Ozawa (14)

PDF
Sql database managed instance overview and internals
Masayuki Ozawa
 
PDF
Power apps formula cheat sheet
Masayuki Ozawa
 
PDF
K8s install (single cluster)
Masayuki Ozawa
 
PDF
de:code 2018 DA06 SQL Server 管理者におくる SQL Server on Linux Tips
Masayuki Ozawa
 
PDF
Managed Instance チートシート
Masayuki Ozawa
 
PDF
Pacemaker 操作方法メモ
Masayuki Ozawa
 
PDF
Windows エンジニア向け sql server on linux のためのスキルアップデート
Masayuki Ozawa
 
PDF
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
Masayuki Ozawa
 
PDF
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Masayuki Ozawa
 
PDF
Sql server 2016 always on 可用性グループ new features
Masayuki Ozawa
 
PDF
SQL Server 簡易診断サービス ご紹介資料
Masayuki Ozawa
 
PDF
SQL Server 現状診断サービス ご紹介資料
Masayuki Ozawa
 
PDF
Always on 可用性グループ 構築時のポイント
Masayuki Ozawa
 
PDF
和牛をおいしく食べるには
Masayuki Ozawa
 
Sql database managed instance overview and internals
Masayuki Ozawa
 
Power apps formula cheat sheet
Masayuki Ozawa
 
K8s install (single cluster)
Masayuki Ozawa
 
de:code 2018 DA06 SQL Server 管理者におくる SQL Server on Linux Tips
Masayuki Ozawa
 
Managed Instance チートシート
Masayuki Ozawa
 
Pacemaker 操作方法メモ
Masayuki Ozawa
 
Windows エンジニア向け sql server on linux のためのスキルアップデート
Masayuki Ozawa
 
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
Masayuki Ozawa
 
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Masayuki Ozawa
 
Sql server 2016 always on 可用性グループ new features
Masayuki Ozawa
 
SQL Server 簡易診断サービス ご紹介資料
Masayuki Ozawa
 
SQL Server 現状診断サービス ご紹介資料
Masayuki Ozawa
 
Always on 可用性グループ 構築時のポイント
Masayuki Ozawa
 
和牛をおいしく食べるには
Masayuki Ozawa
 

Recently uploaded (10)

PDF
RV車市場、CAGR2.60%で成長し、2031年には37640百万米ドル規模に
yhresearch
 
PPTX
20250729_TechTalk_QlikTalendCloud_データ品質とデータガバナンス
QlikPresalesJapan
 
PDF
工業用ミストシステム調査レポート:市場規模、シェア、産業分析データ、最新動向2025-2031 YH Research
2418867459
 
PDF
埋め込み型ドラッグデリバリーデバイスの成長予測:2031年には751百万米ドルに到達へ
2418867459
 
PPTX
PRESENTASI IZIN OPERASIONAL SMK ISLAM KARYA MANDIRI
BAHRULALAM27
 
PDF
ダイヤモンドスラリー市場規模の成長見通し:2031年には193百万米ドルに到達へ
yhresearch
 
PPTX
【Qlik 医療データ活用勉強会】第50回 日本医療マネジメント学会参加報告、DPCデータの活用等
QlikPresalesJapan
 
PDF
世界mPOSデバイス市場のサプライチェーン解析:上流、下流、収益モデル分析2025-2031
yhresearch
 
PDF
セットトップボックス市場:世界の産業現状、競合分析、シェア、規模、動向2025-2031年の予測
snow326214
 
PPTX
BEIS ORIENTATION FOR S.Y2024 - 2025.pptx
AsmiraCo2
 
RV車市場、CAGR2.60%で成長し、2031年には37640百万米ドル規模に
yhresearch
 
20250729_TechTalk_QlikTalendCloud_データ品質とデータガバナンス
QlikPresalesJapan
 
工業用ミストシステム調査レポート:市場規模、シェア、産業分析データ、最新動向2025-2031 YH Research
2418867459
 
埋め込み型ドラッグデリバリーデバイスの成長予測:2031年には751百万米ドルに到達へ
2418867459
 
PRESENTASI IZIN OPERASIONAL SMK ISLAM KARYA MANDIRI
BAHRULALAM27
 
ダイヤモンドスラリー市場規模の成長見通し:2031年には193百万米ドルに到達へ
yhresearch
 
【Qlik 医療データ活用勉強会】第50回 日本医療マネジメント学会参加報告、DPCデータの活用等
QlikPresalesJapan
 
世界mPOSデバイス市場のサプライチェーン解析:上流、下流、収益モデル分析2025-2031
yhresearch
 
セットトップボックス市場:世界の産業現状、競合分析、シェア、規模、動向2025-2031年の予測
snow326214
 
BEIS ORIENTATION FOR S.Y2024 - 2025.pptx
AsmiraCo2
 

A25 sql server data page structure deep dive

  • 1. SQL Server Data Page Structure Deep Dive Masayuki Ozawa (@Masayuki_Ozawa) A25
  • 2. 自己紹介 db tech showcase 20152  フリーランスエンジニアとして SQL Server の データベースエンジン機能を使用した案件を中心に従事  案件等で協力できることがありましたらお声掛けいただけると幸いです  「SQL Server 現状診断」による SQL Server 稼働状況の報告書作成  SQL Serverのオンサイト / オフサイトでの技術支援  コミュニティやブログで SQL Server の情報を発信  ブログ : SE の雑記 (http://blog.engineer-memo.com)  Microsoft MVP for SQL Server (July 2011 - June 2015) 2015/6/11
  • 3. 本日の内容 2015/6/11db tech showcase 20153  SQL Server Data Page Structure Deep Dive  SQL Server のデータ格納領域についてのセッション  行ストアを例としたデータ格納の概念と実際
  • 5. SQL Server のデータ領域の基本単位 2015/6/11db tech showcase 20155  ページ  SQL Server の基本的なデータの格納単位  Page = 8KB  エクステント  8KB ページを 8 個まとめた領域  1 Extent = 8 Page = 64KB  領域の拡張を行う場合はエクステントサイズで実施される  通常は 64KB の拡張だが、オプション (-E) を指定することで 2MB 単位にすることが可能  ページとエクステントのアーキテクチャ  https://technet.microsoft.com/ja-jp/library/cc280360(v=sql.105).aspx
  • 6. ページの基本構造 #1 2015/6/11db tech showcase 20156 ページヘッダ データ オフセット 8096 バイト 8192 バイト 96 バイト レコード 1 レコード 2 レコード 3 123 行ごとの最大データ : 8060 バイト 行オーバーフローによりこれ以上のデータを格納することも可能 (varchar /nvarchar/varbinary/sql_variant ) 8 KB を超える場合の行オーバーフロー データ https://technet.microsoft.com/ja-jp/library/ms186981(v=sql.105).aspx ページヘッダ : ページの管理情報 データ: 実レコードのデータ オフセット: レコードの位置を示す情報
  • 7. ページの基本構造 #2 2015/6/11db tech showcase 20157  各ページ間はリンク情報を持っており、自身の前後のページを把握す ることができる。  最初 / 最終のページについては前後のリンク情報が 0 となっている。 ページ #1 ページ #2 ページ #3 m_nextPage = 101 Page ID 100 Page ID 101 Page ID 102 m_prevPage = 0 m_nextPage = 102m_prevPage = 100 m_nextPage = 0m_prevPage = 101
  • 8. エクステントの基本構造 2015/6/11db tech showcase 20158  混合エクステント  最初は混合エクステント内に格納され、8 ページを超えるデータが格納された 場合は、以降のデータは単一エクステントとして格納される。  単一エクステント  一つのオブジェクトの情報のみが格納されたエクステント  -T 1118 は混合エクステントの利用を抑制するためのトレースフラグ エクステント テーブル A テーブル B テーブル C テーブル D テーブル A テーブル B テーブル C テーブル D エクステント テーブル A テーブル A テーブル A テーブル A テーブル A テーブル A テーブル A テーブル A
  • 9. ページ / エクステントを確認する方法 2015/6/11db tech showcase 20159  DBCC PAGE  DBCC TRACEON (3604) を実行する必要がある  How to use DBCC PAGE http://blogs.msdn.com/b/sqlserverstorageengine/archive/2006/06/10/625659.aspx  sys.dm_db_database_page_allocations  SQL Server 2012 で追加された以下の情報を取得できる DMV  DBCC IND  DBCC EXTENTINFO  Visualizing Index Fragmenation http://blogs.msdn.com/b/timchapman/archive/2012/12/03/visualizing-index-fragmenation.aspx  SQL SERVER 2012 – sys.dm_db_database_page_allocations – dynamic management function http://raresql.com/2013/01/24/sql-server-2012-sys-dm_db_database_page_allocations-dynamic-management-function/
  • 10. DEMO 2015/6/11db tech showcase 201510 ページとエクステントの基本構造
  • 12. 主要なページの種類 2015/6/11db tech showcase 201512  Allocation Bitmap (Allocation Page)  PFS : Page Free Space (ページの空き領域を管理)  8,088 ページ (64MB) ごとに存在する  GAM : Global Allocation Map (単一エクステントを管理)  SGAM : Shared Global Allocation Map (混合エクステントを管理)  DCM : Differential Changed Map (差分変更の管理情報)  BCM : Bulk Changed Map (一括変更の管理情報)  GAM / SGAM / DCM / BCM は 64,000 エクステント → 4GB 分の情報を管理  IAM : Index Allocation Map (インデックスの割り当てを管理)  Data Page  Data Page : リーフレベルのデータページ  Index Page : 階層構造のインデックスページ
  • 13. Page Type 2015/6/11db tech showcase 201513  ページの種類は Page Type という情報により管理されている  1 - data page  2 - index page  3 , 4 - text pages  8 - GAM page  9 - SGAM page  10 - IAM page  11 - PFS page  13 – Boot Page  15 – File Header Page  16 - DCM Page  17 - BCM Page
  • 14. データファイルの構造 2015/6/11db tech showcase 201514  MDF (プライマリデータファイル)  NDF (セカンダリデータファイル) ページ番号 0 1 2 3 4 5 6 7 8 9 種別 File Header Page PFS GAM SGAM DCM BCM Boot Page ページタイプ 15 11 8 9 16 17 13 ページ番号 0 1 2 3 4 5 6 7 種別 File Header Page PFS GAM SGAM DCM BCM ページタイプ 15 11 8 9 16 17
  • 15. 2015/6/11db tech showcase 201515 各ページの内容を確認 DEMO
  • 17. クラスター化インデックスの構造 2015/6/11db tech showcase 201517  クラスター化インデックスは階層構造のインデックス  リーフにはデータを持つ ルート 中間 リーフ リーフ 中間 リーフ リーフ
  • 18. 一意にならないクラスター化インデックス 2015/6/11db tech showcase 201518  SQL Server ではデザイナーで主キーを設定すると、キー項目がクラス ター化インデックスとして設定される  一意にならない列に対してクラスター化インデックスを設定するとど うなるか  4 バイトの uniqueifer 列が自動的に設定され、内部的に一意に識別される値が 付与されている  クラスタ化インデックスの設計ガイドライン https://technet.microsoft.com/ja-jp/library/ms190639(v=sql.105).aspx  ヒープテーブルの場合は RID (Row ID) により、行を一意に識別できる
  • 19. 非クラスター化インデックスの構造 2015/6/11db tech showcase 201519  非クラスター化インデックスは階層構造のインデックス  リーフにはインデックスキーのデータを持つ  リーフにはインデックスキーのほかに行データへのリンクを持つ ルート 中間 リーフ リーフ 中間 リーフ リーフ 行データ 行データへのリンク
  • 20. 2015/6/11db tech showcase 201520 インデックス構造の確認 DEMO
  • 21. ページポインター 2015/6/11db tech showcase 201521  レコード内に他のページへのポインターを持つことがある  BLOB データ (行外データ)  行内データ https://technet.microsoft.com/ja-jp/library/ms189087(v=sql.100).aspx  バージョニング情報  ポインターを持つデータにアクセスした場合、複数ページのアクセスとなる  行内データのアクセスコスト / 行外データのアクセスコスト  timestamp から自身がアクセスすべき情報を取得 ページヘッダ データ オフセット レコード 1 レコード 2 レコード 3 ページヘッダ データ オフセット レコード 1 レコード 2 レコード 3
  • 22. 2015/6/11db tech showcase 201522 ページポインター DEMO
  • 23. FILL FACTOR 2015/6/11db tech showcase 201523  ページ内の空き領域を設定するための項目  インデックスのメンテナンスをした際に設定された FILL FACTOR に応じて空き領域 を作り、新規のデータが挿入された場合のページ分割を抑制することができる  インデックスのメンテナンスをした際に空き領域を生成する設定であり、通常の利用時に は 100% データを格納する  FILL FACTOR を設定することでデータ追加時の 50/50 分割の発生頻度を抑えることが できるがページ密度が低下する FILL FACOTR 設定なし (既定) 100% 20% の空き領域 FILL FACOTR 80% インデックスメンテナンス後のページ密度
  • 24. 断片化 2015/6/11db tech showcase 201524  アクセス効率の低下  ページ密度の低下  FILL FACTOR とのトレードオフもある  ページ連続性の低下  シーケンシャルアクセス > ランダムアクセス  ページの連続性の低下  再構成 (REORGANIZE) / 再構築 (REBUILD)で解消  エクステントの連続性の低下  再構築で解消 (REBUILD) 50% 50% 50% 50% 100% ページ #1 ページ #2 ページ #3 Page ID 100 Page ID 890 Page ID 2000 50/50 分割 ページ連続性の低下
  • 25. 2015/6/11db tech showcase 201525 FILLFACTOR と断片化 DEMO
  • 26. 最後に 2015/6/11db tech showcase 201526 さらに情報を知りたい方は 「Internals Deep Dive」 のキーワードで検索 海外の情報になりますが、 さらに詳細な情報を確認できます