「Microsoft SQL Server」が稼働するデータベースシステムを運用する管理者に向け、「動的管理ビュー」の活用を軸にしたトラブル対策のためのノウハウを紹介していきます。今回は、テーブルパーティションの使用状況の出力について解説します。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
本連載では、「Microsoft SQL Server(以下、SQL Server)」で使用可能な動的管理ビューについて、動作概要や出力内容などを紹介していきます。今回は動的管理ビュー「sys.dm_db_partition_stats」におけるテーブルパーティションの使用状況の出力について解説します。対応バージョンは、SQL Server 2008以降です。
SQL Serverでは、テーブルやインデックスをパーティション分割し、1つのテーブルやインデックスを複数のファイルグループに分散できます。パーティション分割を適切に構成することで、メンテナンス時間の短縮やパフォーマンスの向上などにつながる可能性があります。
パーティション分割の機能は、SQL Server 2016 RTMまではEnterprise Editionのみで使用できる機能でしたが、SQL Server 2016 SP1以降は、Standard Editionでも使用できるようになりました。
「sys.dm_db_partition_stats」動的管理ビューを使用することで、パーティション分割されたテーブルやインデックスについて、パーティションごとのデータ行数やページ数などの使用状況を確認できます。
列名 | データ型 | 説明 |
---|---|---|
partition_id | bigint | パーティションID sys.partitionsカタログビューのpartition_idと同値 |
object_id | int | パーティションが属するテーブルまたはインデックス付きビューのオブジェクトID |
index_id | int | パーティションが属するヒープまたはインデックスのID 0 = ヒープ 1 = クラスタ化インデックス >1 = 非クラスタ化インデックス |
partition_number | int | インデックスまたはヒープ内の、1から始まるパーティション番号 |
in_row_data_page_count | bigint | パーティションで行内データの格納に使用されているページ数 インデックスのB-Treeの非リーフページは含まれない。IAMページは含まれない |
in_row_used_page_count | bigint | パーティションで行内データの格納、管理に使用されているページの合計数 B-Tree の非リーフ ページ、IAM ページを含む |
in_row_reserved_page_count | bigint | パーティションで行内データの格納、管理に予約されているページの合計数 |
lob_used_page_count | bigint | LOBの格納、管理に使用されているページ数 text、ntext、image、varchar(max)、nvarchar(max)、varbinary(max)、xml型の格納と管理で使用する IAMページを含む 列ストアインデックスの場合、格納と管理に使用されているLOBの合計数 |
lob_reserved_page_count | bigint | LOBの格納、管理に予約されたページの合計数 列ストアインデックスの場合、格納と管理に予約されているLOBの合計数 |
row_overflow_used_page_count | bigint | 行オーバーフローの格納、管理に使用されているページ数 varchar、nvarchar、varbinary、sql_variant型の格納と管理で使用する IAMページを含む |
row_overflow_reserved_page_count | bigint | 行オーバーフローの格納、管理に予約されているページ数 |
used_page_count | bigint | パーティションで使用されているページの合計数 in_row_used_page_count + lob_used_page_count + row_overflow_used_page_countとして計算される |
reserved_page_count | bigint | パーティションで予約されているページの合計数 in_row_reserved_page_count +lob_reserved_page_count + row_overflow_reserved_page_countとして計算される |
row_count | bigint | パーティション内の行数の概算値 |
データベースの1つのテーブルで、パーティション分割を構成します(図1)。
「sys.dm_db_partition_stats」動的管理ビューを出力すると、システムテーブルを含めた情報が出力されました(図2)。
ユーザーテーブルのみの結果を含めるようにクエリを修正して、「sys.dm_db_partition_stats」動的管理ビューを出力します(図3)。
1つのテーブルでのみパーティションを構成しましたが、パーティションを構成していないテーブルの情報も出力されました。パーティションを構成していないテーブルでは、「partition_number」列の値が「1」のデータを出力する。
パーティション構成したテーブルの情報を確認すると、「row_count」列の値から、2つのパーティションのデータ行数に偏りがあることが分かりました。出力された値を使用して、想定通りのデータ量でテーブルがパーティション分割されているかどうかを確認できます。
※本Tipsは、「Windows Server 2019」上に「SQL Server 2019 CTP2」をインストールした環境を想定して解説しています。
日本ユニシス株式会社所属。Microsoft MVP for Data Platform(2017〜)。入社以来 SQL Serverの評価/設計/構築/教育などに携わりながらも、主にサポート業務に従事。SQL Serverのトラブル対応で社長賞の表彰を受けた経験も持つ。休日は学生時代の仲間と市民駅伝に参加し、銭湯で汗を流してから飲み会へと流れる。
日本ユニシス株式会社所属。入社以来SQL Server一筋で評価/設計/構築/教育などに携わりながらも、主にサポート業務に従事。社内のプログラミングコンテストで4回の優勝経験も持つ。趣味は輪行で週末は自転車を持っての旅行。目標は色々な日本百選を制覇すること。
Copyright © ITmedia, Inc. All Rights Reserved.