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 Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











가져오기 단계는 다음과 같습니다. MDF 파일을 SQL Server의 데이터 디렉터리(일반적으로 C:\Program Files\Microsoft SQL Server\MSSQL\DATA)에 복사합니다. SSMS(SQL Server Management Studio)에서 데이터베이스를 열고 연결을 선택합니다. 추가 버튼을 클릭하고 MDF 파일을 선택합니다. 데이터베이스 이름을 확인하고 확인 버튼을 클릭합니다.

SQL Server 데이터베이스에 이미 존재하는 동일한 이름을 가진 개체의 경우 다음 단계를 수행해야 합니다. 개체 유형(테이블, 뷰, 저장 프로시저)을 확인합니다. IF NOT EXISTS를 사용하면 객체가 비어 있는 경우 생성을 건너뛸 수 있습니다. 개체에 데이터가 있는 경우 다른 이름을 사용하거나 구조를 수정하세요. 기존 개체를 삭제하려면 DROP을 사용하세요. 주의하세요. 백업을 권장합니다. 삭제되거나 이름이 바뀐 개체에 대한 참조가 없는지 확인하려면 스키마 변경 사항을 확인하세요.

SQL Server 서비스가 시작되지 않는 경우 해결해야 할 몇 가지 단계는 다음과 같습니다. 오류 로그를 확인하여 근본 원인을 확인합니다. 서비스 계정에 서비스를 시작할 수 있는 권한이 있는지 확인하세요. 종속성 서비스가 실행 중인지 확인하세요. 바이러스 백신 소프트웨어를 비활성화합니다. SQL Server 설치를 복구합니다. 복구가 작동하지 않으면 SQL Server를 다시 설치하십시오.

SQL Server 포트 번호를 보려면 SSMS를 열고 서버에 연결합니다. 개체 탐색기에서 서버 이름을 찾아 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다. 연결 탭에서 TCP 포트 필드를 확인하세요.

실수로 SQL Server 데이터베이스를 삭제한 경우 다음 단계를 수행하여 복구할 수 있습니다. 데이터베이스 활동 중지, 데이터베이스 로그 확인, 백업에서 복원, DBCC CHECKDB 사용 파티 도구. 데이터 손실을 방지하려면 데이터베이스를 정기적으로 백업하고 트랜잭션 로깅을 활성화하십시오.

SQL Server 설치가 실패하면 다음 단계에 따라 정리할 수 있습니다. SQL Server 제거 레지스트리 키 삭제 파일 및 폴더 삭제 컴퓨터를 다시 시작합니다.

다음 단계에 따라 SQL Server 영어 설치를 중국어로 변경할 수 있습니다. SQL Server 서비스를 중지하고, 인스턴스 언어를 변경하고, 응용 프로그램을 다시 시작합니다.

불완전한 삭제로 인해 SQL Server를 다시 설치할 수 없는 문제는 다음 단계를 통해 해결할 수 있습니다. 파일 및 레지스트리 항목을 수동으로 삭제하고, SQL Server 설치 및 제거 도구를 사용하고, Windows 이벤트 뷰어를 확인하고, 컴퓨터를 다시 시작합니다. ; SQL Server를 다시 설치합니다.
