SlideShare a Scribd company logo
1 of 24
Download to read offline
SQL Server パーティション 概要

             小澤 真之 (@Masayuki_Ozawa)
      http://engineermemo.wordpress.com
本日の Agenda


    パーティションの基本構成


     パーティションのメリット


    デモ

2
パーティションの基本構成




3
はじめに
       パーティションは Enterprise Edition / Datacenter
        Edition で使用できる機能です
           Standard Edition では使用できません
           Enterprise Edition 以上の機能なので
            「データ圧縮」
            「オンラインインデックス操作」
            「Column Store Index」
            と併用することができます。
           Enterprise Edition 特有の動作
               並列インデックス操作
               先行読み取り時のページ数の増加
               拡張スキャン (メリーゴーラウンドスキャン)
       パーティションのメンテナンス作業が必要になるため
        データベースエンジニアがいない企業様での運用お勧め
        しません


    4
パーティションの一般的な種類

      レンジパーティション

      • 列の値の範囲に基づきデータを格納する領域を分散させる
SQL Server で使用できる
 パーティションの方式: 2010/4/1 ~ 2011/3/31 → 格納領域 A
         • 登録日時

      • 登録日時 : 2011/4/1 ~ 2012/3/31 → 格納領域 B


      ハッシュパーティション

      • データのハッシュ値に基づきデータを格納する領域を分散させる

      • データのハッシュ値 : A → 格納領域 A    SQL Server でも
                                レンジパーティションを
      • データのハッシュ値 : B → 格納領域 B 応用して実装することは可能



  5
通常のテーブルの基本構成
                               データベース
テーブル

                               ファイルグループ
                                (PRIMARY)

     2010 年度の                  データファイル 1
       データ                        (mdf)

                               データファイル 2
     2011 年度の                     (ndf)
       データ
                テーブルは一つのファイル   データファイル 3
                 グループに所属し複数の      (ndf)
     2012 年度の    ファイルグループには
                   所属できない
       データ


 6
パーティションテーブルの基本構成
                                データベース
テーブル

                テーブルが複数のファイル    ファイルグループ 1
     2010 年度の   グループに関連つき、デー    データファイル 2
       データ      タの範囲により厳密にデー
                                   (ndf)
                 タがファイルグループに
                    結びつく。
                                ファイルグループ 2
     2011 年度の                   データファイル 3
       データ                         (ndf)
                単一のDB / テーブルで
                 データの格納領域を      ファイルグループ 3
                 厳密に水平分割する
     2012 年度の                   データファイル 4
       データ                         (ndf)


 7
パーティションの構成
    パーティション関数

    • パーティションの境界値を指定しデータの分割方法を定義

    • 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 ALL



8
パーティション構成概要                                            パーティション関数

          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
パーティションテーブルとインデックス
     パーティション テーブル

     • パーティション構成を指定して作成したテーブル

     • 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).aspx



10
パーティションの操作
     スイッチ

     • 特定のパーティションを他のテーブルに切り離すことで瞬時にデータを削除する

     • スイッチは空のパーティションに対して実行する必要があるため、スイッチ先にデー
     タが入っている場合はスイッチすることができない

     • 同一のファイルグループ内でのみスイッチができる

     • パーティションの切り替えを使用した効率的なデータの転送
      http://msdn.microsoft.com/ja-jp/library/ms191160(SQL.105).aspx


     マージ

     • 境界値を削除し、パーティション同士を結合する


     パーティションの追加

     • パーティション構成 / パーティション変数を変更し新規のデータ格納領域を追加する



11
パーティションのスイッチ
スイッチ元テーブル
      #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
パーティションのスイッチ
スイッチ元テーブル (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
ベーステーブルにインデックスを固定化
パーティションテーブル

         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
パーティションのマージ
           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




15
パーティションのマージ
       境界値の削除              2010/4/1          2011/4/1
                                        #2              #3
             #1

                                     2010/4/1        2011/4/1
               ~
                                        ~               ~
            2010/3/31
                                    2011/3/31
                  ファイルグループの
                    割り当て解除




      FG1                              FG3              FG4


ALTER PARTITION FUNCTION Table1_PF() MERGE RANGE('2009/4/1')
ALTER TABLE Table1 ADD CONSTRAINT CK_Date CHECK(Col1 >= '2010/4/1')


 16
パーティションの追加
        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
パーティションの追加
                                                                       境界値の追加
        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
内部動作
     スイッチ

     •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
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
パーティションのメリット

     大量データの瞬時アーカイブ

     •パーティションをスイッチすることで大量のデータを瞬時にベーステーブルから切り離すことができる

     •不要データがベーステーブルからなくなることで検索時のレスポンス向上 / インデックスメンテナンス時間の
     短縮


     パーティション単位のメンテナンス

     •パーティション単位でインデックスの再構築 (REBUILD) / 再構成 (REORGANIZE)

     •パーティション単位でデータ圧縮が可能

     •パーティション単位でバックアップ / リストア        (パーティション = ファイルグループ)

     •1 ファイルグループでパーティションを作成している場合はパーティション単位でバックアップは不可


     同時実行性の向上

     •ロックエスカレーション発生時にテーブルロックではなくパーティションロックにすることができる

     •ACCESS_METHODS_HOBT_VIRTUAL_ROOT (内部 B-Tree のルート ページの抽象化のための同期) Latch
     Wait の減少




22
パーティション単位の操作
     インデックスメンテナンス

     • 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

More Related Content

What's hot

What's hot (20)

サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
 
自律型データベース Oracle Autonomous Database 最新情報
自律型データベース Oracle Autonomous Database 最新情報自律型データベース Oracle Autonomous Database 最新情報
自律型データベース Oracle Autonomous Database 最新情報
 
Oracle Analytics Cloud のご紹介【2021年3月版】
Oracle Analytics Cloud のご紹介【2021年3月版】Oracle Analytics Cloud のご紹介【2021年3月版】
Oracle Analytics Cloud のご紹介【2021年3月版】
 
Oracle GoldenGate導入Tips
Oracle GoldenGate導入TipsOracle GoldenGate導入Tips
Oracle GoldenGate導入Tips
 
Oracle Cloud Infrastructure セキュリティの取り組み [2021年2月版]
Oracle Cloud Infrastructure セキュリティの取り組み [2021年2月版]Oracle Cloud Infrastructure セキュリティの取り組み [2021年2月版]
Oracle Cloud Infrastructure セキュリティの取り組み [2021年2月版]
 
S13 Oracle Database を Microsoft Azure 上で運用する為に~基本事項とベストプラクティス
S13 Oracle Database を Microsoft Azure 上で運用する為に~基本事項とベストプラクティスS13 Oracle Database を Microsoft Azure 上で運用する為に~基本事項とベストプラクティス
S13 Oracle Database を Microsoft Azure 上で運用する為に~基本事項とベストプラクティス
 
Oracle Database (CDB) on Docker を動かしてみる
Oracle Database (CDB) on Docker を動かしてみるOracle Database (CDB) on Docker を動かしてみる
Oracle Database (CDB) on Docker を動かしてみる
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
Helidon 概要
Helidon 概要Helidon 概要
Helidon 概要
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
 
Awsでのsql高可用構成 Always On
Awsでのsql高可用構成 Always OnAwsでのsql高可用構成 Always On
Awsでのsql高可用構成 Always On
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウト
 
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
 
オンプレミスからクラウドへ:Oracle Databaseの移行ベストプラクティスを解説 (Oracle Cloudウェビナーシリーズ: 2021年2月18日)
オンプレミスからクラウドへ:Oracle Databaseの移行ベストプラクティスを解説 (Oracle Cloudウェビナーシリーズ: 2021年2月18日)オンプレミスからクラウドへ:Oracle Databaseの移行ベストプラクティスを解説 (Oracle Cloudウェビナーシリーズ: 2021年2月18日)
オンプレミスからクラウドへ:Oracle Databaseの移行ベストプラクティスを解説 (Oracle Cloudウェビナーシリーズ: 2021年2月18日)
 
Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について
Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法についてAzure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について
Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について
 
OCIコンテナサービス関連の技術詳細
OCIコンテナサービス関連の技術詳細OCIコンテナサービス関連の技術詳細
OCIコンテナサービス関連の技術詳細
 
[Cloud OnAir] オンプレミスにあるデータを GCP で分析する前に知っておきたいアーキテクチャ 2019年5月30日 放送
[Cloud OnAir] オンプレミスにあるデータを GCP で分析する前に知っておきたいアーキテクチャ 2019年5月30日 放送[Cloud OnAir] オンプレミスにあるデータを GCP で分析する前に知っておきたいアーキテクチャ 2019年5月30日 放送
[Cloud OnAir] オンプレミスにあるデータを GCP で分析する前に知っておきたいアーキテクチャ 2019年5月30日 放送
 
事例で学ぶApache Cassandra
事例で学ぶApache Cassandra事例で学ぶApache Cassandra
事例で学ぶApache Cassandra
 
OpenJDKは使い物になるか?OpenJDKの実際と今後 (NTTデータ オープンソースDAY 2015 Autumn 講演資料)
OpenJDKは使い物になるか?OpenJDKの実際と今後 (NTTデータ オープンソースDAY 2015 Autumn 講演資料)OpenJDKは使い物になるか?OpenJDKの実際と今後 (NTTデータ オープンソースDAY 2015 Autumn 講演資料)
OpenJDKは使い物になるか?OpenJDKの実際と今後 (NTTデータ オープンソースDAY 2015 Autumn 講演資料)
 

More from Masayuki Ozawa

db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!
db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!
db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!
Masayuki Ozawa
 
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
Masayuki Ozawa
 
DBA から開発者への情報提供
DBA から開発者への情報提供DBA から開発者への情報提供
DBA から開発者への情報提供
Masayuki Ozawa
 
ここからはじめる SQL Server の状態取得
ここからはじめる SQL Server の状態取得ここからはじめる SQL Server の状態取得
ここからはじめる SQL Server の状態取得
Masayuki Ozawa
 
SQL Server パフォーマンスカウンター
SQL Server パフォーマンスカウンターSQL Server パフォーマンスカウンター
SQL Server パフォーマンスカウンター
Masayuki Ozawa
 
SQL Server 簡易診断サービス ご紹介資料
SQL Server 簡易診断サービス ご紹介資料SQL Server 簡易診断サービス ご紹介資料
SQL Server 簡易診断サービス ご紹介資料
Masayuki Ozawa
 
SQL Server 現状診断サービス ご紹介資料
SQL Server 現状診断サービス ご紹介資料SQL Server 現状診断サービス ご紹介資料
SQL Server 現状診断サービス ご紹介資料
Masayuki Ozawa
 
Sql server 構築 運用 tips
Sql server 構築 運用 tipsSql server 構築 運用 tips
Sql server 構築 運用 tips
Masayuki Ozawa
 

More from Masayuki Ozawa (20)

db tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解する
db tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解するdb tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解する
db tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解する
 
db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!
db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!
db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!
 
Sql database managed instance overview and internals
Sql database managed instance overview and internalsSql database managed instance overview and internals
Sql database managed instance overview and internals
 
Power apps formula cheat sheet
Power apps formula cheat sheetPower apps formula cheat sheet
Power apps formula cheat sheet
 
K8s install (single cluster)
K8s install (single cluster)K8s install (single cluster)
K8s install (single cluster)
 
de:code 2018 DA06 SQL Server 管理者におくる SQL Server on Linux Tips
de:code 2018 DA06 SQL Server 管理者におくる SQL Server on Linux Tipsde:code 2018 DA06 SQL Server 管理者におくる SQL Server on Linux Tips
de:code 2018 DA06 SQL Server 管理者におくる SQL Server on Linux Tips
 
Managed Instance チートシート
Managed Instance チートシートManaged Instance チートシート
Managed Instance チートシート
 
Pacemaker 操作方法メモ
Pacemaker 操作方法メモPacemaker 操作方法メモ
Pacemaker 操作方法メモ
 
Windows エンジニア向け sql server on linux のためのスキルアップデート
Windows エンジニア向け sql server on linux のためのスキルアップデートWindows エンジニア向け sql server on linux のためのスキルアップデート
Windows エンジニア向け sql server on linux のためのスキルアップデート
 
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
 
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
 
Sql server 2016 always on 可用性グループ new features
Sql server 2016 always on 可用性グループ new featuresSql server 2016 always on 可用性グループ new features
Sql server 2016 always on 可用性グループ new features
 
DBA から開発者への情報提供
DBA から開発者への情報提供DBA から開発者への情報提供
DBA から開発者への情報提供
 
Sql server 2016 ctp 3.0 新機能
Sql server 2016 ctp 3.0 新機能Sql server 2016 ctp 3.0 新機能
Sql server 2016 ctp 3.0 新機能
 
Sql server 運用 101
Sql server 運用 101Sql server 運用 101
Sql server 運用 101
 
ここからはじめる 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 構築 運用 tips
Sql server 構築 運用 tipsSql server 構築 運用 tips
Sql server 構築 運用 tips
 

Sql server パーティション 概要

  • 1. SQL Server パーティション 概要 小澤 真之 (@Masayuki_Ozawa) http://engineermemo.wordpress.com
  • 2. 本日の Agenda パーティションの基本構成 パーティションのメリット デモ 2
  • 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 ALL 8
  • 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).aspx 10
  • 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 FG4 15
  • 16. パーティションのマージ 境界値の削除 2010/4/1 2011/4/1 #2 #3 #1 2010/4/1 2011/4/1 ~ ~ ~ 2010/3/31 2011/3/31 ファイルグループの 割り当て解除 FG1 FG3 FG4 ALTER 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
  • 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