テーブルパーティションの使用状況を出力するSQL Server動的管理ビューレファレンス(29)

「Microsoft SQL Server」が稼働するデータベースシステムを運用する管理者に向け、「動的管理ビュー」の活用を軸にしたトラブル対策のためのノウハウを紹介していきます。今回は、テーブルパーティションの使用状況の出力について解説します。

» 2021年07月27日 05時00分 公開
[伊東敏章@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

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)。

図1 図1 テーブルにパーティション分割されたクラスタ化インデックスを作成した

 「sys.dm_db_partition_stats」動的管理ビューを出力すると、システムテーブルを含めた情報が出力されました(図2)。

図2 図2 「sys.objects」と結合し、テーブル名が分かるように出力した

 ユーザーテーブルのみの結果を含めるようにクエリを修正して、「sys.dm_db_partition_stats」動的管理ビューを出力します(図3)。

図3 図3 「sys.objects」の「type_desc」列を利用してユーザーテーブルのみ出力されるように修正した

 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.

スポンサーからのお知らせPR

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。