Open棟梁Project - マイクロソフト系技術情報 Wiki

[[戻る>SQL Server]]

* 目次 [#v841dae8]
#contents

*概要 [#f24a83fb]
主にSQL Server パーティション分割のOLTPにおける効果について説明する。

*パーティション分割とインデックス [#m1dcc7a2]
パーティション分割は、テーブルだけでなく、インデックスにも適用できる。
-パーティション分割したテーブルは、「パーティション テーブル」と呼ぶ。
-パーティション分割したインデックスは、「パーティション インデックス」と呼ぶ。

-「パーティション インデックス」は、必ずしも「パーティション テーブル」を必要としない。
-「パーティション テーブル」と同一の「パーティション構成」で、「パーティション インデックス」を実装することを、~
「パーティション インデックス」を「パーティション テーブル」に「固定」する。と言う。

-CREATE INDEX (Transact-SQL)~
http://msdn.microsoft.com/ja-jp/library/ms188783.aspx

*性能の向上ポイント [#b9c469bd]
-並列クエリなど、I/Oスレッドを増大させることによって~
初回検索時の大幅な性能向上が期待できるが、これは、基本的に
--適切に設計されたOLTP向けの性能向上を期待するものではない(OLAP向け)。
--I/Oネックにならない様にファイル・グループやRAIDでI/O性能を向上させておく必要がある。

-スキップ スキャン操作、ロック局所化は「適切に設計された」~
OLTPアプリケーションを大きく性能向上させるものではない。

-下記の機能に起因してOLTPにおける検索性能が向上することは期待できる。~
24時間止められないシステムなどで特に有効となる機能である。

--データのアーカイブが迅速にできる(スライディング ウインドウ)。~
「パーティション テーブル」に「固定」された、「パーティション インデックス」も対象となる。

--インデックスの断片化の局所化、デフラグや再構築の局所化と高速が可能。~
並列クエリは、クエリ実行およびインデックス操作にも適用される。~
バックアップ・リストアについては、バックアップ デバイス数と同数のスレッドが使用される。

-その他、パーティション分割は必須ではないが、~
ファイル・グループ単位の部分バックアップや、段階的リストアが可能である。~

*検索性能の向上 [#kda881e3]
「パーティション」毎に
- ワーカ スレッドを起動(並列クエリ)
-スキップ スキャン操作の効果により、スキャンを局所化(検索処理の高速化)
-(エスカレーション時)ロックを局所化(更新処理の同時実行性の向上)
-併置結合によるテーブル結合を実行(テーブル結合処理の高速化)~
「パーティション インデックス」を「固定」する必要がある。

**並列クエリの次数に影響を与えるオプション [#x582f183]
「並列クエリ」の次数に以下のオプションが影響を与える。
|affinity mask|CPUのアフィニティ マスク|
|max degree of parallelism 21|「並列クエリ」の最大次数|
|MAX_DOP|「並列クエリ」の最大次数|
|MAXDOP|「並列クエリ」の最大次数|
|「パーティション」数|「並列クエリ」の次数|

これらのオプションの優先順は、以下のようになる。~
affinity mask > MAX_DOP > MAXDOP > max degree of parallelism~

なお、複数のユーザが、クエリを実行する場合、~
プランの次数は、その処理開始時点の各CPUの処理量を考慮する。~
(具体的な"しきい値"は、Microsoftから公開されていない)。

**スキップ・スキャン、ロック局所化 [#b50cffcf]
「パーティション分割列」を検索条件に追加した場合、
-スキップ スキャン操作の効果により、インデックスの範囲スキャン検索の性能が向上する。
-ロックを局所化の効果により、更新処理の同時実行性が向上する。

#「パーティション テーブル」に「固定」された、「パーティション インデックス」である必要はない。

**検索性能が劣化するケース [#w082fffa]
パーティション分割によって、クエリ性能が劣化するケースもあるもよう。

-パーティショニング実施時にパーティションキーの有無による検索効率の違い ? SE の雑記~
http://engineermemo.wordpress.com/2012/04/10/%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%8B%E3%83%B3%E3%82%B0%E5%AE%9F%E6%96%BD%E6%99%82%E3%81%AB%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%AD%E3%83%BC/
>パーティショニングによって読み取り数(アクセスされたパーティション数)が変わってくる(大きくなる)ケースがある。~
ただし、パーティションキーを含めた検索では、読み取り数は大きくならないとなっている。

-パーティション テーブルとパーティション インデックスに対するクエリ処理の機能強化~
http://msdn.microsoft.com/ja-jp/library/ms345599.aspx
>パーティション テーブルとパーティション インデックスに対するクエリの実行プランは、~
Transact-SQL の SET SHOWPLAN_XML または SET STATISTICS XMLを使用するか、~
SQL Server Management Studio のグラフィカル実行プラン出力を使用して調べることができる。

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS