メモリ最適化テーブルのサブスクライバーへのレプリケーション

適用対象:SQL ServerAzure SQL Managed Instance

スナップショットやトランザクションレプリケーションのサブスクライバーとして機能するテーブルを、ピアツーピアのトランザクションレプリケーションを除き、メモリ最適化テーブルとして設定できます。 メモリ最適化テーブルは他のレプリケーション構成とは互換性がありません。 この機能はSQL Server 2016(13.x)から利用可能になります。

必要な 2 つの構成

  • メモリ最適化テーブルへのレプリケーションがサポートされるように、サブスクライバー データベースを構成する

    @memory_optimizedプロパティをsp_addsubscription(Transact-SQL)またはsp_changesubscription(Transact-SQL)を使ってtrueに設定します。

  • メモリ最適化テーブルへのレプリケーションがサポートされるように、アーティクルを構成する

    @schema_option = 0x40000000000 または sp_changearticle (Transact-SQL) を使用して、アーティクルに オプションを設定します。

メモリ最適化テーブルをサブスクライバーとして構成するには

  1. トランザクション パブリケーションを作成します。 詳しくは、「 パブリケーションを作成」をご覧ください。

  2. パブリケーションにアーティクルを追加します。 詳しくは、「 アーティクルを定義」をご覧ください。

    Transact-SQL を使用して構成している場合は、sp_addarticle ストアド プロシージャの @schema_option パラメーターを
    0x40000000000 に設定します。

  3. 記事のプロパティウィンドウで「 Enable Memory optimization 」を trueに設定してください。

  4. スナップショット エージェント ジョブを起動して、このパブリケーションの初期スナップショットを生成します。 詳しくは、「 初期スナップショットの作成および適用」をご覧ください。

  5. ここで、新しいサブスクリプションを作成します。 サブスクリプションの新規作成ウィザード で [Memory Optimized Subscription] (メモリ最適化サブスクリプション) を trueに設定します。

これでメモリ最適化テーブルはパブリッシャーから更新を受け取り始めます。

既存のトランザクション レプリケーションを再構成する

  1. Management Studio のサブスクリプションのプロパティに移動して、[Memory Optimized Subscription] (メモリ最適化サブスクリプション) を true に設定します。 変更はサブスクリプションを再初期化するまで適用されません。

    Transact-SQL を使用して構成している場合は、sp_addsubscription ストアド プロシージャの新しい @memory_optimized パラメーターを true に設定します。

  2. Management Studio でパブリケーションのアーティクルのプロパティに移動して、[Enable Memory optimization] (メモリ最適化を有効にする) を true に設定します。

    Transact-SQL を使用して構成している場合は、sp_addarticle ストアド プロシージャの @schema_option パラメーターを
    0x40000000000 に設定します。

  3. メモリ最適化されたテーブルはクラスタインデックスをサポートしていません。 この制限にレプリケーションで対応するため、変換先でインデックスを非クラスター化インデックスに変換するには、Convert clustered index to nonclustered for memory optimized article を true に設定します。

    Transact-SQL を使用して構成している場合は、sp_addarticle ストアド プロシージャの @schema_option パラメーターを 0x0000080000000000 に設定します。

  4. スナップショットを再生成します。

  5. サブスクリプションを再初期化します。

発言と制限事項

一方向トランザクション レプリケーションのみがサポートされています。 ピアツーピアのトランザクションレプリケーションはサポートされていません。

メモリ最適化されたテーブルを公開することはできません。

ディストリビュータ上のレプリケーションテーブルをメモリ最適化テーブルとして設定することはできません。

マージレプリケーションにはメモリ最適化されたテーブルを含めることはできません。

サブスクライバー側では、トランザクションレプリケーションに関わるテーブルをメモリ最適化テーブルとして設定できますが、サブスクライバーテーブルはメモリ最適化テーブルの要件を満たす必要があります。 この要件には以下の制限が課されます:

スキーマ ファイルの変更

  • メモリ最適化テーブルオプション DURABILITY = SCHEMA_AND_DATAを使用する場合、テーブルはクラスタ化されていないプライマリキーインデックスを持つ必要があります。

  • ANSI_PADDING は、ON である必要があります。