パラメーター化された行フィルターの最適化

適用対象:SQL Server

このトピックでは、SQL Server Management Studio または Transact-SQL を使用して、SQL Server でパラメーター化された行フィルターを最適化する方法について説明します。

このトピックの内容

始める前に

推奨事項

  • パラメーター化されたフィルターを使用する場合、パブリケーションを作成する際に \@use_partition_groups オプションまたは \@keep_partition_changes オプションを指定して、マージ レプリケーションでのフィルターの処理方法を制御できます。 この 2 つのオプションを使用し、パブリケーション データベースに追加のメタデータを格納することで、アーティクルをフィルター選択し、パブリケーションの同期パフォーマンスを向上できます。 アーティクルを作成する際に \@partition_options を設定することで、サブスクライバー間でデータを共有する方法を制御できます。 これらの要件の詳細については、「 パラメーター化された行フィルター」をご覧ください。

    SQL Server CompactSQL Server Compact サブスクライバーを使用して、keep_partition_changes を true に設定し、削除を正しく反映する必要があります。 false に設定すると、サブスクライバーに予想よりも多くの行が含まれる場合があります。

SQL Server Management Studio を使用する

次の設定を使用して、パラメーター化された行フィルターを最適化できます。

Partition Options
このオプションは、[アーティクルのプロパティ - <アーティクル> ダイアログ ドロップダウン リストの [プロパティ] ページ、または [フィルターの追加] ダイアログ ドロップダウン リストで設定します。 どちらのダイアログ ドロップダウン リストも、パブリケーションの新規作成ウィザードおよび [パブリケーションのプロパティ - <パブリケーション]>ダイアログ ドロップダウン リストからアクセスできます。 [アーティクルのプロパティ - <アーティクル> ダイアログ ドロップダウン リストでは、[フィルターの追加] ダイアログ ドロップダウン リストでは使用できない、このオプションに対する追加の値も指定できます。

[パーティションの事前計算]
このオプションは、パブリケーションのアーティクルが一連の要件を満たしている場合に、既定で [True] に設定されています。 これらの要件の詳細については、「事前計算済みパーティションによるパラメーター化されたフィルターのパフォーマンス最適化」を参照してください。 このオプションは、[パブリケーションのプロパティ - <パブリケーション]> ダイアログ ドロップダウン リストの [サブスクリプション オプション] ページで変更します。

[同期の最適化]
このオプションは、 [パーティションの事前計算][False] に設定されている場合にのみ、 [True]に設定されています。 このオプションは、[パブリケーションのプロパティ - <パブリケーション]> ダイアログ ドロップダウン リストの [サブスクリプション オプション] ページで設定します。

パブリケーションの新規作成ウィザードの使用および [パブリケーションのプロパティ - <パブリケーション]> ダイアログ ドロップダウン リストへのアクセスの詳細については、「パブリケーションの作成」 (パブリケーションの作成) および「パブリケーション プロパティの表示および変更」 (パブリケーション プロパティの表示および変更) を参照してください。

[フィルターの追加] または [フィルターの編集] ダイアログ ボックスでパーティションのオプションを設定するには

  1. パブリケーションの新規作成ウィザードの [テーブル行のフィルター選択] ページ、または [パブリケーションのプロパティ - <パブリケーション]> ダイアログ ドロップダウン リストの [行のフィルター選択] ページで、[追加] をクリックし、[フィルターの追加] をクリックします。

  2. パラメーター化されたフィルターを作成します。 詳しくは、「 マージ アーティクルのパラメーター化された行フィルターの定義および変更」をご覧ください。

  3. 複数のサブスクライバー間でのデータの共有方法に一致するオプションを選択します。

    • [このテーブルの 1 行を複数のサブスクリプションに移動する]

    • [このテーブルの 1 行を 1 つのサブスクリプションのみに移動する]

    [このテーブルの 1 行を 1 つのサブスクリプションのみに移動する]を選択すると、マージ レプリケーションは、格納および処理するメタデータを減らすことにより、パフォーマンスを最適化できます。 ただし、データのパーティション分割によって、1 つの行が複数のサブスクライバーにレプリケートされないことを確認する必要があります。 詳細については、「 パラメーター化された行フィルター」トピックの「[パーティションのオプション] の設定」をご覧ください。

  4. [OK] を選択します。

  5. [パブリケーションのプロパティ - <パブリケーション]> ダイアログ ボックスが表示されている場合は、[OK] をクリックして保存し、ダイアログ ボックスを閉じます。

[アーティクルのプロパティ - <アーティクル]> ダイアログ ドロップダウン リストで [パーティションのオプション] を設定するには

  1. パブリケーションの新規作成ウィザードの [アーティクル] ページ、または [パブリケーションのプロパティ - <パブリケーション]> ダイアログ ドロップダウン リストでテーブルを選択し、[アーティクルのプロパティ] をクリックします。

  2. [反転表示されたテーブル アーティクルのプロパティを設定] または [すべてのテーブル アーティクルのプロパティを設定]をクリックします。

  3. [アーティクルのプロパティ - <アーティクル]> ダイアログ ドロップダウン リストの [プロパティ] タブの [対象オブジェクト] セクションで、[パーティションのオプション] に対して以下のいずれかの値を指定します。

    • [重複する]

    • [重複する (パーティション外のデータ変更を禁止)]

    • [重複しない (単一のサブスクリプション)]

    • [重複しない (複数のサブスクリプションで共有)]

    これらのオプションの詳細、および [フィルターの追加] および [フィルターの編集] ダイアログ ボックスで使用できるオプションとこれらのオプションを関連付ける方法の詳細については、「 パラメーター化された行フィルター」の「[パーティションのオプション] の設定」を参照してください。

  4. [OK] を選択します。

  5. [パブリケーションのプロパティ - <パブリケーション]> ダイアログ ボックスが表示されている場合は、[OK] をクリックして保存し、ダイアログ ボックスを閉じます。

[パーティションの事前計算] を設定するには

  1. [パブリケーションのプロパティ - <パブリケーション]> ダイアログ ドロップダウン リストの [サブスクリプション オプション] ページで、[パーティションの事前計算] オプションに対する値を選択します。 このプロパティは、以下の場合に読み取り専用になります。

    • パブリケーションが、事前計算済みパーティションの要件を満たさない場合。

    • スナップショットが、パブリケーションに対して生成されていない場合。 この場合、 [スナップショットの作成時に自動的に設定する]の値が表示されます。

  2. [OK] を選択します。

[同期の最適化] を設定するには

  1. [パブリケーションのプロパティ - <パブリケーション]> ダイアログ ドロップダウン リストの [サブスクリプション オプション] ページで、[同期の最適化] オプションに対して True の値を選択します。

  2. [OK] を選択します。

Transact-SQL の使用

@keep_partition_changes@use_partition_groups のフィルター オプションの定義については「sp_addmergepublication」を参照してください。

新しいパブリケーションを作成するときにマージ フィルターの最適化を指定するには

  1. パブリッシャー側のパブリケーション データベースに対して、 sp_addmergepublicationを実行します。 以下のパラメーターのいずれかに、@publicationtrue の値を指定します。

  2. パブリケーション用のスナップショット ジョブを追加します。 詳細については、「Publisher で文書を作成するには」を参照してください。

  3. パブリッシャー側のパブリケーション データベースに対して、 sp_addmergearticleを実行します。次のパラメーターを指定します。

    • @publication - 手順 1 で指定したパブリケーション名

    • @article - アーティクルの名前

    • @source_object - パブリッシュするデータベース オブジェクト

    • @subset_filterclause - アーティクルを行方向にフィルター選択するために使用する、オプションのパラメーター化されたフィルター句

    • @partition_options - フィルター選択されるアーティクルのパーティション オプション

  4. パブリケーションの各アーティクルに対し、手順 3. を実行します。

  5. (省略可) パブリッシャー側のパブリケーション データベースに対して sp_addmergefilter を実行し、2 つのアーティクル間に結合フィルターを定義します。 詳しくは、「 マージ アーティクル間の結合フィルターの定義および変更」をご覧ください。

既存のパブリケーションに対するマージ フィルターの動作を表示して変更するには

  1. (省略可能) パブリッシャーのパブリケーション データベースに対して、@publication を指定して sp_helpmergepublication を実行します。 結果セットの keep_partition_changesuse_partition_groups の値を確認します。

  2. (省略可) パブリッシャー側のパブリケーション データベースに対して、 sp_changemergepublicationを実行します。 @property の値に use_partition_groups を、@valuetrue または false のいずれかを指定します。

  3. (省略可) パブリッシャー側のパブリケーション データベースに対して、 sp_changemergepublicationを実行します。 @property の値に keep_partition_changes を、@valuetrue または false のいずれかを指定します。

    Note

    keep_partition_changes を有効にしている場合、まず use_partition_groups を無効にして、@force_reinit_subscription の値を 1 に指定する必要があります。

  4. (省略可) パブリッシャー側のパブリケーション データベースに対して、 sp_changemergearticleを実行します。 @property の値に partition_options を指定し、@value に適切な値を指定します。 このフィルター選択オプションの定義については、「 sp_addmergearticle 」を参照してください。

  5. (省略可) 必要に応じてスナップショット エージェントを開始し、スナップショットを再生成してください。 新しいスナップショットの生成が必要な変更の詳細については、「変更パブリケーションとアーティクルのプロパティ」 (パブリケーションおよびアーティクルのプロパティの変更) を参照してください。

参照

マージ アーティクル間の一連の結合フィルターを自動的に生成する (SQL Server Management Studio)
マージ アーティクルのパラメーター化された行フィルターの定義および変更
パラメーター化された行フィルター