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

あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界Yoshinori Nakanishi
 
Azure Cosmos DB のキホンと使いドコロ
Azure Cosmos DB のキホンと使いドコロAzure Cosmos DB のキホンと使いドコロ
Azure Cosmos DB のキホンと使いドコロKazuyuki Miyake
 
ここからはじめる SQL Server の状態取得
ここからはじめる SQL Server の状態取得ここからはじめる SQL Server の状態取得
ここからはじめる SQL Server の状態取得Masayuki Ozawa
 
Zabbix による ms sql監視 ~データベースモニタリング~ odbc
Zabbix による ms sql監視 ~データベースモニタリング~ odbcZabbix による ms sql監視 ~データベースモニタリング~ odbc
Zabbix による ms sql監視 ~データベースモニタリング~ odbc真乙 九龍
 
Microsoft Azure Storage 概要
Microsoft Azure Storage 概要Microsoft Azure Storage 概要
Microsoft Azure Storage 概要Takeshi Fukuhara
 
[Cloud OnAir] Google Cloud へのデータ移行 2019年1月24日 放送
[Cloud OnAir] Google Cloud へのデータ移行 2019年1月24日 放送[Cloud OnAir] Google Cloud へのデータ移行 2019年1月24日 放送
[Cloud OnAir] Google Cloud へのデータ移行 2019年1月24日 放送Google Cloud Platform - Japan
 
Sql server 構築 運用 tips
Sql server 構築 運用 tipsSql server 構築 運用 tips
Sql server 構築 運用 tipsMasayuki Ozawa
 
一歩先行く Azure Computing シリーズ(全3回) 第2回 Azure VM どれを選ぶの? Azure VM 集中講座
一歩先行く Azure Computing シリーズ(全3回) 第2回 Azure VM どれを選ぶの? Azure VM 集中講座一歩先行く Azure Computing シリーズ(全3回) 第2回 Azure VM どれを選ぶの? Azure VM 集中講座
一歩先行く Azure Computing シリーズ(全3回) 第2回 Azure VM どれを選ぶの? Azure VM 集中講座Minoru Naito
 
SQL Server運用実践 - 3年間80台の運用経験から20の教訓
SQL Server運用実践 - 3年間80台の運用経験から20の教訓SQL Server運用実践 - 3年間80台の運用経験から20の教訓
SQL Server運用実践 - 3年間80台の運用経験から20の教訓貴仁 大和屋
 
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方歩 柴田
 
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)日本マイクロソフト株式会社
 
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
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)NTT DATA Technology & Innovation
 
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチSql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチMasayuki Ozawa
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかShogo Wakayama
 
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性Ohyama Masanori
 
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会Shigeru Hanada
 
第34回Office 365勉強会 : Microsoftサポート活用術 ~ Microsoft Azureを中心に ~
第34回Office 365勉強会 : Microsoftサポート活用術 ~ Microsoft Azureを中心に ~第34回Office 365勉強会 : Microsoftサポート活用術 ~ Microsoft Azureを中心に ~
第34回Office 365勉強会 : Microsoftサポート活用術 ~ Microsoft Azureを中心に ~Genki WATANABE
 

What's hot (20)

あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
 
Azure Cosmos DB のキホンと使いドコロ
Azure Cosmos DB のキホンと使いドコロAzure Cosmos DB のキホンと使いドコロ
Azure Cosmos DB のキホンと使いドコロ
 
ここからはじめる SQL Server の状態取得
ここからはじめる SQL Server の状態取得ここからはじめる SQL Server の状態取得
ここからはじめる SQL Server の状態取得
 
Zabbix による ms sql監視 ~データベースモニタリング~ odbc
Zabbix による ms sql監視 ~データベースモニタリング~ odbcZabbix による ms sql監視 ~データベースモニタリング~ odbc
Zabbix による ms sql監視 ~データベースモニタリング~ odbc
 
Microsoft Azure Storage 概要
Microsoft Azure Storage 概要Microsoft Azure Storage 概要
Microsoft Azure Storage 概要
 
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
 
[Cloud OnAir] Google Cloud へのデータ移行 2019年1月24日 放送
[Cloud OnAir] Google Cloud へのデータ移行 2019年1月24日 放送[Cloud OnAir] Google Cloud へのデータ移行 2019年1月24日 放送
[Cloud OnAir] Google Cloud へのデータ移行 2019年1月24日 放送
 
Sql server 構築 運用 tips
Sql server 構築 運用 tipsSql server 構築 運用 tips
Sql server 構築 運用 tips
 
一歩先行く Azure Computing シリーズ(全3回) 第2回 Azure VM どれを選ぶの? Azure VM 集中講座
一歩先行く Azure Computing シリーズ(全3回) 第2回 Azure VM どれを選ぶの? Azure VM 集中講座一歩先行く Azure Computing シリーズ(全3回) 第2回 Azure VM どれを選ぶの? Azure VM 集中講座
一歩先行く Azure Computing シリーズ(全3回) 第2回 Azure VM どれを選ぶの? Azure VM 集中講座
 
SQL Server運用実践 - 3年間80台の運用経験から20の教訓
SQL Server運用実践 - 3年間80台の運用経験から20の教訓SQL Server運用実践 - 3年間80台の運用経験から20の教訓
SQL Server運用実践 - 3年間80台の運用経験から20の教訓
 
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方
 
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)
 
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 徹底分析 - 最新アーキテクチャの特徴を理解する
 
Azure Network 概要
Azure Network 概要Azure Network 概要
Azure Network 概要
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
 
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチSql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
 
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
 
第34回Office 365勉強会 : Microsoftサポート活用術 ~ Microsoft Azureを中心に ~
第34回Office 365勉強会 : Microsoftサポート活用術 ~ Microsoft Azureを中心に ~第34回Office 365勉強会 : Microsoftサポート活用術 ~ Microsoft Azureを中心に ~
第34回Office 365勉強会 : Microsoftサポート活用術 ~ Microsoft Azureを中心に ~
 

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
 
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
 
Sql server data store data access internals
Sql server data store data access internalsSql server data store data access internals
Sql server data store data access internalsMasayuki Ozawa
 

More from Masayuki Ozawa (20)

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 data store data access internals
Sql server data store data access internalsSql server data store data access internals
Sql server data store data access internals
 

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