この記事では、SQL Server 2016 スナップショット エージェント プロセスの詳細な分析と、注意すべき点の例を説明します。エディターに従って学習してください。 SQL Server 2016 のインスタンス データ テーブルを使用して、スナップショット エージェント プロセスで発生する問題と解決策を詳細に分析し、スナップショット生成プロセスについて詳しく説明します。全内容は次のとおりです。
スナップショット エージェントの準備 テーブルやその他のオブジェクトのスキーマと初期データ ファイルを公開し、スナップショット ファイルを保存し、ディストリビューション データベースに同期情報を記録します。 スナップショット エージェントはディストリビューション サーバー上で実行されます。SQL Server 2016 バージョンでは、スナップショット エージェントの最適化がさらに強化されています。次に、スナップショットの実行プロセスについて詳しく見てみましょう。 1. スナップショットプロキシファイルスナップショットジョブを実行すると、指定したスナップショットディレクトリに4種類のファイルが生成されます。
BCP ファイル: 公開されたオブジェクトのデータ ファイル。 IDXファイル:インデックス作成スクリプトファイル PREファイル:スナップショットスクリプトファイルをコピーします。 SCH ファイル: アーキテクチャ作成スクリプト ファイル 2. デフォルトのスナップショット エージェント構成ファイル
-BcpBachSize: 各 bcp 操作コピーの最大レコード行数、デフォルトは 100,000 行です。
-HistoryVerboseLevel: スナップショット操作中に記録される履歴のサイズを指定します。 -LoginTimeout: ログインがタイムアウトになるまで待機する秒数。 デフォルト値は 15 秒です。 -QueryTimeOut: クエリがタイムアウトになるまで待機する秒数。デフォルト値は 1800 秒です 注: スナップショット エージェント - スナップショット エージェント構成ファイルを右クリックして、スナップショット エージェントを構成できます。 3. スナップショット エージェントの異なるバージョンを比較する次のテストは、2 億のレコード テーブルによって生成されたスナップショットを比較することです
1.bcp ファイル番号の比較2008R22016SP1
ここでの重要なポイント BCP ファイルについて話しましょう。スナップショットをサブスクライバに適用する際には、BCP ファイルが基本単位として使用されます。つまり、BCP ファイルがどれほど大きくても、サブスクライバに一括で送信されます。したがって、BCP ファイルが大きくなるほど、適用時間も長くなります。 BCP ファイルが大きすぎる場合、サブスクライバへの挿入が失敗する可能性があります。
上の図から、2008R2 には合計 8 つの BCP ファイルがあり、最大の BCP ファイル サイズはほぼ 1G ですが、2016 には 16 個の BCP ファイルがあることがわかります。最初の 15 個はすべてです。50M 付近のデータは比較的均一です。次に、下図の各BCPファイルのレコード比較を見てください。 2. 詳細なスナップショット生成プロセスの比較2008r22016SP1
生成されたBCPファイルレコードの比較:
2008R2: おおよその数最初の 7 ファイルの各ファイル内のレコードの数約70万件、最後の文書では1億1千万件と記録されている。 2016: 最初の 15 ファイルはそれぞれ約 700 万を記録し、最後のファイルは 780,000 を記録しました。 説明: 2008R2 の最初の 7 つのファイルに保存されるレコードのおおよその数は 700,000 です。残りのレコードは最後のファイルに保存されるため、2008R2 に適したテーブル レコードの数は約 600 万です。 2016 年の最初の 15 の各ファイルに保存されるおおよそのレコード数は 700 万件で、残りのレコードは最後のファイルに保存されます。2016 年の適切なテーブル レコードの数は約 1 億 2,000 万件です。一般的な欠点: テーブル レコードが「複製されたテーブル レコードの適切な数」を超えると、残りのデータはすべて最後の bcp ファイルに保存されます。
3. 配布の比較 配布の詳細なプロセスを見てみましょう2008R2 の配布記録プロセスから、各 BULK は bcp ファイルに基づいており、前回の bcp ファイルには 10 秒以上かかりましたが、現在のテーブルにはフィールドが 3 つしかなく、主キー以外のインデックスがないため、時間はさらに長くなります。
4. スナップショット生成プロセスレプリケーション スナップショット エージェントは、スナップショット ファイル (パブリッシュされたテーブルとデータベース オブジェクトのスキーマとデータを含む) を準備し、これらのファイルをスナップショット ファイル フォルダーに保存する実行可能ファイルです。そして、同期ジョブをディストリビューション データベースに記録します。
上の図から、スナップショット生成プロセス全体を理解することができます。
5. 構文
snapshot [ -?] -Publisher server_name[\instance_name] -Publication publication_name [-70Subscribers] [-BcpBatchSize bcp_batch_size] [-DefinitionFile def_path_and_file_name] [-Distributor server_name[\instance_name]] [-DistributorDeadlockPriority [-1|0|1] ] [-DistributorLogin distributor_login] [-DistributorPassword distributor_password] [-DistributorSecurityMode [0|1] ] [-DynamicFilterHostName dynamic_filter_host_name] [-DynamicFilterLogin dynamic_filter_login] [-DynamicSnapshotLocation dynamic_snapshot_location] [-EncryptionLevel [0|1|2]] [-FieldDelimiter field_delimiter] [-HistoryVerboseLevel [0|1|2|3] ] [-HRBcpBlocks number_of_blocks ] [-HRBcpBlockSize block_size ] [-HRBcpDynamicBlocks ] [-KeepAliveMessageInterval keep_alive_interval] [-LoginTimeOut login_time_out_seconds] [-MaxBcpThreads number_of_threads ] [-MaxNetworkOptimization [0|1]] [-Output output_path_and_file_name] [-OutputVerboseLevel [0|1|2] ] [-PacketSize packet_size] [-ProfileName profile_name] [-PublisherDB publisher_database] [-PublisherDeadlockPriority [-1|0|1] ] [-PublisherFailoverPartner server_name[\instance_name] ] [-PublisherLogin publisher_login] [-PublisherPassword publisher_password] [-PublisherSecurityMode [0|1] ] [-QueryTimeOut query_time_out_seconds] [-ReplicationType [1|2] ] [-RowDelimiter row_delimiter] [-StartQueueTimeout start_queue_timeout_seconds] [-UsePerArticleContentsView use_per_article_contents_view]
パラメータ
-?
使用可能なパラメータをすべて出力します。
-Publisher server_name[instance_name]
公開サーバーの名前。このサーバー上の Microsoft SQL Server のデフォルトのインスタンスとして、server_name を指定します。このサーバー上の server_nameinstance_nameinstance_name SQL Server の既定のインスタンスの server_name を指定します。
-出版物 Publication
出版物の名前。このパラメーターは、新しいサブスクリプションまたは再初期化されたサブスクリプションで常にスナップショットを利用できるようにパブリケーションが設定されている場合にのみ有効です。
-70Subscribers
SQL Server バージョン 7.0 を実行しているサブスクライバーがある場合は、このパラメーターを使用する必要があります。
-BcpBatchSize bcpバッチ size
一括コピー操作で送信された行の数。操作中の bcp を実行する場合、バッチ サイズは 1 つのトランザクションとしてサーバーに送信される行数であり、ディストリビューション エージェントが bcp 進行状況メッセージを記録する前に送信する必要がある行数です。 bcp out 操作を実行する場合、固定バッチ サイズ 1000 が使用されます。値 0 は、メッセージがログに記録されないことを意味します。
-DefinitionFile def_path_and_file_name
エージェント定義ファイルへのパス。エージェント定義ファイルには、エージェントのコマンド ライン パラメータが含まれています。ファイルの内容は実行可能ファイルとして解析されます。任意の文字を含むパラメータ値を指定するには、二重引用符 (") を使用します。
-Distributor server_name[instance_name]
ディストリビューション サーバー名。このサーバー SQL Server の default インスタンスの server_name を指定します。デッドロックが発生したときにスナップショット エージェントが配布サーバーに接続するための優先順位
配信サーバー上 配信サーバーでデッドロックが発生した場合、スナップショットエージェントではなくアプリケーションが優先されます 0 (デフォルト) 優先度は割り当てられません
1
ディストリビューション サーバーでデッドロックが発生した場合、スナップショット エージェントが優先されます。
distributor_login SQL Server 認証を使用してディストリビューション サーバーに接続するときに使用するログイン名。 パスワード。 SQL Server 認証を使用して配布サーバーに接続するときに使用します。-DistributorSec.urityMode [ 0| 1] 値 0 は、SQL Server 認証モードを示します。 、値 1 は Windows 認証モードを示します。
たとえば、サブセット フィルター句 rep_id = HOST_NAME() の場合、フィルター処理で HOST_NAME (Transact-SQL) の値を設定するために使用されます。プロジェクトに指定され、マージ エージェントを呼び出す前に DynamicFilterHostName プロパティが "FBJones" に設定されている場合、rep_id 列に "FBJones" が含まれる行のみがコピーされます。動的スナップショットを作成するときのフィルター内の SUSER_SNAME (Transact-SQL) の値。たとえば、プロジェクトにサブセット フィルター句 user_id = SUSER_SNAME() を指定し、SQLSnapshot オブジェクトの Run メソッドを呼び出す前に DynamicFilterLogin プロパティを "rsmith" に設定した場合、user_id 列に "rsmith" を含む行のみがプロジェクトに含まれます。スナップショット。
-DynamicSnapshotLocation
動的スナップショットが生成される場所。
-EncryptionLevel [ 0 | 1 | 2 ]
接続を確立するときにスナップショット エージェントによって使用される Secure Sockets Layer (SSL) 暗号化のレベル。EncryptionLevel 値
説明
0
SSL を使用しないことを指定します。
1
SSL の使用を指定しますが、プロキシは SSL サーバー証明書が信頼できる発行者によって署名されているかどうかを検証しません。
2
SSLを使用することを指定し、証明書を検証します。
-FieldDelimiter field_delimiter
SQL Server 一括コピー データ ファイルのフィールドの終わりをマークするために使用される文字または文字のシーケンス。デフォルト値は n
-HistoryVerboseLevel [ 1| 2| 3]
スナップショット操作中に記録される履歴のサイズを指定します。履歴ログによるパフォーマンスへの影響を最小限にするには、1 を選択します。
HistoryVerboseLevel 値
説明
0
進行状況メッセージがコンソールまたは出力ファイルに書き込まれます。ディストリビューション データベースに履歴を記録しません。
1
前の履歴メッセージを常に同じステータス (開始済み、進行中、成功など) で更新します。同じステータスを持つ以前のレコードがない場合は、新しいレコードが挿入されます。
2 (デフォルト)
レコードがアイドルメッセージや長時間実行ジョブメッセージなどの情報でない限り、新しい履歴レコードを挿入します (その場合、前のレコードが更新されます)。
3
アイドルメッセージに関連しない限り、常に新しいレコードを挿入します。
-HRBcpBlocks number_of_blocks
書き込みスレッドと読み取りスレッドの間でキューに入れられた bcp データ ブロックの数。デフォルト値は 50 です。 HRBcpBlock は Oracle リリースでのみ使用されます。
備考
このパラメータは、Oracle Publisher を通じて bcp のパフォーマンスを最適化するために使用されます。
-HRBcpBlockSizeblock_size
各 bcp データ ブロックのサイズ (KB 単位)。デフォルト値は 64 KB です。 HRBcpBlock は Oracle リリースでのみ使用されます。
備考
このパラメータは、Oracle Publisher を通じて bcp のパフォーマンスを最適化するために使用されます。
-HRBcpDynamicBlocks
各 bcp データ ブロックのサイズを動的に拡大できるかどうか。 HRBcpBlock は Oracle リリースでのみ使用されます。
備考
このパラメータは、Oracle Publisher を通じて bcp のパフォーマンスを最適化するために使用されます。
-KeepAliveMessageInterval keep_alive_interval
MSsnapshot_history テーブルに「バックエンド メッセージ待機中」を記録する前にスナップショット エージェントが待機する時間 (秒単位)。デフォルト値は 300 秒です。
-LoginTimeOut login_time_out_seconds
ログインがタイムアウトになるまで待機する秒数。 デフォルト値は 15 秒です。
-MaxBcpThreads number_of_threads
並行して実行できる一括コピー操作の数を指定します。同時スレッドと ODBC 接続の最大数は、MaxBcpThreads またはディストリビューション データベースの同期トランザクションに示される一括コピー要求の数の小さい方です。 MaxBcpThreads の値は 0 より大きい必要があり、ハードコーディングされた上限はありません。デフォルト値は 1 です。
- MaxNetworkOptimization [ 0| 1]
無関係な削除操作をサブスクライバーに送信するかどうか。無関係な削除操作は、サブスクライバ パーティションに属さない行に対してサブスクライバに送信される DELETE コマンドです。無関係な削除操作はデータの整合性や収束には影響しませんが、不要なネットワーク トラフィックが発生する可能性があります。 MaxNetworkOptimization のデフォルト値は 0 です。 MaxNetworkOptimization を 1 に設定すると、無関係な削除操作が行われる可能性が最小限に抑えられるため、ネットワーク トラフィックが削減され、ネットワークの最適化が最大化されます。複数のレベルの結合フィルターと複雑なサブセット フィルターがある場合、このパラメーターを 1 に設定すると、メタデータのストレージが増加し、パブリッシャーのパフォーマンスが低下する可能性があります。レプリケーション トポロジを慎重に評価し、無関係な削除操作によって引き起こされるネットワーク トラフィックが許容できないほど高い場合にのみ、MaxNetworkOptimization を 1 に設定する必要があります。
備考
このパラメーターを 1 に設定することは、マージ パブリケーションの同期最適化オプション (sp_addmergepublication (Transact-SQL) の @keep_partition_changes パラメーター) が true に設定されている場合にのみ役立ちます。
-Output output_path_and_file_name
エージェント出力ファイルのパス。ファイル名が指定されていない場合、この出力はコンソールに送信されます。指定したファイル名がすでに存在する場合、出力はファイルに追加されます。
-OutputVerboseLevel [ 0| 1| 2]
出力で詳細なコンテンツを提供するかどうかを指定します。
OutputVerboseLevel 値
説明
0
エラーメッセージのみを出力します。
1 (デフォルト)
すべての進行状況レポートメッセージを出力します (デフォルト)。
2
すべてのエラー メッセージと進捗レポート メッセージを出力します。これはデバッグに役立ちます。
-PacketSize packet_size
SQL Server への接続時にスナップショット エージェントによって使用されるパケット サイズ (バイト単位)。デフォルト値は 8192 バイトです。
注意事項
パフォーマンスが向上することが確実でない限り、パケット サイズを変更しないでください。ほとんどのアプリケーションでは、デフォルトのパケット サイズが最適な値です。
-ProfileName profile_name
プロキシ パラメータに使用されるプロキシ プロファイルを指定します。 ProfileName が NULL の場合、エージェント プロファイルは無効になります。 ProfileName が指定されていない場合は、このエージェント タイプのデフォルトのプロファイルが使用されます。
-PublisherDB publisher_database
発行データベースの名前。 Oracle Publisher はこのパラメータをサポートしていません。
-PublisherDeadlockPriority [-1|0|1]
デッドロックが発生したときにパブリッシャーに接続するスナップショット エージェントの優先順位。このパラメータは、スナップショットの生成中にスナップショット エージェントとユーザー アプリケーションの間で発生するデッドロックの問題を解決するために指定されます。
PublisherDeadlockPriority 値
説明
-1
パブリッシャーでデッドロックが発生します。
0 (デフォルト)
優先度は割り当てられていません。
1
パブリッシャーでデッドロックが発生した場合、スナップショット エージェントが優先されます。
-PublisherFailoverPartner server_name[instance_name]
パブリケーション データベースとのデータベース ミラーリング セッションに参加する SQL Server フェールオーバー パートナー インスタンスを指定します。
-PublisherLogin publisher_login
SQL Server 認証を使用してパブリッシャーに接続するときに使用されるログイン名。
-PublisherPassword publisher_password
SQL Server 認証を使用してパブリッシャーに接続するときに使用するパスワード。 。
-PublisherSecurityMode [ 0| 1]
パブリッシャーのセキュリティ モードを指定します。値 0 は SQL Server 認証 (デフォルト) を示し、値 1 は Windows 認証モードを示します。
-QueryTimeOut query_time_out_seconds
クエリがタイムアウトになるまで待機する秒数。デフォルト値は 1800 秒です。
-ReplicationType [ 1| 2]
レプリケーションのタイプを指定します。値 1 はトランザクション レプリケーションを示し、値 2 はマージ レプリケーションを示します。
-RowDelimiter row_delimiter
SQL Server 一括コピー データ ファイルの行の終わりをマークするために使用される文字または文字のシーケンス。デフォルト値は nn です。
-StartQueueTimeout start_queue_timeout_seconds
実行中の同時動的スナップショット プロセスの数が sp_addmergepublication (Transact-SQL) の @max_concurrent_dynamic_snapshots プロパティで設定された制限に達したときに、スナップショット エージェントが待機する最大秒数。スナップショット エージェントが最大秒数を経過しても待機している場合、スナップショット エージェントは終了します。値 0 は、エージェントが無期限に待機することを意味しますが、キャンセルすることはできます。
-UsePerArticleContentsView use_per_article_contents_view
このパラメータは非推奨であり、下位互換性のためにサポートされています。
以上がSQL Server 2016 スナップショット エージェント プロセスの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。