SQL Server の最大容量仕様

適用対象: はいSQL Server (サポートされているすべてのバージョン)

この記事では、SQL Server 2016 以降で定義される各種オブジェクトの最大サイズと最大数を示します。

SQL Server 2014 については、「SQL Server 2014 の最大容量仕様」を参照してください。

データベース エンジン オブジェクト

SQL Server データベースで定義される各種オブジェクト、または Transact-SQL ステートメントで参照される各種オブジェクトの最大サイズと最大数。

SQL Server データベース エンジン オブジェクト 最大サイズ/最大数 ( SQL Server 64 ビットの場合) 追加情報
バッチ サイズ 65,536 * (ネットワーク パケットのサイズ) ネットワーク パケット サイズとは、アプリケーションとリレーショナル データベース エンジンの間の通信に使用される表形式データ ストリーム (TDS) パケットのサイズです。 既定のパケット サイズは 4 KB であり、network packet size 構成オプションによって制御されます。
通常の string 列ごとのバイト数 8,000
GROUP BYORDER BY ごとのバイト数 8,060
インデックス キーごとのバイト数 1 つのクラスター化インデックスにつき 900 バイト。 1 つの非クラスター化インデックスにつき 1,700 バイト。 SQL Server 2016 より前では、すべてのバージョンで、すべてのインデックスの種類に対して 900 バイトがサポートされていました。 SQL Serverでは、クラスター化インデックス キーの最大バイト数を 900 以下にする必要があります。 非クラスター化インデックス キーの場合は、最大 1,700 バイト。

最大サイズを合計すると制限を超える可変長列を使用して、キーを定義できます。 ただし、これらの列のデータのサイズ合計が、制限を超えることはできません。

非クラスター化インデックスには、追加の非キー列を含めることができ、それらはキーのサイズ制限にはカウントされません。 非キー列は、一部のクエリ パフォーマンスの向上に役立つ場合があります。
メモリ最適化テーブルのインデックス キーごとのバイト数 1 つの非クラスター化インデックスにつき 2,500 バイト。 すべてのインデックス キーが行内に収まる限り、ハッシュ インデックスに制限はなし。 メモリ最適化テーブルでは、非クラスター化インデックスは、宣言された最大サイズが 2,500 バイトを超えるキー列を持つことはできません。 キー列の実際のデータが、宣言されている最大サイズよりも小さいかどうかには関係ありません。

ハッシュ インデックス キーの場合、サイズにハード リミットはありません。

メモリ最適化テーブルのインデックスの場合、すべてのインデックスがすべての列を本質的にカバーするため、付加列の概念はありません。

メモリ最適化テーブルの場合、行のサイズが 8,060 バイトでも、一部の可変長列をこの 8,060 バイトの外側に物理的に保存できます。 ただし、テーブルのすべてのインデックスのすべてのキー列の宣言された最大サイズと、テーブル内の追加の固定長列のすべてが、8,060 バイトに収まる必要があります。
外部キーごとのバイト数 900
主キーごとのバイト数 900
行ごとのバイト数 8,060 SQL Server 行オーバーフロー ストレージがサポートされています。これにより、可変長列の行外への移動が可能になります。 行外に押し出された可変長列については、メイン レコードに 24 バイトのルートだけが格納されます。 この機能を使用すると、以前のリリースの SQL Server よりも効果的に高い制限を課すことができます。 詳細については、大量の行のサポートに関する記事を参照してください。
メモリ最適化テーブル内の行ごとのバイト数 8,060 SQL Server 2016 (13.x) から、メモリ最適化テーブルで行外ストレージがサポートされます。 テーブル内のすべての列の最大サイズが 8,060 バイトを超える場合、可変長列が行外に押し出されます。このアクションはコンパイル時の決定です。 行外に保存された列用に、8 バイトの参照だけが行内に保存されます。 詳細については、「 メモリ最適化テーブルのテーブルと行のサイズ」を参照してください。
ストアド プロシージャのソース テキスト内のバイト数 バッチ サイズまたは 250 MB のいずれか小さい方
varchar(max) varbinary(max)xmltext、または image 列ごとのバイト数 2^31-1
ntext または nvarchar(max) 列ごとの文字数 2^30-1
テーブルごとのクラスター化インデックス数 1
GROUP BYORDER BY の列 バイト数のみによって制限されます。
GROUP BY WITH CUBE または WITH ROLLUP ステートメント内の列または式 10
インデックス キーごとの列数 32 テーブルに 1 つ以上の XML インデックスが含まれている場合は、XML 列がプライマリ XML インデックスのクラスター化キーに追加されるため、ユーザー テーブルのクラスター化キーが 31 列までに制限されます。 SQL Server では、キー列数が最大キー列数制限の 32 を越えないように、非クラスター化インデックスに非キー列を含めることができます。 詳細については、「 付加列インデックスの作成」を参照してください。
外部キーまたは主キーごとの列数 32
INSERT ステートメントごとの列数 4,096
SELECT ステートメントごとの列数 4,096
テーブルごとの列数 1,024 スパース列セットを含むテーブルには、最大 30,000 列が含まれます。 「スパース列セット」を参照してください。
UPDATE ステートメントごとの列数 4,096 スパース列セットには、異なる制限が適用されます。
ビューごとの列数 1,024
クライアントごとの接続数 構成した接続の最大値
データベース サイズ 524,272 テラバイト
インスタンスごとのデータベース数 SQL Server 32,767
データベースごとのファイル グループ数 32,767
メモリ最適化データに対応する、データベースごとのファイル グループ 1
データベースごとのファイル数 32,767
ファイル サイズ (データ) 16 テラバイト
ファイル サイズ (ログ) 2 テラバイト
データベースごとのメモリ最適化データに対応するデータ ファイル SQL Server 2014 (12.x) では 4,096。 それより後のバージョンの SQL Server には、このような厳密な制限はありません。
メモリ最適化データに対応するデータ ファイルごとのデルタ ファイル 1
テーブルごとの外部キー テーブル参照数 発信 = 253。 着信 = 10,000。 制限については、「 Create Foreign Key Relationships」を参照してください。
識別子長 (文字数) 128
コンピューターごとのインスタンス数 スタンドアロン サーバー上に 50 個のインスタンス。

ストレージとして共有クラスター ディスクを使用する場合は、25 個のフェールオーバー クラスター インスタンス。

ストレージ オプションとして SMB ファイル共有を使用する場合は、50 個のフェールオーバー クラスター インスタンス。
メモリ最適化テーブルごとのインデックス SQL Server 2017 (14.x) 以降および Azure SQL データベース では 999
SQL Server 2014 (12.x) および SQL Server 2016 (13.x) では 8
SQL ステートメントが含まれた文字列の長さ (バッチ サイズ) 65,536 (ネットワーク パケットのサイズ) ネットワーク パケット サイズとは、アプリケーションとリレーショナル データベース エンジンの間の通信に使用される表形式データ ストリーム (TDS) パケットのサイズです。 既定のパケット サイズは 4 KB であり、network packet size 構成オプションによって制御されます。
接続ごとのロック数 サーバーごとの最大ロック数
のインスタンスごとのロック数 SQL Server メモリのみによって制限されます。 これは静的ロック割り当てに対する値です。 動的ロックの場合は、メモリのみによって制限されます。
ストアド プロシージャの入れ子レベル数 32 ストアド プロシージャが 65 個以上のデータベースにアクセスするか、またはインターリーブ時に 2 つ以上のデータベースにアクセスすると、エラーが返されます。
入れ子にしたサブクエリの数 32
入れ子構造のトランザクション 4,294,967,296
トリガーの入れ子レベル数 32
テーブルごとの非クラスター化インデックス数 999
次のいずれかが存在する場合の、GROUP BY 句に含まれる個別の式の数: CUBEROLLUPGROUPING SETSWITH CUBEWITH ROLLUP 32
GROUP BY 句内の演算子によって生成されるグループ化セットの数 4,096
ストアド プロシージャごとのパラメーター数 2,100
ユーザー定義関数ごとのパラメーター数 2,100
テーブルごとの参照数 253
テーブルごとの行数 使用可能な記憶領域によって制限されます。
データベースごとのテーブル数 データベース内のオブジェクトの合計数によって制限されます。 オブジェクトには、テーブル、ビュー、ストアド プロシージャ、ユーザー定義関数、トリガー、ルール、デフォルト、および制約が含まれます。 1 つのデータベース内のオブジェクトの合計数は 2,147,483,647 以下にする必要があります。
パーティション テーブルまたはインデックスごとのパーティション数 15,000
インデックス付けされていない列の統計 30,000
SELECT ステートメントごとのテーブル数 使用可能なリソースのみによって制限されます。
テーブルごとのトリガー数 データベース内のオブジェクト数によって制限されます。 オブジェクトには、テーブル、ビュー、ストアド プロシージャ、ユーザー定義関数、トリガー、ルール、デフォルト、および制約が含まれます。 1 つのデータベース内のオブジェクトの合計数は 2,147,483,647 以下にする必要があります。
ユーザー接続数 32,767
XML インデックス数 249

SQL Server ユーティリティ オブジェクト

SQL Server ユーティリティでテストされた各種オブジェクトの最大サイズと最大数。

SQL Server ユーティリティ オブジェクト 最大サイズ/最大数 ( SQL Server 64 ビットの場合)
SQL Server ユーティリティごとのコンピューター数 (物理コンピューターまたは仮想マシン) 100
コンピューターごとの SQL Server のインスタンス数 5
SQL Server ユーティリティごとの SQL Server のインスタンス総数 200*
SQL Serverのインスタンス (データ層アプリケーションを含む) ごとのユーザー データベース数 50
SQL Server ユーティリティごとのユーザー データベース総数 1,000
データベースごとのファイル グループ数 1
ファイル グループごとのデータ ファイル数 1
データベースごとのログ ファイル数 1
コンピューターごとのボリューム数 3

*SQL Server ユーティリティでサポートされる SQL Server のマネージド インスタンスの最大数は、サーバーのハードウェア構成によって異なる場合があります。 概要情報については、「 SQL Server ユーティリティの機能とタスク」を参照してください。 SQL Server ユーティリティ コントロール ポイントは、 SQL Serverのすべてのエディションで使用できるわけではありません。 SQL Server の各エディションでサポートされる機能の一覧については、SQL Server 2019 のエディションでサポートされる機能SQL Server 2017 のエディションでサポートされる機能、および SQL Server 2016 のエディションでサポートされる機能に関するページを参照してください。

SQL Server データ層アプリケーション オブジェクト

SQL Server データ層アプリケーション (DAC) でテストされた各種オブジェクトの最大サイズと最大数。

SQL Server DAC オブジェクト 最大サイズ/最大数 ( SQL Server 64 ビットの場合)
DAC ごとのデータベース数 1
DAC ごとのオブジェクト数* データベース内のオブジェクト数または使用可能なメモリによって制限されます。

*制限の対象となるオブジェクトの種類は、ユーザー、テーブル、ビュー、ストアド プロシージャ、ユーザー定義関数、ユーザー定義データ型、データベース ロール、スキーマ、およびユーザー定義テーブル型です。

レプリケーション オブジェクト

SQL Server レプリケーションで定義される各種オブジェクトの最大サイズと最大数。

SQL Server レプリケーション オブジェクト 最大サイズ/最大数 (SQL Server 64 ビットの場合)
アーティクル数 (マージ パブリケーション) 2048
アーティクル数 (スナップショットまたはトランザクション パブリケーション) 32,767
テーブル内の列数* (マージ パブリケーション) 246
テーブル内の列数** (SQL Server のスナップショットまたはトランザクション パブリケーション) 1,000
テーブル内の列数** (Oracle のスナップショットまたはトランザクション パブリケーション) 995
行フィルターで使用される列のバイト数 (マージ パブリケーション) 1,024
行フィルターで使用される列のバイト数 (スナップショットまたはトランザクション パブリケーション) 8,000

*行レベルの追跡を使用して競合を検出する場合 (既定値)、ベース テーブルには最大 1,024 列含めることができますが、最大 246 列がパブリッシュされるようにアーティクルから列をフィルター選択する必要があります。 列の追跡を使用する場合、ベース テーブルには最大 246 列を含めることができます。

**ベース テーブルには、パブリケーション データベースで許容される最大数 (SQL Server の場合は 1,024) の列を含めることができますが、列数がパブリケーション タイプに対して指定された最大数を超える場合は、アーティクルから列をフィルター選択する必要があります。

関連項目

SQL Server ユーティリティの機能とタスク