Your SlideShare is downloading. ×
0
Sql server パーティション 概要
Sql server パーティション 概要
Sql server パーティション 概要
Sql server パーティション 概要
Sql server パーティション 概要
Sql server パーティション 概要
Sql server パーティション 概要
Sql server パーティション 概要
Sql server パーティション 概要
Sql server パーティション 概要
Sql server パーティション 概要
Sql server パーティション 概要
Sql server パーティション 概要
Sql server パーティション 概要
Sql server パーティション 概要
Sql server パーティション 概要
Sql server パーティション 概要
Sql server パーティション 概要
Sql server パーティション 概要
Sql server パーティション 概要
Sql server パーティション 概要
Sql server パーティション 概要
Sql server パーティション 概要
Sql server パーティション 概要
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Sql server パーティション 概要

6,572

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,572
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
41
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. SQL Server パーティション 概要 小澤 真之 (@Masayuki_Ozawa) http://engineermemo.wordpress.com
  • 2. 本日の Agenda パーティションの基本構成 パーティションのメリット デモ2
  • 3. パーティションの基本構成3
  • 4. はじめに パーティションは Enterprise Edition / Datacenter Edition で使用できる機能です  Standard Edition では使用できません  Enterprise Edition 以上の機能なので 「データ圧縮」 「オンラインインデックス操作」 「Column Store Index」 と併用することができます。  Enterprise Edition 特有の動作  並列インデックス操作  先行読み取り時のページ数の増加  拡張スキャン (メリーゴーラウンドスキャン) パーティションのメンテナンス作業が必要になるため データベースエンジニアがいない企業様での運用お勧め しません 4
  • 5. パーティションの一般的な種類 レンジパーティション • 列の値の範囲に基づきデータを格納する領域を分散させるSQL Server で使用できる パーティションの方式: 2010/4/1 ~ 2011/3/31 → 格納領域 A • 登録日時 • 登録日時 : 2011/4/1 ~ 2012/3/31 → 格納領域 B ハッシュパーティション • データのハッシュ値に基づきデータを格納する領域を分散させる • データのハッシュ値 : A → 格納領域 A SQL Server でも レンジパーティションを • データのハッシュ値 : B → 格納領域 B 応用して実装することは可能 5
  • 6. 通常のテーブルの基本構成 データベーステーブル ファイルグループ (PRIMARY) 2010 年度の データファイル 1 データ (mdf) データファイル 2 2011 年度の (ndf) データ テーブルは一つのファイル データファイル 3 グループに所属し複数の (ndf) 2012 年度の ファイルグループには 所属できない データ 6
  • 7. パーティションテーブルの基本構成 データベーステーブル テーブルが複数のファイル ファイルグループ 1 2010 年度の グループに関連つき、デー データファイル 2 データ タの範囲により厳密にデー (ndf) タがファイルグループに 結びつく。 ファイルグループ 2 2011 年度の データファイル 3 データ (ndf) 単一のDB / テーブルで データの格納領域を ファイルグループ 3 厳密に水平分割する 2012 年度の データファイル 4 データ (ndf) 7
  • 8. パーティションの構成 パーティション関数 • パーティションの境界値を指定しデータの分割方法を定義 • CREATE PARTITION FUNCTION Table1_PF (datetime) AS RANGE RIGHT FOR VALUES (‘2009/4/1’, ‘2010/4/1’, ‘2011/4/1’) • 境界値を左右どちらのパーティションに含めるかを RIGHT / LEFT で指定するが一般 的には RIGHT を使用 パーティション構成 • データを格納するファイルグループを定義 • CREATE PARTITION SCHEME Table1_PS AS PARTITION Table1_PF TO (FG1, FG2, FG3, FG4) • 1 つのファイルグループでパーティションをすることも可能 • CREATE PARTITION SCHEME Table1_PS AS PARTITION Table1_PF ALL8
  • 9. パーティション構成概要 パーティション関数 2009/4/1 2010/4/1 2011/4/1 2009/4/1 2010/4/1 2011/4/1 ~ ~ ~ ~2009/3/31 2010/3/31 2011/3/31 FG1 FG2 FG3 FG4 パーティション構成9
  • 10. パーティションテーブルとインデックス パーティション テーブル • パーティション構成を指定して作成したテーブル • CREATE TABLE Table_1 (~) ON Table1_PS(Col1) パーティションテーブルの指定はヒープ構造となる • クラスター化インデックスのパーティションインデックスを設定することで実データのパーティ ショニングを行うことも可能 • パーティション テーブルとパーティションインデックスの変更 > 非パーティション テーブルからパーティション テーブルへの変換 http://msdn.microsoft.com/ja-jp/library/ms175864(SQL.105).aspx パーティション インデックス • パーティション構成を指定して作成したインデックス • CREATE INDEX NCI_Table1 ON Table_1 (~) ON Table1_PS(Col1) • CREATE CLUSTERD INDEX NCI_Table1 ON Table_1 (~) ON Table1_PS(Col1) • パーティション インデックスの専用ガイドライン http://msdn.microsoft.com/ja-jp/library/ms187526(SQL.105).aspx10
  • 11. パーティションの操作 スイッチ • 特定のパーティションを他のテーブルに切り離すことで瞬時にデータを削除する • スイッチは空のパーティションに対して実行する必要があるため、スイッチ先にデー タが入っている場合はスイッチすることができない • 同一のファイルグループ内でのみスイッチができる • パーティションの切り替えを使用した効率的なデータの転送 http://msdn.microsoft.com/ja-jp/library/ms191160(SQL.105).aspx マージ • 境界値を削除し、パーティション同士を結合する パーティションの追加 • パーティション構成 / パーティション変数を変更し新規のデータ格納領域を追加する11
  • 12. パーティションのスイッチスイッチ元テーブル #1 #2 #3 #4 FG1 FG2 FG3 FG4 ~ 2009/4/1 2010/4/1 2012/4/1 2009/3/31 ~ ~ ~ 2010/3/31 2011/3/31 2012/3/31スイッチ先テーブル 12
  • 13. パーティションのスイッチスイッチ元テーブル (BaseTable) #1 #2 #3 #4 FG1 FG2 FG3 FG4 ~ 2010/4/1 2012/4/1 2009/3/31 ~ ~ 2011/3/31 2012/3/31 2009/4/1 ~ 2010/3/31スイッチ先テーブル (ArchiveTable) 同一ファイルグループ内で ポインタを付け替えデータを移動 ALTER TABLE BaseTable SWITCH PARTITION 2 TO ArchiveTable PARTITION 2 13
  • 14. ベーステーブルにインデックスを固定化パーティションテーブル FG1 FG2 FG3 FG4 ~ 2009/4/1 2010/4/1 2012/4/1 2009/3/31 ~ ~ ~ 2010/3/31 2011/3/31 2012/3/31 2009/4/1 2010/4/1 2012/4/1 ~ ~ ~ ~ 2009/3/31 2010/3/31 2011/3/31 2012/3/31パーティションインデックス テーブルとインデックスを同一のパーティションに配置することでスイッチ時にインデッ クスの構成を保ったまま切り離すことができる パーティション インデックスの専用ガイドライン  http://msdn.microsoft.com/ja-jp/library/ms187526(SQL.105).aspx 14
  • 15. パーティションのマージ 2009/4/1 2010/4/1 2011/4/1 #1 #2 #3 #4 2009/4/1 2010/4/1 2011/4/1 ~ ~ ~ ~2009/3/31 2010/3/31 2011/3/31 FG1 FG2 FG3 FG415
  • 16. パーティションのマージ 境界値の削除 2010/4/1 2011/4/1 #2 #3 #1 2010/4/1 2011/4/1 ~ ~ ~ 2010/3/31 2011/3/31 ファイルグループの 割り当て解除 FG1 FG3 FG4ALTER PARTITION FUNCTION Table1_PF() MERGE RANGE(2009/4/1)ALTER TABLE Table1 ADD CONSTRAINT CK_Date CHECK(Col1 >= 2010/4/1) 16
  • 17. パーティションの追加 2009/4/1 2010/4/1 2011/4/1 #1 #2 #3 #4 2009/4/1 2010/4/1 2011/4/1 ~ ~ ~ ~2009/3/31 2010/3/31 2011/3/31 FG1 FG2 FG3 FG4 17
  • 18. パーティションの追加 境界値の追加 2009/4/1 2010/4/1 2011/4/1 2012/4/1 #1 #2 #3 #4 #5 2009/4/1 2010/4/1 2011/4/1 ~ 2012/4/1 ~ ~ ~2009/3/31 ~ ファイルグループ 2010/3/31 2011/3/31 2012/3/31 の追加 FG1 FG2 FG3 FG4 FG5 ALTER PARTITION SCHEME Table1_PS NEXT USED FG5 ALTER PARTITION FUNCTION Table1_PF() SPLIT RANGE (2012/4/1) 18
  • 19. 内部動作 スイッチ •sys.sysrowsets / sys.sysschobjs / sysrowsetrefs / sysidxstats / sys.sysallocunits / sys.sysrscols の変更 •スイッチ先に非クラスター化インデックスが存在しない場合は、非クラスター化インデックスの割り当て解除 ( PFS / GAM / IAM の解放) マージ •sys.sysclsobjs / sys.sysobjvalues / sys.syssingleobjrefs / sys.sysrscols / sys.sysallocunits / sys.sysrowsetrefs の変更 •マージ対象のパーティションが空でない場合、マージ先のパーティションにデータを移動 (INSERT) / 元のデータの割り 当て解除 (GAM / PFS / IAM の解放) パーティションの追加 •パーティション構成の変更 •sys.syssingleobjrefs の変更 •パーティション関数の変更 •sys.sysclsobjs / sys.sysobjvalues / sys.syssingleobjrefs / sys.sysrowsets / sys.sysallocunits / sys.sysrscols / sys.sysschobjs / sys.sysrowsetrefs の変更 •次のパーティションに含まれるデータが格納されている場合、スプリット先のパーティションにデータを移動 (INSERT) / 元のデータを削除 (DELETE)19
  • 20. SQL Server 2012 のパーティションの特徴 15,000 のパーティションに分割することが可能  SQL Server 2008 SP2 / SQL Server 2008 R2 SP1 も同等  これ以外のバージョンは 1,000 まで パーティション内の操作が複数スレッドで動作  SQL Server 2005 ではパーティション内の操作は単一スレッドで動作していた  パーティション テーブルとパーティション インデックスに対するクエリ処理の機能強化 http://msdn.microsoft.com/ja-jp/library/ms345599(SQL.105).aspx 5 パーティション操作に 5 スレッド使用 5 パーティション操作に 10 スレッド使用 SQL Server 2005 SQL Server 2012 20
  • 21. パーティションのメリット21
  • 22. パーティションのメリット 大量データの瞬時アーカイブ •パーティションをスイッチすることで大量のデータを瞬時にベーステーブルから切り離すことができる •不要データがベーステーブルからなくなることで検索時のレスポンス向上 / インデックスメンテナンス時間の 短縮 パーティション単位のメンテナンス •パーティション単位でインデックスの再構築 (REBUILD) / 再構成 (REORGANIZE) •パーティション単位でデータ圧縮が可能 •パーティション単位でバックアップ / リストア (パーティション = ファイルグループ) •1 ファイルグループでパーティションを作成している場合はパーティション単位でバックアップは不可 同時実行性の向上 •ロックエスカレーション発生時にテーブルロックではなくパーティションロックにすることができる •ACCESS_METHODS_HOBT_VIRTUAL_ROOT (内部 B-Tree のルート ページの抽象化のための同期) Latch Wait の減少22
  • 23. パーティション単位の操作 インデックスメンテナンス • ALTER INDEX CI_Table1 ON Table1 REBUILD PARTITION=ALL • ALTER INDEX CI_Table1 ON Table1 REBUILD PARTITION=1 データ圧縮 • ALTER INDEX CI_Table1 ON Table1 REBUILD PARTITION= ALL WITH (DATA_COMPRESSION = PAGE) • ALTER INDEX CI_Table1 ON Table1 REBUILD PARTITION=1 WITH (DATA_COMPRESSION = PAGE) ロックエスカレーション • ALTER TABLE Table1 SET (LOCK_ESCALATION = TABLE) • ALTER TABLE Table1 SET (LOCK_ESCALATION = AUTO)23
  • 24. デモ24

×