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 のグラフィカル実行プラン出力を使用して調べることができる。