SlideShare uma empresa Scribd logo
1 de 26
Baixar para ler offline
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」
のキーワードで検索
海外の情報になりますが、
さらに詳細な情報を確認できます

Mais conteúdo relacionado

Mais procurados

Data consistency 入門 data partitioning ガイダンス
Data consistency 入門 data partitioning ガイダンスData consistency 入門 data partitioning ガイダンス
Data consistency 入門 data partitioning ガイダンス
Masayuki Ozawa
 
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
Masayuki Ozawa
 
SQL Server 2014 データベースエンジン新機能
SQL Server 2014 データベースエンジン新機能SQL Server 2014 データベースエンジン新機能
SQL Server 2014 データベースエンジン新機能
Masayuki Ozawa
 
Sql database 基本構成と直近で追加されていた機能の紹介
Sql database 基本構成と直近で追加されていた機能の紹介Sql database 基本構成と直近で追加されていた機能の紹介
Sql database 基本構成と直近で追加されていた機能の紹介
Masayuki Ozawa
 
Sql server 構築 運用 tips
Sql server 構築 運用 tipsSql server 構築 運用 tips
Sql server 構築 運用 tips
Masayuki Ozawa
 
オンプレのDbaがazureのデータベースを使ってみた
オンプレのDbaがazureのデータベースを使ってみたオンプレのDbaがazureのデータベースを使ってみた
オンプレのDbaがazureのデータベースを使ってみた
Masayuki Ozawa
 
Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう
Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみようSql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう
Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう
Masayuki Ozawa
 
DBA から開発者への情報提供
DBA から開発者への情報提供DBA から開発者への情報提供
DBA から開発者への情報提供
Masayuki Ozawa
 
db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!
db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!
db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!
Masayuki Ozawa
 

Mais procurados (20)

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

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

Sql server よく聞く設定とその効果
Sql server よく聞く設定とその効果Sql server よく聞く設定とその効果
Sql server よく聞く設定とその効果
Masayuki Ozawa
 
Seas で語られたこととは?
Seas で語られたこととは?Seas で語られたこととは?
Seas で語られたこととは?
Masayuki Ozawa
 
2012年1月技術ひろば
2012年1月技術ひろば2012年1月技術ひろば
2012年1月技術ひろば
貴仁 大和屋
 
待ち事象から考える、Sql server の改善ポイント
待ち事象から考える、Sql server の改善ポイント待ち事象から考える、Sql server の改善ポイント
待ち事象から考える、Sql server の改善ポイント
Masayuki Ozawa
 
Sql server 2012 の bi関連 新機能の紹介 と 次回sqlto勉強会のお知らせ
Sql server 2012 の bi関連 新機能の紹介 と 次回sqlto勉強会のお知らせSql server 2012 の bi関連 新機能の紹介 と 次回sqlto勉強会のお知らせ
Sql server 2012 の bi関連 新機能の紹介 と 次回sqlto勉強会のお知らせ
Masayuki Ozawa
 
SQL Server 2014 In Memory OLTP Overview
SQL Server 2014 In Memory OLTP OverviewSQL Server 2014 In Memory OLTP Overview
SQL Server 2014 In Memory OLTP Overview
Masayuki Ozawa
 
C11,12 SQL Server 2012 Performance Tuning by Yukio Kumazawa
C11,12 SQL Server 2012 Performance Tuning by Yukio KumazawaC11,12 SQL Server 2012 Performance Tuning by Yukio Kumazawa
C11,12 SQL Server 2012 Performance Tuning by Yukio Kumazawa
Insight Technology, Inc.
 
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]
日本マイクロソフト株式会社
 

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

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

Mais de Insight Technology, Inc.

コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』...
コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』...コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』...
コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』...
Insight Technology, Inc.
 

Mais de Insight Technology, Inc. (20)

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