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

[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
 
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性Ohyama Masanori
 
カラムストアインデックス 最初の一歩
カラムストアインデックス 最初の一歩カラムストアインデックス 最初の一歩
カラムストアインデックス 最初の一歩Masayuki Ozawa
 
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会ShuheiUda
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...NTT DATA Technology & Innovation
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウトMasahiko Sawada
 
SQL Server運用実践 - 3年間80台の運用経験から20の教訓
SQL Server運用実践 - 3年間80台の運用経験から20の教訓SQL Server運用実践 - 3年間80台の運用経験から20の教訓
SQL Server運用実践 - 3年間80台の運用経験から20の教訓貴仁 大和屋
 
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)NTT DATA Technology & Innovation
 
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)NTT DATA Technology & Innovation
 
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)日本マイクロソフト株式会社
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Etsuji Nakai
 
オラクルのHPC/GPUソリューションご紹介(2021/08版)
オラクルのHPC/GPUソリューションご紹介(2021/08版)オラクルのHPC/GPUソリューションご紹介(2021/08版)
オラクルのHPC/GPUソリューションご紹介(2021/08版)オラクルエンジニア通信
 
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けRecruit Technologies
 
DBP-009_クラウドで実現するスケーラブルなデータ ウェアハウス Azure SQL Data Warehouse 解説
DBP-009_クラウドで実現するスケーラブルなデータ ウェアハウス Azure SQL Data Warehouse 解説DBP-009_クラウドで実現するスケーラブルなデータ ウェアハウス Azure SQL Data Warehouse 解説
DBP-009_クラウドで実現するスケーラブルなデータ ウェアハウス Azure SQL Data Warehouse 解説decode2016
 
SQL Server/SQL Database の新機能のお話し
SQL Server/SQL Database の新機能のお話しSQL Server/SQL Database の新機能のお話し
SQL Server/SQL Database の新機能のお話しInsight Technology, Inc.
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)NTT DATA Technology & Innovation
 
Sql server のバックアップとリストアの基礎
Sql server のバックアップとリストアの基礎Sql server のバックアップとリストアの基礎
Sql server のバックアップとリストアの基礎Masayuki Ozawa
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーToru Makabe
 
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)NTT DATA Technology & Innovation
 
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 

What's hot (20)

[DI03] DWH スペシャリストが語る! Azure SQL Data Warehouse チューニングの勘所
[DI03] DWH スペシャリストが語る! Azure SQL Data Warehouse チューニングの勘所[DI03] DWH スペシャリストが語る! Azure SQL Data Warehouse チューニングの勘所
[DI03] DWH スペシャリストが語る! Azure SQL Data Warehouse チューニングの勘所
 
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
 
カラムストアインデックス 最初の一歩
カラムストアインデックス 最初の一歩カラムストアインデックス 最初の一歩
カラムストアインデックス 最初の一歩
 
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウト
 
SQL Server運用実践 - 3年間80台の運用経験から20の教訓
SQL Server運用実践 - 3年間80台の運用経験から20の教訓SQL Server運用実践 - 3年間80台の運用経験から20の教訓
SQL Server運用実践 - 3年間80台の運用経験から20の教訓
 
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
 
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
 
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
オラクルのHPC/GPUソリューションご紹介(2021/08版)
オラクルのHPC/GPUソリューションご紹介(2021/08版)オラクルのHPC/GPUソリューションご紹介(2021/08版)
オラクルのHPC/GPUソリューションご紹介(2021/08版)
 
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分け
 
DBP-009_クラウドで実現するスケーラブルなデータ ウェアハウス Azure SQL Data Warehouse 解説
DBP-009_クラウドで実現するスケーラブルなデータ ウェアハウス Azure SQL Data Warehouse 解説DBP-009_クラウドで実現するスケーラブルなデータ ウェアハウス Azure SQL Data Warehouse 解説
DBP-009_クラウドで実現するスケーラブルなデータ ウェアハウス Azure SQL Data Warehouse 解説
 
SQL Server/SQL Database の新機能のお話し
SQL Server/SQL Database の新機能のお話しSQL Server/SQL Database の新機能のお話し
SQL Server/SQL Database の新機能のお話し
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
 
Sql server のバックアップとリストアの基礎
Sql server のバックアップとリストアの基礎Sql server のバックアップとリストアの基礎
Sql server のバックアップとリストアの基礎
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
 
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
 
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
 

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
 
SQL Server 現状診断サービス ご紹介資料
SQL Server 現状診断サービス ご紹介資料SQL Server 現状診断サービス ご紹介資料
SQL Server 現状診断サービス ご紹介資料Masayuki Ozawa
 
Sql server 構築 運用 tips
Sql server 構築 運用 tipsSql server 構築 運用 tips
Sql server 構築 運用 tipsMasayuki 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