【3分で流し読み】SQL Server / Azure SQL Databaseにおけるパーティショニングを理解する

こんにちは。この記事では、データベースの文脈で登場するパーティショニング(パーティション分割)という概念について学んだことをまとめておきたいと思います。

パーティショニング自体はSQL Serverに限らない概念ですので、まずは一般的なパーティショニングの話をしたのち、SQL Server / Azure SQL Databaseにおけるパーティショニングの話に入っていきたいと思います。

それでは参ります。

データベースのパーティショニングとは?

日時をパーティションキーにしたときのデータ分割イメージ
  • データベースを複数に分割すること。(by Wikipedia)
  • 具体的には、パーティションキーとして指定した列の値によって、テーブルのデータやインデックスを複数の領域に分割する。

参考:

https://ja.wikipedia.org/wiki/%E5%88%86%E5%89%B2_(%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9)

https://www.oracle.com/technetwork/jp/ondemand/database/db-technique/d-12-disk-1484778-ja.pdf(Oracleの方がまとめたスライドのようですが、背景や概要を掴むにはとても分かりやすいのでおススメです)

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

パーティショニングを行うと、大規模データベースに対して以下のメリットがあります。

  • データアクセスや転送が高速になる
  • 各種メンテナンス操作が高速になる

これは、各操作がデータベース全体ではなく、パーティション単位で行えるようになるため。

参考:

https://docs.microsoft.com/ja-jp/sql/relational-databases/partitions/partitioned-tables-and-indexes?view=sql-server-ver15

SQL Server/Azure SQL Databaseでサポートされているパーティショニング

  • テーブルとインデックスに対するパーティショニングがサポートされている
  • SQL Server 2012 (11.x)以降は15,000のパーティションが、それ以前では1,000のパーティションが作成できる
  • SQL Serverでは単一のファイルグループまたは、複数のファイルグループをまたいだパーティショニングが可能(Azure SQL Databaseはファイルとファイルグループの追加がサポートされていないため、規定のPrimaryファイルグループ内のみ)
  • パーティション テーブルとパーティション インデックスのデータは、データベース内の複数のファイル グループに分散できるように、行方向に複数の単位に分割されている

参考:

https://docs.microsoft.com/ja-jp/sql/relational-databases/partitions/partitioned-tables-and-indexes?view=sql-server-ver15

パーティショニング構成の流れ

SQL Serverでは、SSMSまたは T-SQL を使用して、パーティションテーブルまたはパーティションインデックスを作成できます。必要な手順の流れは以下。

  1. パーティションを保持するためのファイル グループとファイルを作成する
  2. テーブルまたはインデックスの行を指定された列の値に基づいてパーティションにマップする、パーティション関数を作成する
  3. パーティション テーブルまたはパーティション インデックスのパーティションを新しいファイル グループにマップするパーティション構成を作成します。
  4. テーブルまたはインデックスを作成または変更し、格納場所としてそのパーティション構成を指定する

公式ドキュメントの日本語がようわからんですが、パーティション関数=データとパーティションのマッピング、パーティション構成=パーティションとデータファイルのマッピング、ということかな・・?

それぞれの構成要素については、公式ドキュメントに以下の説明があります。

パーティション関数

テーブルまたはインデックスの行を、パーティション分割列と呼ばれる特定の列の値に基づいて、一連のパーティションにマップする方法を定義するデータベース オブジェクト。 パーティション分割列の各値は、パーティション値を返すパーティション関数への入力です。 パーティション関数によって、テーブルに含まれるパーティションの数とパーティションの境界が定義されます。

パーティション構成

パーティション関数のパーティションを一連のファイル グループにマップするデータベース オブジェクト。 パーティションを別々のファイル グループに配置する主な理由は、パーティションのバックアップ操作を個別に実行できるようにすることです。 これは、バックアップを個別のファイル グループで実行できるからです。

参考:https://docs.microsoft.com/ja-jp/sql/relational-databases/partitions/create-partitioned-tables-and-indexes?view=sql-server-ver15

SQL Server/Azure SQL Databaseにおけるパーティショニング戦略

SQL Server / Azure SQL Database

https://docs.microsoft.com/ja-jp/sql/relational-databases/partitions/partitioned-tables-and-indexes?view=sql-server-ver15#components-and-concepts

  • クラスター化インデックス、非クラスターインデックスをパーティション分割するには、クラスター化キーにパーティション分割列(パーティション分割キー)を含んでいる必要がある
  • 並列操作のパフォーマンスを最大化するには、プロセッサのコア数(SQL Serverで利用できる並列処理プロセッサの最大数は64)でパーティション分割することが推奨
  • 構成するパーティションが多い場合には、パーティション作成のためRAM 16GB以上が推奨。

Azure SQL Database については、以下にもドキュメントがあります。

https://docs.microsoft.com/ja-jp/azure/architecture/best-practices/data-partitioning-strategies#partitioning-azure-sql-database

以上、簡単ですが、SQL Server / Azure SQL Databaseにおけるパーティションの概要についてのまとめでした。ちょっと荒い感じなので、記事内容は時間をみつけて随時Updateしていきたいと思います。

おしまい

この記事を気に入っていただけたらシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT US
Yuu113
初めまして。ゆうたろうと申します。 兵庫県出身、東京でシステムエンジニアをしております。現在は主にデータ分析、機械学習を活用してビジネスモデリングに取り組んでいます。 日々学んだことや経験したことを整理していきたいと思い、ブログを始めました。旅行、カメラ、IT技術、江戸文化が大好きですので、これらについても記事にしていきたいと思っています。