SQLSERVER复制优化之一《改变包大小》
SQLSERVER 复制 优化 之一 《 改变 包 大小 》 自从搭了 复制 之后以为可以安枕无忧了,谁不知问题接踵而来 这次遇到的问题是 丢包 ,不知道情况的读者可以先看一下我之前写的一篇《SQLSERVER监控 复制 并使用数据库邮件功能发告警邮件》 因为机房C和机房A不
SQLSERVER复制优化之一《改变包大小》
自从搭了复制之后以为可以安枕无忧了,谁不知问题接踵而来
这次遇到的问题是丢包,不知道情况的读者可以先看一下我之前写的一篇《SQLSERVER监控复制并使用数据库邮件功能发告警邮件》
因为机房C和机房A不在一个局域网,网络状况不是太好
分发积压的命令经常处于20W+条,复制并没有报错,每次传递的事务都是少于30个,正常来讲SQLSERVER默认每次会传输100个事务
后来测试了一下网络情况
从分发服务器ping一下订阅服务器,ping 4096Byte大小的包,ping100次,因为分发默认传输的包大小是4096Byte,中间偶尔会超时
ping 订阅服务器ip <span>-</span>l <span>4096</span> <span>-</span>n <span>100</span>
参数l是指包的大小, 参数n是指ping的次数,不加 -l 参数的话默认ping的包大小为32Byte
100个包有21个丢包
ping 订阅服务器ip <span>-</span>l <span>1024</span> <span>-</span>n <span>100</span>
100个包有5个丢包
后来又继续ping 512Byte 、256Byte、128Byte大小的包,发现越小的包,丢包率就越低
从当前的网络测试情况来看,需要调整一下分发代理的包大小,在分发代理配置文件里有一个参数 -PacketSize packet_size
这个参数是设置分发代理发送到订阅服务器的包大小的。
环境:发布和分发都在同一台机器
设置
我们将分发代理的包大小设置1024Byte,那么怎么设置呢?
有两种方法:
方法一:修改分发agent 的作业
(1)打开分发代理作业
(2)转到步骤
(3)双击“运行代理”,然后添加参数 -PacketSize 1024 ,点击确定,退出作业属性
(4)停止分发代理作业
(5)开始分发代理作业
这样设置过后,分发代理就会以新的参数运行
但是代理配置文件是看不出来当前分发代理的运行参数的,还是显示4096Byte
方法二:新建一个代理配置文件,然后直接修改参数
(1)默认的代理配置文件是修改不了的
(2)新建一个代理配置文件
(3)选择默认代理配置文件(新代理的默认值)
(4)输入配置文件名:testprofile,把“仅显示此配置文件的参数”的勾去掉,修改-PacketSize参数为1024,然后点击确定
(5)勾选testprofile,然后点击确定
(6)跟分发作业一样,点击“停止分发代理”,然后点击“启动分发代理”,使设置生效
验证
那么我怎么知道究竟当前分发代理是否使用1024Byte大小的包来传送呢?
这时候可以借助Microsoft Process Monitor 3.10这个工具
在发布端使用这个工具来监测一下
复制分发代理
复制分发代理是一个可执行文件,它能将快照(对于快照复制和事务复制)和保存在分发数据库表中的事务(对于事务复制)移动到订阅服务器上的目标表中。
若要启动分发代理,请从命令提示符下执行 distrib.exe
打开任务管理器,查看分发代理进程的进程ID(PID),然后打开Microsoft Process Monitor 3.10,设置筛选条件
使用process monitor来监控分发代理传输的包大小
看一下length,最大的包也不会超过1024,说明设置生效了
未分发命令降下来了
注意:
当你的服务器中当前多个数据库是做了复制的,一个数据库只有一个logread进程,多个数据库就对应多个logread进程
分发代理也是,一个数据库可以有多个分发代理,每个分发代理对应他们各自的进程(distrib进程)
所以一定要看清楚,你当前查看的distrib进程是不是你刚才设置的那个分发代理
总结
这篇文章只是阐述了复制的过程当中出现问题的其中一个原因,当然还有很多原因,例如 发布库的日志文件VLF太多等等。。。
在分析的时候一定要多个角度分析,不能死磕一个方面,因为复制涉及到的方面比较多
有可能是发布端的问题,有可能是分发端的问题,也有可能是订阅端的问题
感谢菠萝兄的热心帮助o(∩_∩)o
如有不对的地方,欢迎大家拍砖o(∩_∩)o

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









インポート手順は次のとおりです。 MDF ファイルを SQL Server のデータ ディレクトリ (通常は C:\Program Files\Microsoft SQL Server\MSSQL\DATA) にコピーします。 SQL Server Management Studio (SSMS) でデータベースを開き、[アタッチ] を選択します。 「追加」ボタンをクリックして、MDF ファイルを選択します。データベース名を確認し、「OK」ボタンをクリックします。

SQL Server データベースに既に存在する同じ名前のオブジェクトについては、次の手順を実行する必要があります。 オブジェクトの種類 (テーブル、ビュー、ストアド プロシージャ) を確認します。 IF NOT EXISTS を使用すると、オブジェクトが空の場合に作成をスキップできます。オブジェクトにデータがある場合は、別の名前を使用するか、構造を変更してください。既存のオブジェクトを削除するには、DROP を使用します (注意してください。バックアップを推奨します)。スキーマの変更をチェックして、削除または名前変更されたオブジェクトへの参照がないことを確認します。

SQL Server サービスの開始に失敗した場合の解決手順は次のとおりです。 エラー ログを確認して、根本原因を特定します。サービス アカウントにサービスを開始する権限があることを確認してください。依存関係サービスが実行されているかどうかを確認します。ウイルス対策ソフトウェアを無効にします。 SQL Server のインストールを修復します。修復が機能しない場合は、SQL Server を再インストールします。

SQL Server のポート番号を表示するには: SSMS を開いてサーバーに接続します。オブジェクト エクスプローラーでサーバー名を見つけ、右クリックして [プロパティ] を選択します。 「接続」タブで、「TCP ポート」フィールドを表示します。

SQL Server データベースを誤って削除した場合は、次の手順を実行して回復できます: データベース アクティビティの停止、ログ ファイルのバックアップ、データベース ログの確認、回復オプション: バックアップからの復元、トランザクション ログからの復元、DBCC CHECKDB の使用、3 番目の使用パーティーツール。データ損失を防ぐために、データベースを定期的にバックアップし、トランザクション ログを有効にしてください。

SQL Server のインストールが失敗した場合は、次の手順に従ってクリーンアップできます。 SQL Server をアンインストールする レジストリ キーを削除する ファイルとフォルダーを削除する コンピューターを再起動する

次の手順に従って、SQL Server の英語インストールを中国語に変更できます: 対応する言語パックをダウンロードする、SQL Server サービスを停止する、言語パックをインストールする、インスタンス言語を変更する、ユーザー インターフェイス言語を変更する、アプリケーションを再起動する。

削除が不完全なために SQL Server を再インストールできない問題は、次の手順に従って解決できます: ファイルとレジストリ エントリを手動で削除する; SQL Server のインストールおよびアンインストール ツールを使用する; サードパーティのアンインストール ツールを使用する; Windows イベント ビューアを確認する; を再起動するコンピューター; SQL Server を再インストールします。
