none
SQL Server 2005 订阅-发布 事务性复制初始化宕机 RRS feed

  • 问题

  • 原现有AB两台服务器(8 core 32bit 2003sp2,未自动安装补丁),通过路由器直接连接连接。初始状态为SQL 2005 RTM


    公司内部网络,与B服务器连接,A服务器有外网IP

    WEB APP原运行于A服务器上,并且保存数据库T于A服务器,大小约15GB,有若干主从表,部分从表大小在1-2GB之间。

    此前配置了A服务器到B服务器的事务性复制,复制T数据库所有表格到B服务器(希望能够做一个A->B的镜像,当时配置时,T数据库大小约为6GB),使用FTP COPY文件。已经正常工作3个月。

    此前某晚,A->B的事务性复制因未知原因停止,第二天准备重新初始化,初始化A上发布时发现A服务器几乎宕机。 SQL Server CPU占用率接近100%. IIS 对请求无响应,并且IIS连接Timeout导致 Web App无法使用。远程桌面以极其缓慢的数据登录A服务器,重启服务器。删除所有事务性复制,重建,初始化过程再次宕机。

    当时预计为微软Bughttp://support.microsoft.com/kb/959013/zh-cn所致,当晚停机升级两台服务器SQL SERVER到SP4.

    重建事务性发布,初始化时,A服务器CPU占用率很低(2-3%),但是远程桌面很卡,初始化过程非常慢,IIS WebAPP所有连接都Timeout,仍然存在假死状态。5小时未完成初始化,最终选择取消。

    现在取消事务性发布,数据库直接保存在B服务器上。

    一般情况为B服务器上数据库只允许12:00至0:30以及 1:00 至4:00停机,

    A服务器只允许 0:00至4:00停机


    由于经验不足,存在以下问题,希望大牛解答:

    1.初始化事务性发布时,会引起假死以及Sql Server Timeout,是否有解决方案?如何重建事务性复制

    2.是否有其他可靠的AB服务器数据同步方案?

    3.求各种建议!

    2012年6月27日 13:08

答案

  • 一次性不要初始化太多,你是可以控制的,把 snapshot agent 停掉,手工启动,一次性不要启动太多

    初邕化的 I/O 开销特别大,我在搭建环境的时候就经常遇到,一次性创建大量同步(脚本方式),初始化的时候 CPU 基本上是持续100%,I/O也很高,初始化完成之后就没事

    对于在线使用的服务器,一次就不能初始化太多,你可以控制一下,分批建同步(或者初始化)

    2012年6月27日 23:45

全部回复

  • 1. did you check if have any blocking on the server? Checked other resource usages than cpu time? You can try restore the db on server b then set replication without snapshot.

    2. do you need access db on server b? If not, can try mirroring or log shipping.

    2012年6月27日 13:48
  • 1. the third time when I build replication, no any other app running. 

    and init without snapshot,  if any article changed, I need to restore it again manually?

    2. other internal  apps need to access db on server b(readonly).

    2012年6月27日 14:32
  • Not really, you can create objects on both servers first then add them to article.
    2012年6月27日 15:31
  • 一次性不要初始化太多,你是可以控制的,把 snapshot agent 停掉,手工启动,一次性不要启动太多

    初邕化的 I/O 开销特别大,我在搭建环境的时候就经常遇到,一次性创建大量同步(脚本方式),初始化的时候 CPU 基本上是持续100%,I/O也很高,初始化完成之后就没事

    对于在线使用的服务器,一次就不能初始化太多,你可以控制一下,分批建同步(或者初始化)

    2012年6月27日 23:45
  • 关注中   

    给我写信: QQ我:点击这里给我发消息

    2012年6月28日 11:36
  • 非常感谢,我使用SMO创建订阅-订阅

    1.发布初始化,好像是一个整体的,我可以一部分一部分snapshot么?我没有搜索到如何操作(这个方式最好)

    2.还是需要建立若干个发布?

    2012年6月29日 3:43
  • 若干个发布?应该不能吧,发布就是发布整个数据库

    给我写信: QQ我:点击这里给我发消息

    2012年6月29日 3:48
  • 我去研究下,作为整体发布时,如何逐一snapshot?
    2012年6月29日 3:53
  • 我去研究下,作为整体发布时,如何逐一snapshot?
    当然是建多个发布项喽,你就一个发布,是只有一个snapshot的。
    2012年6月29日 5:02
  • 非常感谢,我使用SMO创建订阅-订阅

    1.发布初始化,好像是一个整体的,我可以一部分一部分snapshot么?我没有搜索到如何操作(这个方式最好)

    2.还是需要建立若干个发布?


    用多个发布,不要用一个发布,一般根据,一个发布中放几张表到10几张表就够了,因为一个发布是做为一个整体的,出问题的话,这个发布里面的表都受影响,分开之后,出问题的影响范围和解决复杂试可以大大降低
    2012年6月29日 10:19
  • 感谢,下次维护的时候测试下
    2012年7月3日 5:36