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

Apache Kuduは何がそんなに「速い」DBなのか? #dbts2017
Apache Kuduは何がそんなに「速い」DBなのか? #dbts2017Apache Kuduは何がそんなに「速い」DBなのか? #dbts2017
Apache Kuduは何がそんなに「速い」DBなのか? #dbts2017Cloudera Japan
 
データ基盤の従来~最新の考え方とSynapse Analyticsでの実現
データ基盤の従来~最新の考え方とSynapse Analyticsでの実現データ基盤の従来~最新の考え方とSynapse Analyticsでの実現
データ基盤の従来~最新の考え方とSynapse Analyticsでの実現Ryoma Nagata
 
第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要
第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要 第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要
第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要 Daiyu Hatakeyama
 
BigData Architecture for Azure
BigData Architecture for AzureBigData Architecture for Azure
BigData Architecture for AzureRyoma Nagata
 
インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門Akihiro Kuwano
 
Sql server 構築 運用 tips
Sql server 構築 運用 tipsSql server 構築 運用 tips
Sql server 構築 運用 tipsMasayuki Ozawa
 
Apache Kuduを使った分析システムの裏側
Apache Kuduを使った分析システムの裏側Apache Kuduを使った分析システムの裏側
Apache Kuduを使った分析システムの裏側Cloudera Japan
 
Databricksを初めて使う人に向けて.pptx
Databricksを初めて使う人に向けて.pptxDatabricksを初めて使う人に向けて.pptx
Databricksを初めて使う人に向けて.pptxotato
 
MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話Yoshinori Matsunobu
 
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...NTT DATA Technology & Innovation
 
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)NTT DATA Technology & Innovation
 
Sql server のバックアップとリストアの基礎
Sql server のバックアップとリストアの基礎Sql server のバックアップとリストアの基礎
Sql server のバックアップとリストアの基礎Masayuki Ozawa
 
Amazon S3を中心とするデータ分析のベストプラクティス
Amazon S3を中心とするデータ分析のベストプラクティスAmazon S3を中心とするデータ分析のベストプラクティス
Amazon S3を中心とするデータ分析のベストプラクティスAmazon Web Services Japan
 
データ分析基盤、どう作る?システム設計のポイント、教えます - Developers.IO 2019 (20191101)
データ分析基盤、どう作る?システム設計のポイント、教えます - Developers.IO 2019 (20191101)データ分析基盤、どう作る?システム設計のポイント、教えます - Developers.IO 2019 (20191101)
データ分析基盤、どう作る?システム設計のポイント、教えます - Developers.IO 2019 (20191101)Yosuke Katsuki
 
Microsoft Azure Storage 概要
Microsoft Azure Storage 概要Microsoft Azure Storage 概要
Microsoft Azure Storage 概要Takeshi Fukuhara
 
[DI03] DWH スペシャリストが語る! Azure SQL Data Warehouse チューニングの勘所
[DI03] DWH スペシャリストが語る! Azure SQL Data Warehouse チューニングの勘所[DI03] DWH スペシャリストが語る! Azure SQL Data Warehouse チューニングの勘所
[DI03] DWH スペシャリストが語る! Azure SQL Data Warehouse チューニングの勘所de:code 2017
 
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版) データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版) Satoshi Nagayasu
 
マルチクラウドDWH(Snowflake)のすすめ
マルチクラウドDWH(Snowflake)のすすめマルチクラウドDWH(Snowflake)のすすめ
マルチクラウドDWH(Snowflake)のすすめYuuta Hishinuma
 
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)NTT DATA Technology & Innovation
 

What's hot (20)

Apache Kuduは何がそんなに「速い」DBなのか? #dbts2017
Apache Kuduは何がそんなに「速い」DBなのか? #dbts2017Apache Kuduは何がそんなに「速い」DBなのか? #dbts2017
Apache Kuduは何がそんなに「速い」DBなのか? #dbts2017
 
データ基盤の従来~最新の考え方とSynapse Analyticsでの実現
データ基盤の従来~最新の考え方とSynapse Analyticsでの実現データ基盤の従来~最新の考え方とSynapse Analyticsでの実現
データ基盤の従来~最新の考え方とSynapse Analyticsでの実現
 
第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要
第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要 第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要
第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要
 
BigData Architecture for Azure
BigData Architecture for AzureBigData Architecture for Azure
BigData Architecture for Azure
 
インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門
 
Sql server 構築 運用 tips
Sql server 構築 運用 tipsSql server 構築 運用 tips
Sql server 構築 運用 tips
 
Apache Kuduを使った分析システムの裏側
Apache Kuduを使った分析システムの裏側Apache Kuduを使った分析システムの裏側
Apache Kuduを使った分析システムの裏側
 
Databricksを初めて使う人に向けて.pptx
Databricksを初めて使う人に向けて.pptxDatabricksを初めて使う人に向けて.pptx
Databricksを初めて使う人に向けて.pptx
 
MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話
 
NetflixにおけるPresto/Spark活用事例
NetflixにおけるPresto/Spark活用事例NetflixにおけるPresto/Spark活用事例
NetflixにおけるPresto/Spark活用事例
 
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
 
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
 
Sql server のバックアップとリストアの基礎
Sql server のバックアップとリストアの基礎Sql server のバックアップとリストアの基礎
Sql server のバックアップとリストアの基礎
 
Amazon S3を中心とするデータ分析のベストプラクティス
Amazon S3を中心とするデータ分析のベストプラクティスAmazon S3を中心とするデータ分析のベストプラクティス
Amazon S3を中心とするデータ分析のベストプラクティス
 
データ分析基盤、どう作る?システム設計のポイント、教えます - Developers.IO 2019 (20191101)
データ分析基盤、どう作る?システム設計のポイント、教えます - Developers.IO 2019 (20191101)データ分析基盤、どう作る?システム設計のポイント、教えます - Developers.IO 2019 (20191101)
データ分析基盤、どう作る?システム設計のポイント、教えます - Developers.IO 2019 (20191101)
 
Microsoft Azure Storage 概要
Microsoft Azure Storage 概要Microsoft Azure Storage 概要
Microsoft Azure Storage 概要
 
[DI03] DWH スペシャリストが語る! Azure SQL Data Warehouse チューニングの勘所
[DI03] DWH スペシャリストが語る! Azure SQL Data Warehouse チューニングの勘所[DI03] DWH スペシャリストが語る! Azure SQL Data Warehouse チューニングの勘所
[DI03] DWH スペシャリストが語る! Azure SQL Data Warehouse チューニングの勘所
 
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版) データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
 
マルチクラウドDWH(Snowflake)のすすめ
マルチクラウドDWH(Snowflake)のすすめマルチクラウドDWH(Snowflake)のすすめ
マルチクラウドDWH(Snowflake)のすすめ
 
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
 

More from Masayuki Ozawa

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 徹底分析 - 最新アーキテクチャの特徴を理解する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
 
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 internalsMasayuki Ozawa
 
Power apps formula cheat sheet
Power apps formula cheat sheetPower apps formula cheat sheet
Power apps formula cheat sheetMasayuki Ozawa
 
K8s install (single cluster)
K8s install (single cluster)K8s install (single cluster)
K8s install (single cluster)Masayuki Ozawa
 
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 TipsMasayuki Ozawa
 
Managed Instance チートシート
Managed Instance チートシートManaged Instance チートシート
Managed Instance チートシートMasayuki Ozawa
 
Pacemaker 操作方法メモ
Pacemaker 操作方法メモPacemaker 操作方法メモ
Pacemaker 操作方法メモMasayuki Ozawa
 
Windows エンジニア向け sql server on linux のためのスキルアップデート
Windows エンジニア向け sql server on linux のためのスキルアップデートWindows エンジニア向け sql server on linux のためのスキルアップデート
Windows エンジニア向け sql server on linux のためのスキルアップデート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
 
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。Masayuki Ozawa
 
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 featuresMasayuki Ozawa
 
DBA から開発者への情報提供
DBA から開発者への情報提供DBA から開発者への情報提供
DBA から開発者への情報提供Masayuki Ozawa
 
Sql server 2016 ctp 3.0 新機能
Sql server 2016 ctp 3.0 新機能Sql server 2016 ctp 3.0 新機能
Sql server 2016 ctp 3.0 新機能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
 
A25 sql server data page structure deep dive
A25 sql server data page structure deep diveA25 sql server data page structure deep dive
A25 sql server data page structure deep diveMasayuki Ozawa
 
Data consistency 入門 data partitioning ガイダンス
Data consistency 入門 data partitioning ガイダンスData consistency 入門 data partitioning ガイダンス
Data consistency 入門 data partitioning ガイダンス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 現状診断サービス ご紹介資料
 
A25 sql server data page structure deep dive
A25 sql server data page structure deep diveA25 sql server data page structure deep dive
A25 sql server data page structure deep dive
 
Data consistency 入門 data partitioning ガイダンス
Data consistency 入門 data partitioning ガイダンスData consistency 入門 data partitioning ガイダンス
Data consistency 入門 data partitioning ガイダンス
 

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