SQL Server パーティション分割
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicros...
-[[戻る>SQL Server]]
* 目次 [#v841dae8]
#contents
*概要 [#f24a83fb]
主にSQL Server パーティション分割の効果について説明する。
-構成
--「パーティション分割」は、テーブル上の特定の列を「パー...
行データを特定の「[[ファイル・グループ>#e68a346c]]」にマ...
--なお、「パーティション分割」後の、テーブル・インデック...
「パーティション テーブル」と「パーティション インデック...
---「パーティション テーブル」と「パーティション インデッ...
---標準的なテーブル・インデックスの設計とクエリに関連する...
---これにより、エンティティ全体のデータの整合性を維持しな...
グループ化されたデータ サブセットに対するアクセス性能の向...
--なお、SQL Serverでは、1つのテーブルに最大1000個の「パー...
-効果
--主に運用系性能(インデックスのデフラグ・再構築、データ...
--一部データ アクセス性能([[並列クエリ>SQL Server のファ...
--インスタンスが分割できるような場合は、インスタンス分割...
*パーティションの設計指針(分割指針) [#ce44fefb]
主に、日付などの論理的にグループ化された~
データ サブセットを管理するのに適切であるかどうかによって...
**「パーティション分割列」 [#i717ecca]
***範囲 [#kfdc5274]
「[[パーティション関数>#q05a8055]]」により指定される。
***データ型 [#tdaf1863]
以下のデータ型を除くインデックス キーとして使用できるデー...
-timestamp型
-ntext型
-text型
-image型
-xml型
-varchar(max)型
-nvarchar(max)型
-varbinary(max)型
-CLRユーザ定義データ型
-別名データ(エイリアス データ)型
**「パーティション関数」 [#q05a8055]
***定義 [#s01e5519]
CREATE PARTITION FUNCTION partition_function_name ( inpu...
AS RANGE RIGHT FOR VALUES ( [ boundary_value [ ,...n ]...
上記の「パーティション関数」(partition_function_name)で...
指定の型(input_parameter_type)の「パーティション分割列...
格納された値に基づき「パーティション分割」を行う。~
なお、RANGE にはLEFTより、RIGHTを指定することが推奨される。
***例 [#h34e9ecf]
CREATE PARTITION FUNCTION partition_function_name ( int...
AS RANGE RIGHT FOR VALUES ( 100, 200, 300 );
と指定した場合、この「パーティション関数」によって、
-パーティション 1 : 列の値 < 100
-パーティション 2 : 100 <= 列の値 < 200
-パーティション 3 : 200 <= 列の値 < 300
-パーティション 4 : 300 <= 列の値
の4つの「パーティション」に分割される。
**「パーティション」と「[[ファイル・グループ>#e68a346c]]...
双方の関係は以下のようになる。
-「パーティション」は「[[ファイル・グループ>#e68a346c]]」...
-1つの「パーティション」を、1つの「[[ファイル・グループ...
-いくつかの「パーティション」を、1つの「[[ファイル・グル...
-すべての「パーティション」を、1つの「[[ファイル・グルー...
*パーティションの作成と構成の確認 [#i5c8fafe]
**パーティションの作成手順 [#s0b7cb39]
***「パーティション構成」の定義する [#o35d89e1]
「パーティション関数」の「パーティション分割」で指定され...
「[[ファイル・グループ>#e68a346c]]」のマップを指定して、...
パーティション構成の定義:
CREATE PARTITION SCHEME partition_schema_name
AS PARTITION partition_function_name
TO ( { file_group_name | [ PRIMARY ] } [ ,...n ] );
上記の「パーティション構成」の定義では、
-「パーティション関数」で分割した「パーティション」を、
-リストに指定した「[[ファイル・グループ>#e68a346c]]」の順...
※ 「パーティション構成」で使用できる「パーティション関数...
※ 1つの「パーティション関数」は、複数の「パーティション...
***「パーティション テーブル」を作成する。 [#t4319a25]
「パーティション構成」と「パーティション分割列」を指定し...
パーティション テーブルの定義:
CREATE TABLE table_name(
<column_definition>[ ,...n ])
ON partition_schema_name (div_column_name);
***「パーティション インデックス」を作成する。 [#beeb36d0]
「パーティション構成」に「パーティション分割列」を指定し、~
「パーティション テーブル」に「固定」された、「パーティシ...
パーティション インデックスの定義:
CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX in...
ON table_name (column_name);
ON partition_schema_name (div_column_name);
**「パーティション構成」の確認方法 [#a9c90e01]
***「パーティション関数」の名前と境界の確認 [#d531908c]
SELECT f.name, r.value, *
FROM sys.partition_range_values r
INNER JOIN sys.partition_functions f
ON r.function_id = f.function_id
***「パーティション構成」、「[[ファイル・グループ>#e68a34...
SELECT
ps.name As [パーティション構成名],
ds.name As [ファイル グループ名],
dds.destination_id As [パーティション番号],
*
FROM
sys.destination_data_spaces dds
INNER JOIN sys.partition_schemes ps
ON dds.partition_scheme_id = ps.data_space_id
INNER JOIN sys.data_spaces ds
ON dds.data_space_id = ds.data_space_id
ORDER BY
partition_scheme_id
***データが格納された「パーティション番号」を確認 [#r307e...
-partition_function_name:「パーティション関数」
-expression:値(=パーティション分割列を指定する)
SELECT
*, $PARTITION.partition_function_name(expression) As [...
FROM
table_name
若しくは、
SELECT
$PARTITION.partition_function_name(expression) As [パー...
COUNT(*) As [行数]
FROM
table_name
GROUP BY
$PARTITION.partition_function_name(expression)
*性能の向上ポイント [#b9c469bd]
[[ファイル・グループ>#e68a346c]]の性能向上
-「[[簡易ストライピング>SQL Server のファイル・グループ#l...
-「[[並列クエリ>SQL Server のファイル・グループ#z5226928]]
に加え、以下の性能向上を図ることができる。
**検索性能の向上 [#kda881e3]
「パーティション」毎に
-スキップ スキャン操作の効果により、スキャンを局所化(検...
-(エスカレーション時)ロックを局所化(更新処理の同時実行...
-併置結合によるテーブル結合を実行(テーブル結合処理の高速...
「パーティション インデックス」を「パーティション テーブ...
***スキップ・スキャン、ロック局所化 [#b50cffcf]
-「パーティション分割列」を検索条件に追加した場合、
--スキップ スキャンの効果により、範囲スキャン検索の性能が...
--ロック局所化の効果により、更新処理の同時実行性が向上す...
-備考~
スキップ スキャン、ロック局所化は「適切に設計された」~
OLTPアプリケーションを大きく性能向上させるものではない。
--スキップ スキャン~
「パーティション インデックス」を「パーティション テーブ...
--ロック局所化
---データベース エンジンが、ロック エスカレーション が必...
行ロック・キー範囲ロックをページ ロックではなく、テーブル...
---同様に、ページ ロックは常にテーブル ロックにエスカレー...
---しかし、SQL Server 2008から、「パーティション テーブル...
テーブル レベルではなく、ヒープまたは B ツリー(HoBT)レ...
留めることで、ロック待ちを少なくし、同時実効性を向上でき...
#ref(SkipScan.png,left,nowrap,スキップ・スキャン)
***併置結合によるテーブル結合 [#xc94981e]
-「併置結合」は、同じ「パーティション構成」の2つのテーブ...
「パーティション分割列」をキーにして結合する際に発生する~
(結合に使用する「パーティション分割列」に「パーティショ...
-この場合にオプティマイザが生成する「併置結合」の実行プラ...
「パーティション」毎、「並列処理」で結合されるため、メモ...
***検索性能が劣化するケース [#w082fffa]
パーティション分割によって、クエリ性能が劣化するケースも...
-[[パーティショニング実施時にパーティションキーの有無によ...
>パーティショニングによって読み取り数(アクセスされたパー...
ただし、パーティションキーを含めた検索では、読み取り数は...
-パーティション テーブルとパーティション インデックスに対...
http://msdn.microsoft.com/ja-jp/library/ms345599.aspx
>パーティション テーブルとパーティション インデックスに対...
Transact-SQL の SET SHOWPLAN_XML または SET STATISTICS XM...
[[SQL Server Management Studio>SSMS]] のグラフィカル実行...
**運用性能の向上 [#w0f4710a]
メンテナンス
-テーブル データのアーカイブ
-インデックスの断片化の局所化、再構築・最適化
が、「パーティション」毎に可能となり、~
-保守・運用中のデータ管理タスクの性能が向上したり、より簡...
-これらの機能は、24時間止められないシステムなどで特に有効...
***データのアーカイブ(スライディング ウインドウ) [#v9b4...
適切に「パーティション分割」を行えば、下記のような、古い...
アーカイブする「スライディング ウインドウ」と呼ばれる操作...
-スイッチ機能を使用(例:稼働テーブルからアーカイブ・テー...
-スイッチ機能は、内部的なポインタ変更のみで完了するので、...
「スライディング ウインドウ」操作は、次の手順で行われる。
-「データベース スキーマ」に
--稼動テーブル・アーカイブ テーブルの~
・「パーティション テーブル」~
・「パーティション インデックス」~
を同じ「パーティション構成」で作成。
--次に(アーカイブのために)~
新規作成する「パーティション」で使用する、~
新規「[[ファイル・グループ>#e68a346c]]」を追加。
-稼動テーブル・アーカイブ テーブルに
--新規「パーティション」で使用する「[[ファイル・グループ>...
--「パーティション」境界を追加し、新規「パーティション」...
-稼動テーブルからアーカイブテーブルに、最も古い「パーティ...
--稼動テーブルへ、スイッチした「パーティション」が対象と...
--「パーティション」が増えてきたら、「パーティション」境...
以下に、「スライディング ウインドウ」操作の注意点を纏める。
-スイッチ操作は、同じ「[[ファイル・グループ>#e68a346c]]」...
--なお、スイッチ機能は、同じ「[[ファイル・グループ>#e68a3...
稼動テーブルと、アーカイブ テーブルの「パーティション」と...
まったく同じにするか、双方とも1つの「[[ファイル・グルー...
--ただし、後者の1つの「[[ファイル・グループ>#e68a346c]]...
基本的に、稼動テーブルとアーカイブ テーブルの「パーティシ...
"まったく"同じにし、複数の「[[ファイル・グループ>#e68a346...
-スイッチ元と スイッチ先の「パーティション テーブル」は、...
-スイッチ元と スイッチ先の「パーティション インデックス」...
※ 詳細は、[[自習書>#y2c7a50a]]を参照。
***インデックスの断片化の局所化、デフラグや再構築の局所化...
-[[並列クエリ>SQL Server のファイル・グループ#z5226928]]...
-この場合、「パーティション インデックス」を「パーティシ...
-「パーティション番号」を指定した、デフラグや再構築
--ALTER INDEXステートメントのREBUILD、REORGANIZEに「パー...
--REBUILDはDBCC DBREINDEXと、REORGANIZEはDBCC INDEXDEFRAG...
--しかし、DBCC DBREINDEXについては「パーティション番号」...
-参考
--インデックスの再編成と再構築~
http://msdn.microsoft.com/ja-jp/library/ms189858.aspx
--並列インデックス操作~
http://msdn.microsoft.com/ja-jp/library/ms191292.aspx
--並列インデックス操作の構成~
https://msdn.microsoft.com/ja-jp/library/ms189329.aspx
*「パーティション インデックス」 [#bfae5bcf]
-パーティション分割したテーブルは、「パーティション テー...
-パーティション分割は、テーブルだけでなく、インデックスに...
-パーティション分割したインデックスは、「パーティション ...
-「パーティション インデックス」は、必ずしも「パーティシ...
-「パーティション テーブル」と同一の「パーティション構成...
**「パーティション インデックス」を「パーティション テー...
-「パーティション テーブル」と同一の「パーティション構成...
「パーティション インデックス」を「パーティション テーブ...
-SQL Server Management Studioは、既定で、~
「パーティション インデックス」を「パーティション テーブ...
***「パーティション インデックス」の「固定」が必要なケー...
-一意性制約~
「パーティション分割列」を含んでいるユニーク インデックス...
--「パーティション分割列」を含まない「パーティション イン...
複数の「パーティション」間に跨る一意性を保証できないため、~
「パーティション インデックス」を「パーティション テーブ...
--「パーティション分割列」をユニーク インデックス(一意性...
代用としてDMLトリガを使用することでユニーク インデックス...
-スライディング ウインドウ~
「パーティション インデックス」を「パーティション テーブ...
することにより、「[[データのアーカイブ(スライディング ウ...
」が可能になる。
-併置結合~
「パーティション インデックス」を「パーティション テーブ...
することにより、「[[併置結合によるテーブル結合>#xc94981e]...
***「パーティション インデックス」の「固定」が不要なケー...
インデックスや、「パーティション インデックス」は、~
ベースの「パーティション テーブル」の「パーティション構成...
**考慮事項 [#va583dcf]
「パーティション インデックス」の作成についての考慮事項に...
***一意でないクラスタ化インデックス [#i0b8e7a3]
-ユニーク インデックス(一意性制約)でない~
「クラスタ化インデックス」を「パーティション分割」する場...
クラスタ化キーに「[[パーティション分割列>#i717ecca]]」を...
-SQL Server(のGUI)は、~
既定でクラスタ化キーの一覧に「パーティション分割列」を追...
***一意でない非クラスタ化インデックス [#a15bcc46]
-ユニーク インデックス(一意性制約)でない~
「非クラスタ化インデックス」を「パーティション分割」する...
キーに「[[パーティション分割列>#i717ecca]]」を指定しない...
-SQL Server(のGUI)は、~
既定で「非クラスタ化インデックス」の非キー列を、~
[[「付加列インデックス」の付加列>SQL Server のインデック...
***メモリの制限 [#y7ca83d1]
「パーティション テーブル」上にインデックスを作成する際、
-並べ替えテーブルは、始めに「パーティション」毎に、メモリ...
-次に、「パーティション」毎に、「[[ファイル・グループ>#e6...
(SORT_IN_TEMPDBオプションが指定されている場合は tempdbの...
-「パーティション テーブル」に「固定」された「パーティシ...
--並べ替えテーブルは、メモリ上に一つずつ作成されるのでメ...
-しかし、「パーティション テーブル」に「固定」されない各...
--並べ替えテーブルは複数同時に作成されるのでメモリの消費...
---例えば、100個の「パーティション」から構成される~
「パーティション テーブル」に「固定」されない各種インデッ...
4,000ページを同時に並べ替えることができる32MBのメモリを消...
--また、SQL Serverがマルチプロセッサ(マルチコア)の「並...
「パーティション テーブル」に「固定」されない各種インデッ...
メモリの要件がさらに高くなる場合がある。
---例えば、同時に4つのスレッドで、100個のパーティション...
「パーティション テーブル」に「固定」されない各種インデッ...
4,000ページ × 4スレッド = 16,000ページ分の、128MBのメモ...
---メモリを確保できれば、インデックス作成は成功するが、~
場合によってバッファ キャッシュの枯渇や、ページングの発生...
インデックス作成の性能が低下する場合がある。
---並列インデックス操作の構成~
http://msdn.microsoft.com/ja-jp/library/ms189329.aspx
>※ MAXDOPインデックス オプションを使用して、~
「並列処理」のスレッドを減らすことができる。
*パーティションの削除 [#z059633a]
パーティショニング後、PARTITION FUNCTIONの削除はできない...
-DROP PARTITION FUNCTION (Transact-SQL)~
https://msdn.microsoft.com/ja-jp/library/ms187759.aspx
>パーティション関数を削除できるのは、対象となるパーティシ...
パーティション関数が、いずれかのパーティション構成で使用...
調べてみると、
-パーティション テーブルとパーティション インデックスの変...
https://technet.microsoft.com/ja-jp/library/ms175864(v=sq...
パーティション テーブルから非パーティション テーブルへの...
--(1)・・・テーブルを構成するパーティションが 1 つだけ...
パーティション テーブルのパーティション関数を変更します。
---ALTER PARTITION FUNCTION (Transact-SQL)~
https://technet.microsoft.com/ja-jp/library/ms186307(v=sq...
--(2)テーブルにパーティション分割されたクラスタ化イン...
インデックスを削除し、非パーティション インデックスとして...
---CREATE INDEX (Transact-SQL)~
https://technet.microsoft.com/ja-jp/library/ms188783(v=sq...
とあるので、
上記(1)or(2)でのみ、削除可能なもよう。
*参考 [#t3bf5fd9]
**[[ファイル・グループ>SQL Server のファイル・グループ]] ...
**パーティション インデックス [#h30d881e]
-パーティション インデックスの専用ガイドライン~
http://msdn.microsoft.com/ja-jp/library/ms187526.aspx
-CREATE INDEX (Transact-SQL)~
http://msdn.microsoft.com/ja-jp/library/ms188783.aspx
**クエリ処理の機能強化 [#wd5596fc]
-パーティション テーブルとパーティション インデックスに対...
https://technet.microsoft.com/ja-jp/library/ms345599.aspx
**自習書シリーズ [#y2c7a50a]
-SQL Server 2012 自習書シリーズ No.19 データ パーティショ...
http://www.sqlquality.com/Self2012/Self2012_DP/Text/mokuj...
-自習書シリーズ | SQL Server 2008 R2~
https://www.microsoft.com/ja-jp/server-cloud/local/sqlser...
--データベース パーティション入門(製品版対応)
---Doc (4.10 MB)~
http://download.microsoft.com/download/D/1/D/D1D2FBEC-8D4...
---サンプル スクリプト (96.4 KB)~
http://download.microsoft.com/download/D/1/D/D1D2FBEC-8D4...
-自習書シリーズ - Microsoft SQL Server 2012~
https://www.microsoft.com/ja-jp/server-cloud/local/sqlser...
--データ パーティション入門
---Docx (15.2 MB)~
http://download.microsoft.com/download/3/C/5/3C5DD4B2-809...
---PDF (2.51 MB)~
http://download.microsoft.com/download/5/A/2/5A29D047-2D8...
---サンプル スクリプト (96.3 KB)~
http://download.microsoft.com/download/3/C/5/3C5DD4B2-809...
----
Tags: [[:データアクセス]], [[:SQL Server]]
終了行:
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicros...
-[[戻る>SQL Server]]
* 目次 [#v841dae8]
#contents
*概要 [#f24a83fb]
主にSQL Server パーティション分割の効果について説明する。
-構成
--「パーティション分割」は、テーブル上の特定の列を「パー...
行データを特定の「[[ファイル・グループ>#e68a346c]]」にマ...
--なお、「パーティション分割」後の、テーブル・インデック...
「パーティション テーブル」と「パーティション インデック...
---「パーティション テーブル」と「パーティション インデッ...
---標準的なテーブル・インデックスの設計とクエリに関連する...
---これにより、エンティティ全体のデータの整合性を維持しな...
グループ化されたデータ サブセットに対するアクセス性能の向...
--なお、SQL Serverでは、1つのテーブルに最大1000個の「パー...
-効果
--主に運用系性能(インデックスのデフラグ・再構築、データ...
--一部データ アクセス性能([[並列クエリ>SQL Server のファ...
--インスタンスが分割できるような場合は、インスタンス分割...
*パーティションの設計指針(分割指針) [#ce44fefb]
主に、日付などの論理的にグループ化された~
データ サブセットを管理するのに適切であるかどうかによって...
**「パーティション分割列」 [#i717ecca]
***範囲 [#kfdc5274]
「[[パーティション関数>#q05a8055]]」により指定される。
***データ型 [#tdaf1863]
以下のデータ型を除くインデックス キーとして使用できるデー...
-timestamp型
-ntext型
-text型
-image型
-xml型
-varchar(max)型
-nvarchar(max)型
-varbinary(max)型
-CLRユーザ定義データ型
-別名データ(エイリアス データ)型
**「パーティション関数」 [#q05a8055]
***定義 [#s01e5519]
CREATE PARTITION FUNCTION partition_function_name ( inpu...
AS RANGE RIGHT FOR VALUES ( [ boundary_value [ ,...n ]...
上記の「パーティション関数」(partition_function_name)で...
指定の型(input_parameter_type)の「パーティション分割列...
格納された値に基づき「パーティション分割」を行う。~
なお、RANGE にはLEFTより、RIGHTを指定することが推奨される。
***例 [#h34e9ecf]
CREATE PARTITION FUNCTION partition_function_name ( int...
AS RANGE RIGHT FOR VALUES ( 100, 200, 300 );
と指定した場合、この「パーティション関数」によって、
-パーティション 1 : 列の値 < 100
-パーティション 2 : 100 <= 列の値 < 200
-パーティション 3 : 200 <= 列の値 < 300
-パーティション 4 : 300 <= 列の値
の4つの「パーティション」に分割される。
**「パーティション」と「[[ファイル・グループ>#e68a346c]]...
双方の関係は以下のようになる。
-「パーティション」は「[[ファイル・グループ>#e68a346c]]」...
-1つの「パーティション」を、1つの「[[ファイル・グループ...
-いくつかの「パーティション」を、1つの「[[ファイル・グル...
-すべての「パーティション」を、1つの「[[ファイル・グルー...
*パーティションの作成と構成の確認 [#i5c8fafe]
**パーティションの作成手順 [#s0b7cb39]
***「パーティション構成」の定義する [#o35d89e1]
「パーティション関数」の「パーティション分割」で指定され...
「[[ファイル・グループ>#e68a346c]]」のマップを指定して、...
パーティション構成の定義:
CREATE PARTITION SCHEME partition_schema_name
AS PARTITION partition_function_name
TO ( { file_group_name | [ PRIMARY ] } [ ,...n ] );
上記の「パーティション構成」の定義では、
-「パーティション関数」で分割した「パーティション」を、
-リストに指定した「[[ファイル・グループ>#e68a346c]]」の順...
※ 「パーティション構成」で使用できる「パーティション関数...
※ 1つの「パーティション関数」は、複数の「パーティション...
***「パーティション テーブル」を作成する。 [#t4319a25]
「パーティション構成」と「パーティション分割列」を指定し...
パーティション テーブルの定義:
CREATE TABLE table_name(
<column_definition>[ ,...n ])
ON partition_schema_name (div_column_name);
***「パーティション インデックス」を作成する。 [#beeb36d0]
「パーティション構成」に「パーティション分割列」を指定し、~
「パーティション テーブル」に「固定」された、「パーティシ...
パーティション インデックスの定義:
CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX in...
ON table_name (column_name);
ON partition_schema_name (div_column_name);
**「パーティション構成」の確認方法 [#a9c90e01]
***「パーティション関数」の名前と境界の確認 [#d531908c]
SELECT f.name, r.value, *
FROM sys.partition_range_values r
INNER JOIN sys.partition_functions f
ON r.function_id = f.function_id
***「パーティション構成」、「[[ファイル・グループ>#e68a34...
SELECT
ps.name As [パーティション構成名],
ds.name As [ファイル グループ名],
dds.destination_id As [パーティション番号],
*
FROM
sys.destination_data_spaces dds
INNER JOIN sys.partition_schemes ps
ON dds.partition_scheme_id = ps.data_space_id
INNER JOIN sys.data_spaces ds
ON dds.data_space_id = ds.data_space_id
ORDER BY
partition_scheme_id
***データが格納された「パーティション番号」を確認 [#r307e...
-partition_function_name:「パーティション関数」
-expression:値(=パーティション分割列を指定する)
SELECT
*, $PARTITION.partition_function_name(expression) As [...
FROM
table_name
若しくは、
SELECT
$PARTITION.partition_function_name(expression) As [パー...
COUNT(*) As [行数]
FROM
table_name
GROUP BY
$PARTITION.partition_function_name(expression)
*性能の向上ポイント [#b9c469bd]
[[ファイル・グループ>#e68a346c]]の性能向上
-「[[簡易ストライピング>SQL Server のファイル・グループ#l...
-「[[並列クエリ>SQL Server のファイル・グループ#z5226928]]
に加え、以下の性能向上を図ることができる。
**検索性能の向上 [#kda881e3]
「パーティション」毎に
-スキップ スキャン操作の効果により、スキャンを局所化(検...
-(エスカレーション時)ロックを局所化(更新処理の同時実行...
-併置結合によるテーブル結合を実行(テーブル結合処理の高速...
「パーティション インデックス」を「パーティション テーブ...
***スキップ・スキャン、ロック局所化 [#b50cffcf]
-「パーティション分割列」を検索条件に追加した場合、
--スキップ スキャンの効果により、範囲スキャン検索の性能が...
--ロック局所化の効果により、更新処理の同時実行性が向上す...
-備考~
スキップ スキャン、ロック局所化は「適切に設計された」~
OLTPアプリケーションを大きく性能向上させるものではない。
--スキップ スキャン~
「パーティション インデックス」を「パーティション テーブ...
--ロック局所化
---データベース エンジンが、ロック エスカレーション が必...
行ロック・キー範囲ロックをページ ロックではなく、テーブル...
---同様に、ページ ロックは常にテーブル ロックにエスカレー...
---しかし、SQL Server 2008から、「パーティション テーブル...
テーブル レベルではなく、ヒープまたは B ツリー(HoBT)レ...
留めることで、ロック待ちを少なくし、同時実効性を向上でき...
#ref(SkipScan.png,left,nowrap,スキップ・スキャン)
***併置結合によるテーブル結合 [#xc94981e]
-「併置結合」は、同じ「パーティション構成」の2つのテーブ...
「パーティション分割列」をキーにして結合する際に発生する~
(結合に使用する「パーティション分割列」に「パーティショ...
-この場合にオプティマイザが生成する「併置結合」の実行プラ...
「パーティション」毎、「並列処理」で結合されるため、メモ...
***検索性能が劣化するケース [#w082fffa]
パーティション分割によって、クエリ性能が劣化するケースも...
-[[パーティショニング実施時にパーティションキーの有無によ...
>パーティショニングによって読み取り数(アクセスされたパー...
ただし、パーティションキーを含めた検索では、読み取り数は...
-パーティション テーブルとパーティション インデックスに対...
http://msdn.microsoft.com/ja-jp/library/ms345599.aspx
>パーティション テーブルとパーティション インデックスに対...
Transact-SQL の SET SHOWPLAN_XML または SET STATISTICS XM...
[[SQL Server Management Studio>SSMS]] のグラフィカル実行...
**運用性能の向上 [#w0f4710a]
メンテナンス
-テーブル データのアーカイブ
-インデックスの断片化の局所化、再構築・最適化
が、「パーティション」毎に可能となり、~
-保守・運用中のデータ管理タスクの性能が向上したり、より簡...
-これらの機能は、24時間止められないシステムなどで特に有効...
***データのアーカイブ(スライディング ウインドウ) [#v9b4...
適切に「パーティション分割」を行えば、下記のような、古い...
アーカイブする「スライディング ウインドウ」と呼ばれる操作...
-スイッチ機能を使用(例:稼働テーブルからアーカイブ・テー...
-スイッチ機能は、内部的なポインタ変更のみで完了するので、...
「スライディング ウインドウ」操作は、次の手順で行われる。
-「データベース スキーマ」に
--稼動テーブル・アーカイブ テーブルの~
・「パーティション テーブル」~
・「パーティション インデックス」~
を同じ「パーティション構成」で作成。
--次に(アーカイブのために)~
新規作成する「パーティション」で使用する、~
新規「[[ファイル・グループ>#e68a346c]]」を追加。
-稼動テーブル・アーカイブ テーブルに
--新規「パーティション」で使用する「[[ファイル・グループ>...
--「パーティション」境界を追加し、新規「パーティション」...
-稼動テーブルからアーカイブテーブルに、最も古い「パーティ...
--稼動テーブルへ、スイッチした「パーティション」が対象と...
--「パーティション」が増えてきたら、「パーティション」境...
以下に、「スライディング ウインドウ」操作の注意点を纏める。
-スイッチ操作は、同じ「[[ファイル・グループ>#e68a346c]]」...
--なお、スイッチ機能は、同じ「[[ファイル・グループ>#e68a3...
稼動テーブルと、アーカイブ テーブルの「パーティション」と...
まったく同じにするか、双方とも1つの「[[ファイル・グルー...
--ただし、後者の1つの「[[ファイル・グループ>#e68a346c]]...
基本的に、稼動テーブルとアーカイブ テーブルの「パーティシ...
"まったく"同じにし、複数の「[[ファイル・グループ>#e68a346...
-スイッチ元と スイッチ先の「パーティション テーブル」は、...
-スイッチ元と スイッチ先の「パーティション インデックス」...
※ 詳細は、[[自習書>#y2c7a50a]]を参照。
***インデックスの断片化の局所化、デフラグや再構築の局所化...
-[[並列クエリ>SQL Server のファイル・グループ#z5226928]]...
-この場合、「パーティション インデックス」を「パーティシ...
-「パーティション番号」を指定した、デフラグや再構築
--ALTER INDEXステートメントのREBUILD、REORGANIZEに「パー...
--REBUILDはDBCC DBREINDEXと、REORGANIZEはDBCC INDEXDEFRAG...
--しかし、DBCC DBREINDEXについては「パーティション番号」...
-参考
--インデックスの再編成と再構築~
http://msdn.microsoft.com/ja-jp/library/ms189858.aspx
--並列インデックス操作~
http://msdn.microsoft.com/ja-jp/library/ms191292.aspx
--並列インデックス操作の構成~
https://msdn.microsoft.com/ja-jp/library/ms189329.aspx
*「パーティション インデックス」 [#bfae5bcf]
-パーティション分割したテーブルは、「パーティション テー...
-パーティション分割は、テーブルだけでなく、インデックスに...
-パーティション分割したインデックスは、「パーティション ...
-「パーティション インデックス」は、必ずしも「パーティシ...
-「パーティション テーブル」と同一の「パーティション構成...
**「パーティション インデックス」を「パーティション テー...
-「パーティション テーブル」と同一の「パーティション構成...
「パーティション インデックス」を「パーティション テーブ...
-SQL Server Management Studioは、既定で、~
「パーティション インデックス」を「パーティション テーブ...
***「パーティション インデックス」の「固定」が必要なケー...
-一意性制約~
「パーティション分割列」を含んでいるユニーク インデックス...
--「パーティション分割列」を含まない「パーティション イン...
複数の「パーティション」間に跨る一意性を保証できないため、~
「パーティション インデックス」を「パーティション テーブ...
--「パーティション分割列」をユニーク インデックス(一意性...
代用としてDMLトリガを使用することでユニーク インデックス...
-スライディング ウインドウ~
「パーティション インデックス」を「パーティション テーブ...
することにより、「[[データのアーカイブ(スライディング ウ...
」が可能になる。
-併置結合~
「パーティション インデックス」を「パーティション テーブ...
することにより、「[[併置結合によるテーブル結合>#xc94981e]...
***「パーティション インデックス」の「固定」が不要なケー...
インデックスや、「パーティション インデックス」は、~
ベースの「パーティション テーブル」の「パーティション構成...
**考慮事項 [#va583dcf]
「パーティション インデックス」の作成についての考慮事項に...
***一意でないクラスタ化インデックス [#i0b8e7a3]
-ユニーク インデックス(一意性制約)でない~
「クラスタ化インデックス」を「パーティション分割」する場...
クラスタ化キーに「[[パーティション分割列>#i717ecca]]」を...
-SQL Server(のGUI)は、~
既定でクラスタ化キーの一覧に「パーティション分割列」を追...
***一意でない非クラスタ化インデックス [#a15bcc46]
-ユニーク インデックス(一意性制約)でない~
「非クラスタ化インデックス」を「パーティション分割」する...
キーに「[[パーティション分割列>#i717ecca]]」を指定しない...
-SQL Server(のGUI)は、~
既定で「非クラスタ化インデックス」の非キー列を、~
[[「付加列インデックス」の付加列>SQL Server のインデック...
***メモリの制限 [#y7ca83d1]
「パーティション テーブル」上にインデックスを作成する際、
-並べ替えテーブルは、始めに「パーティション」毎に、メモリ...
-次に、「パーティション」毎に、「[[ファイル・グループ>#e6...
(SORT_IN_TEMPDBオプションが指定されている場合は tempdbの...
-「パーティション テーブル」に「固定」された「パーティシ...
--並べ替えテーブルは、メモリ上に一つずつ作成されるのでメ...
-しかし、「パーティション テーブル」に「固定」されない各...
--並べ替えテーブルは複数同時に作成されるのでメモリの消費...
---例えば、100個の「パーティション」から構成される~
「パーティション テーブル」に「固定」されない各種インデッ...
4,000ページを同時に並べ替えることができる32MBのメモリを消...
--また、SQL Serverがマルチプロセッサ(マルチコア)の「並...
「パーティション テーブル」に「固定」されない各種インデッ...
メモリの要件がさらに高くなる場合がある。
---例えば、同時に4つのスレッドで、100個のパーティション...
「パーティション テーブル」に「固定」されない各種インデッ...
4,000ページ × 4スレッド = 16,000ページ分の、128MBのメモ...
---メモリを確保できれば、インデックス作成は成功するが、~
場合によってバッファ キャッシュの枯渇や、ページングの発生...
インデックス作成の性能が低下する場合がある。
---並列インデックス操作の構成~
http://msdn.microsoft.com/ja-jp/library/ms189329.aspx
>※ MAXDOPインデックス オプションを使用して、~
「並列処理」のスレッドを減らすことができる。
*パーティションの削除 [#z059633a]
パーティショニング後、PARTITION FUNCTIONの削除はできない...
-DROP PARTITION FUNCTION (Transact-SQL)~
https://msdn.microsoft.com/ja-jp/library/ms187759.aspx
>パーティション関数を削除できるのは、対象となるパーティシ...
パーティション関数が、いずれかのパーティション構成で使用...
調べてみると、
-パーティション テーブルとパーティション インデックスの変...
https://technet.microsoft.com/ja-jp/library/ms175864(v=sq...
パーティション テーブルから非パーティション テーブルへの...
--(1)・・・テーブルを構成するパーティションが 1 つだけ...
パーティション テーブルのパーティション関数を変更します。
---ALTER PARTITION FUNCTION (Transact-SQL)~
https://technet.microsoft.com/ja-jp/library/ms186307(v=sq...
--(2)テーブルにパーティション分割されたクラスタ化イン...
インデックスを削除し、非パーティション インデックスとして...
---CREATE INDEX (Transact-SQL)~
https://technet.microsoft.com/ja-jp/library/ms188783(v=sq...
とあるので、
上記(1)or(2)でのみ、削除可能なもよう。
*参考 [#t3bf5fd9]
**[[ファイル・グループ>SQL Server のファイル・グループ]] ...
**パーティション インデックス [#h30d881e]
-パーティション インデックスの専用ガイドライン~
http://msdn.microsoft.com/ja-jp/library/ms187526.aspx
-CREATE INDEX (Transact-SQL)~
http://msdn.microsoft.com/ja-jp/library/ms188783.aspx
**クエリ処理の機能強化 [#wd5596fc]
-パーティション テーブルとパーティション インデックスに対...
https://technet.microsoft.com/ja-jp/library/ms345599.aspx
**自習書シリーズ [#y2c7a50a]
-SQL Server 2012 自習書シリーズ No.19 データ パーティショ...
http://www.sqlquality.com/Self2012/Self2012_DP/Text/mokuj...
-自習書シリーズ | SQL Server 2008 R2~
https://www.microsoft.com/ja-jp/server-cloud/local/sqlser...
--データベース パーティション入門(製品版対応)
---Doc (4.10 MB)~
http://download.microsoft.com/download/D/1/D/D1D2FBEC-8D4...
---サンプル スクリプト (96.4 KB)~
http://download.microsoft.com/download/D/1/D/D1D2FBEC-8D4...
-自習書シリーズ - Microsoft SQL Server 2012~
https://www.microsoft.com/ja-jp/server-cloud/local/sqlser...
--データ パーティション入門
---Docx (15.2 MB)~
http://download.microsoft.com/download/3/C/5/3C5DD4B2-809...
---PDF (2.51 MB)~
http://download.microsoft.com/download/5/A/2/5A29D047-2D8...
---サンプル スクリプト (96.3 KB)~
http://download.microsoft.com/download/3/C/5/3C5DD4B2-809...
----
Tags: [[:データアクセス]], [[:SQL Server]]
ページ名: