SlideShare a Scribd company logo
SQL Server Data Page Structure
Deep Dive
Masayuki Ozawa (@Masayuki_Ozawa)
A26
自己紹介
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 2016)
2015/9/11
本日の内容
2015/9/11db tech showcase 20153
 SQL Server Data Page Structure Deep Dive
 SQL Server のデータ格納領域についてのセッション
 行ストア
*
を例としたデータ格納の概念と
実際の実装を照らし合わせて確認
* 列ストア/インメモリテーブルは格納方法が異なる
データ領域の基本単位
2015/9/11db tech showcase 20154
SQL Server のデータ領域の基本単位
2015/9/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/9/11db tech showcase 20156
ページヘッダ
データ
オフセット
8096 バイト
8192 バイト
96 バイト
レコード 1
レコード 2
レコード 3
123
行ごとの最大データ : 8,060 バイト
列ごとの最大データ : 8,000 バイト
以下のデータ型を利用した、行オーバーフローデータ(ポインターでデータをつなぐ)により、
行ごとの最大データ以上のデータを格納することも可能
(varchar /nvarchar / varbinary / sql_variant )
8 KB を超える場合の行オーバーフロー データ
https://technet.microsoft.com/ja-jp/library/ms186981(v=sql.105).aspx
ページヘッダ :
ページの管理情報
データ:
実レコードのデータ
オフセット:
レコードの位置を示す情報
ページの基本構造 #2
2015/9/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/9/11db tech showcase 20158
 混合エクステント
 最初は混合エクステント内に格納され、8 ページを超えるデータが格納された
場合は、以降のデータは単一エクステントとして格納される。
 単一エクステント
 一つのオブジェクトの情報のみが格納されたエクステント
 -T 1118 は混合エクステントの利用を抑制するためのトレースフラグ
エクステント
テーブル A テーブル B テーブル C テーブル D
テーブル A テーブル B テーブル C テーブル D
エクステント
テーブル A テーブル A テーブル A テーブル A
テーブル A テーブル A テーブル A テーブル A
ページ / エクステントを確認する方法
2015/9/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/9/11db tech showcase 201510
ページとエクステントの基本構造
ページの種類
2015/9/11db tech showcase 201511
主要なページの種類
2015/9/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/9/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/9/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/9/11db tech showcase 201515
各ページの内容を確認
DEMO
インデックスの構造
2015/9/11db tech showcase 201516
クラスター化インデックスの構造
2015/9/11db tech showcase 201517
 クラスター化インデックスは階層構造のインデックス
 リーフにはデータを持つ
ルート
中間
リーフ リーフ
中間
リーフ リーフ
一意にならないクラスター化インデックス
2015/9/11db tech showcase 201518
 SQL Server ではデザイナーで主キーを設定すると、キー項目がクラスター化
インデックスとして設定される
 一意にならない列にクラスター化インデックスを設定するとどうなるか
 4 バイトの uniqueifer 列が自動的に設定され、内部的に同一データを一意に識別され
る値が付与されている
 クラスタ化インデックスの設計ガイドライン
https://technet.microsoft.com/ja-jp/library/ms190639(v=sql.105).aspx
 2,147,483,647 件、一意にならない同一のクラスター化インデックスキー(同一キー)のデータ
を挿入した例
 ヒープテーブルの場合は RID (Row ID) により、行を一意に識別できる
 RID : DatabaseID:FileID:PageID:Slot
非クラスター化インデックスの構造
2015/9/11db tech showcase 201519
 非クラスター化インデックスは階層構造のインデックス
 リーフにはインデックスキーのデータを持つ
 リーフにはインデックスキーのほかに行データへのリンクを持つ
ルート
中間
リーフ リーフ
中間
リーフ リーフ
行データ
行データへのリンク
2015/9/11db tech showcase 201520
インデックス構造の確認
DEMO
ページポインター
2015/9/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/9/11db tech showcase 201522
ページポインター
DEMO
断片化
2015/9/11db tech showcase 201523
 アクセス効率の低下
 ページ密度の低下
 FILL FACTOR とのトレードオフもある
 ページ連続性の低下
 シーケンシャルアクセス > ランダムアクセス
 ページの連続性の低下
 再構成 (REORGANIZE) / 再構築 (REBUILD)で解消
 エクステントの連続性の低下
 再構築で解消 (REBUILD)
50%
50%
50%
50%
100% ページ #1 ページ #2 ページ #3
Page ID 100 Page ID 890 Page ID 2000
50/50 分割 ページ連続性の低下
参考)FILL FACTOR
2015/9/11db tech showcase 201524
 ページ内の空き領域を設定するための項目
 インデックスのメンテナンスをした際に設定された FILL FACTOR に応じて空き領域
を作り、新規のデータが挿入された場合のページ分割を抑制することができる
 インデックスのメンテナンスをした際に空き領域を生成する設定であり、通常の利用時に
は 100% データを格納する
 FILL FACTOR を設定することでデータ追加時の 50/50 分割の発生頻度を抑えることが
できるがページ密度が低下する
FILL FACOTR
設定なし (既定)
100%
20% の空き領域
FILL FACOTR
80%
インデックスメンテナンス後のページ密度
2015/9/11db tech showcase 201525
断片化
DEMO
最後に
2015/9/11db tech showcase 201526
さらに情報を知りたい方は
「Internals Deep Dive」
のキーワードで検索
海外の情報になりますが、
さらに詳細な情報を確認できます

More Related Content

PPTX
Sql server 2014 新機能の紹介
PPTX
Sql server sql database 最新機能紹介
PPTX
Sql server 2014 新機能の紹介 改訂版
PPTX
Sql server2014復習とsqlserver2016の紹介
PDF
A25 sql server data page structure deep dive
PDF
SQL Server/SQL Database の新機能のお話し
PDF
Oracle と sql server 比べてみよう (sql server)
PPTX
Azure sql database 入門 2014年10月版
Sql server 2014 新機能の紹介
Sql server sql database 最新機能紹介
Sql server 2014 新機能の紹介 改訂版
Sql server2014復習とsqlserver2016の紹介
A25 sql server data page structure deep dive
SQL Server/SQL Database の新機能のお話し
Oracle と sql server 比べてみよう (sql server)
Azure sql database 入門 2014年10月版

What's hot (20)

PDF
Data consistency 入門 data partitioning ガイダンス
PDF
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
PPTX
Sql server 2017 新機能のご紹介
PDF
SQL Server 2014 データベースエンジン新機能
PDF
Sql database 基本構成と直近で追加されていた機能の紹介
PDF
Sql server 構築 運用 tips
PPTX
オンプレでもクラウドでも データベースサーバの運用
PDF
オンプレのDbaがazureのデータベースを使ってみた
PPTX
Sql database のご紹介
PDF
SQL Server コンテナ入門(Kubernetes編)
PDF
db tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解する
PDF
20161005_Oracle/SQL Serverの AWS への移行 ~その選択肢と注意事項~ by 株式会社インサイトテクノロジー 宮地敬史
PDF
Sql server 2019 ざっくり紹介
PPTX
Sql database でも使えるほにゃらら
PPTX
Sql server 2016 ctp 3.0 新機能
PDF
Summary of SQL Server 2019 new features
PPTX
Sql server これだけはやっておこう 最終版
PDF
Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう
PPTX
DBA から開発者への情報提供
PDF
db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!
Data consistency 入門 data partitioning ガイダンス
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
Sql server 2017 新機能のご紹介
SQL Server 2014 データベースエンジン新機能
Sql database 基本構成と直近で追加されていた機能の紹介
Sql server 構築 運用 tips
オンプレでもクラウドでも データベースサーバの運用
オンプレのDbaがazureのデータベースを使ってみた
Sql database のご紹介
SQL Server コンテナ入門(Kubernetes編)
db tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解する
20161005_Oracle/SQL Serverの AWS への移行 ~その選択肢と注意事項~ by 株式会社インサイトテクノロジー 宮地敬史
Sql server 2019 ざっくり紹介
Sql database でも使えるほにゃらら
Sql server 2016 ctp 3.0 新機能
Summary of SQL Server 2019 new features
Sql server これだけはやっておこう 最終版
Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう
DBA から開発者への情報提供
db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!
Ad

Similar to [db tech showcase Sapporo 2015] A26:SQL Server Data Page Structure Deep Dive by 小澤真之(Microsoft MVP for SQL Server) (20)

PDF
Sql server よく聞く設定とその効果
PDF
Seas で語られたこととは?
PPTX
2012年1月技術ひろば
PDF
待ち事象から考える、Sql server の改善ポイント
PPTX
Qlik Talend Cloudしっかり学ぶ勉強会 #8 「データソース IBM DB2接続」
PDF
Sql server 2012 の bi関連 新機能の紹介 と 次回sqlto勉強会のお知らせ
PPTX
SQL Server 2019 とともに知る Microsoft Data Platform
PPTX
Microsoft Ignite 2019 最新アップデート - Azure Big Data Services を俯瞰的に眺める
PDF
Oracle Database Standard EditionでセミオンラインDDL
PPTX
Microsoft Azure - SQL Data Warehouse
PDF
SQL Server 2014 In Memory OLTP Overview
PDF
LightSwitch ~結局何ができるの~ rev 2
PDF
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(前編)
PPTX
Azure Data Platform
PDF
SQL Server 2008 R2 BI
PDF
[Japan Tech summit 2017] CLD 011
PDF
C11,12 SQL Server 2012 Performance Tuning by Yukio Kumazawa
PDF
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]
PDF
【de:code 2020】 Power Platform で広がるデータ インテグレーションの世界 (1/2)
PPTX
Sql server 運用 101
Sql server よく聞く設定とその効果
Seas で語られたこととは?
2012年1月技術ひろば
待ち事象から考える、Sql server の改善ポイント
Qlik Talend Cloudしっかり学ぶ勉強会 #8 「データソース IBM DB2接続」
Sql server 2012 の bi関連 新機能の紹介 と 次回sqlto勉強会のお知らせ
SQL Server 2019 とともに知る Microsoft Data Platform
Microsoft Ignite 2019 最新アップデート - Azure Big Data Services を俯瞰的に眺める
Oracle Database Standard EditionでセミオンラインDDL
Microsoft Azure - SQL Data Warehouse
SQL Server 2014 In Memory OLTP Overview
LightSwitch ~結局何ができるの~ rev 2
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(前編)
Azure Data Platform
SQL Server 2008 R2 BI
[Japan Tech summit 2017] CLD 011
C11,12 SQL Server 2012 Performance Tuning by Yukio Kumazawa
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]
【de:code 2020】 Power Platform で広がるデータ インテグレーションの世界 (1/2)
Sql server 運用 101
Ad

More from Insight Technology, Inc. (20)

PDF
グラフデータベースは如何に自然言語を理解するか?
PDF
Docker and the Oracle Database
PDF
Great performance at scale~次期PostgreSQL12のパーティショニング性能の実力に迫る~
PDF
事例を通じて機械学習とは何かを説明する
PDF
仮想通貨ウォレットアプリで理解するデータストアとしてのブロックチェーン
PDF
MBAAで覚えるDBREの大事なおしごと
PDF
グラフデータベースは如何に自然言語を理解するか?
PDF
DBREから始めるデータベースプラットフォーム
PDF
SQL Server エンジニアのためのコンテナ入門
PDF
Lunch & Learn, AWS NoSQL Services
PDF
db tech showcase2019オープニングセッション @ 森田 俊哉
PDF
db tech showcase2019 オープニングセッション @ 石川 雅也
PDF
db tech showcase2019 オープニングセッション @ マイナー・アレン・パーカー
PPTX
難しいアプリケーション移行、手軽に試してみませんか?
PPTX
Attunityのソリューションと異種データベース・クラウド移行事例のご紹介
PPTX
そのデータベース、クラウドで使ってみませんか?
PPTX
コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』...
PDF
複数DBのバックアップ・切り戻し運用手順が異なって大変?!運用性の大幅改善、その先に。。
PPTX
Attunity社のソリューションの日本国内外適用事例及びロードマップ紹介[ATTUNITY & インサイトテクノロジー IoT / Big Data フ...
PPTX
レガシーに埋もれたデータをリアルタイムでクラウドへ [ATTUNITY & インサイトテクノロジー IoT / Big Data フォーラム 2018]
グラフデータベースは如何に自然言語を理解するか?
Docker and the Oracle Database
Great performance at scale~次期PostgreSQL12のパーティショニング性能の実力に迫る~
事例を通じて機械学習とは何かを説明する
仮想通貨ウォレットアプリで理解するデータストアとしてのブロックチェーン
MBAAで覚えるDBREの大事なおしごと
グラフデータベースは如何に自然言語を理解するか?
DBREから始めるデータベースプラットフォーム
SQL Server エンジニアのためのコンテナ入門
Lunch & Learn, AWS NoSQL Services
db tech showcase2019オープニングセッション @ 森田 俊哉
db tech showcase2019 オープニングセッション @ 石川 雅也
db tech showcase2019 オープニングセッション @ マイナー・アレン・パーカー
難しいアプリケーション移行、手軽に試してみませんか?
Attunityのソリューションと異種データベース・クラウド移行事例のご紹介
そのデータベース、クラウドで使ってみませんか?
コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』...
複数DBのバックアップ・切り戻し運用手順が異なって大変?!運用性の大幅改善、その先に。。
Attunity社のソリューションの日本国内外適用事例及びロードマップ紹介[ATTUNITY & インサイトテクノロジー IoT / Big Data フ...
レガシーに埋もれたデータをリアルタイムでクラウドへ [ATTUNITY & インサイトテクノロジー IoT / Big Data フォーラム 2018]

[db tech showcase Sapporo 2015] A26:SQL Server Data Page Structure Deep Dive by 小澤真之(Microsoft MVP for SQL Server)

  • 1. SQL Server Data Page Structure Deep Dive Masayuki Ozawa (@Masayuki_Ozawa) A26
  • 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 2016) 2015/9/11
  • 3. 本日の内容 2015/9/11db tech showcase 20153  SQL Server Data Page Structure Deep Dive  SQL Server のデータ格納領域についてのセッション  行ストア * を例としたデータ格納の概念と 実際の実装を照らし合わせて確認 * 列ストア/インメモリテーブルは格納方法が異なる
  • 5. SQL Server のデータ領域の基本単位 2015/9/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/9/11db tech showcase 20156 ページヘッダ データ オフセット 8096 バイト 8192 バイト 96 バイト レコード 1 レコード 2 レコード 3 123 行ごとの最大データ : 8,060 バイト 列ごとの最大データ : 8,000 バイト 以下のデータ型を利用した、行オーバーフローデータ(ポインターでデータをつなぐ)により、 行ごとの最大データ以上のデータを格納することも可能 (varchar /nvarchar / varbinary / sql_variant ) 8 KB を超える場合の行オーバーフロー データ https://technet.microsoft.com/ja-jp/library/ms186981(v=sql.105).aspx ページヘッダ : ページの管理情報 データ: 実レコードのデータ オフセット: レコードの位置を示す情報
  • 7. ページの基本構造 #2 2015/9/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/9/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/9/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/9/11db tech showcase 201510 ページとエクステントの基本構造
  • 12. 主要なページの種類 2015/9/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/9/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/9/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/9/11db tech showcase 201515 各ページの内容を確認 DEMO
  • 17. クラスター化インデックスの構造 2015/9/11db tech showcase 201517  クラスター化インデックスは階層構造のインデックス  リーフにはデータを持つ ルート 中間 リーフ リーフ 中間 リーフ リーフ
  • 18. 一意にならないクラスター化インデックス 2015/9/11db tech showcase 201518  SQL Server ではデザイナーで主キーを設定すると、キー項目がクラスター化 インデックスとして設定される  一意にならない列にクラスター化インデックスを設定するとどうなるか  4 バイトの uniqueifer 列が自動的に設定され、内部的に同一データを一意に識別され る値が付与されている  クラスタ化インデックスの設計ガイドライン https://technet.microsoft.com/ja-jp/library/ms190639(v=sql.105).aspx  2,147,483,647 件、一意にならない同一のクラスター化インデックスキー(同一キー)のデータ を挿入した例  ヒープテーブルの場合は RID (Row ID) により、行を一意に識別できる  RID : DatabaseID:FileID:PageID:Slot
  • 19. 非クラスター化インデックスの構造 2015/9/11db tech showcase 201519  非クラスター化インデックスは階層構造のインデックス  リーフにはインデックスキーのデータを持つ  リーフにはインデックスキーのほかに行データへのリンクを持つ ルート 中間 リーフ リーフ 中間 リーフ リーフ 行データ 行データへのリンク
  • 20. 2015/9/11db tech showcase 201520 インデックス構造の確認 DEMO
  • 21. ページポインター 2015/9/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/9/11db tech showcase 201522 ページポインター DEMO
  • 23. 断片化 2015/9/11db tech showcase 201523  アクセス効率の低下  ページ密度の低下  FILL FACTOR とのトレードオフもある  ページ連続性の低下  シーケンシャルアクセス > ランダムアクセス  ページの連続性の低下  再構成 (REORGANIZE) / 再構築 (REBUILD)で解消  エクステントの連続性の低下  再構築で解消 (REBUILD) 50% 50% 50% 50% 100% ページ #1 ページ #2 ページ #3 Page ID 100 Page ID 890 Page ID 2000 50/50 分割 ページ連続性の低下
  • 24. 参考)FILL FACTOR 2015/9/11db tech showcase 201524  ページ内の空き領域を設定するための項目  インデックスのメンテナンスをした際に設定された FILL FACTOR に応じて空き領域 を作り、新規のデータが挿入された場合のページ分割を抑制することができる  インデックスのメンテナンスをした際に空き領域を生成する設定であり、通常の利用時に は 100% データを格納する  FILL FACTOR を設定することでデータ追加時の 50/50 分割の発生頻度を抑えることが できるがページ密度が低下する FILL FACOTR 設定なし (既定) 100% 20% の空き領域 FILL FACOTR 80% インデックスメンテナンス後のページ密度
  • 25. 2015/9/11db tech showcase 201525 断片化 DEMO
  • 26. 最後に 2015/9/11db tech showcase 201526 さらに情報を知りたい方は 「Internals Deep Dive」 のキーワードで検索 海外の情報になりますが、 さらに詳細な情報を確認できます