none
镜像数据库还原滞后 RRS feed

  • 问题

  • 我为主数据库部署了一个高性能的镜像数据库。

    通过 Mirroring Monitor中发现镜像数据库堆积了大量未重做Log 。

    查看并统计了最进几个小时Monitor记录,镜像数据库发现RestoreRate平均在 180KB/sec 左右,但是速率很不稳定,时高时低,有时甚至为0KB/sec 。

    主数据库的New Transcation Rate平均在300KB/Sec,但速率很稳定波动不大(比较符合数据库的使用状况)。

    对于镜像数据库滞后问题,我该如何诊断问题所在?

     

     

    2010年10月11日 1:55

答案

  • 首先确保网络是否稳定,一种方法可以在主数据库中一直ping着镜像服务器观察
    其次观察主体服务器和镜像服务器上的负载情况,往往这两个是造成滞后的主要原因
    • 已标记为答案 倒骑驴 2010年10月15日 0:02
    2010年10月11日 2:18
    版主
  • DB mirroring is good for db with smaller transactions, because sql replays changes on mirroed db in transaction bases. Bigger transactions, longer undo queue.
    • 已标记为答案 倒骑驴 2010年10月15日 0:02
    2010年10月12日 2:29
  • 将每次删除的记录数和延迟时间都设置大一些.
    • 已标记为答案 倒骑驴 2010年10月15日 0:02
    2010年10月12日 4:35
  • rmiao, 你是认为是整个While loop 为一个Transcation?  我为什么不能认为Loop中的每一次Delete就是Mirror可重做的Transation?

    It's not about how I or you think, it's about how sql works.


    sqlserver也不会将while loop当成一个transaction...

    每一次loop都是一个单独的事务


    有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
    • 已标记为答案 倒骑驴 2010年10月15日 0:03
    2010年10月12日 15:36
    版主
  • 差距大就只能用high performance..
    有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
    • 已标记为答案 倒骑驴 2010年10月15日 0:03
    2010年10月14日 4:37
    版主

全部回复

  • 首先确保网络是否稳定,一种方法可以在主数据库中一直ping着镜像服务器观察
    其次观察主体服务器和镜像服务器上的负载情况,往往这两个是造成滞后的主要原因
    • 已标记为答案 倒骑驴 2010年10月15日 0:02
    2010年10月11日 2:18
    版主
  • 镜像服务器的(硬件,软件)配置和principal是否一致? 镜像服务器还有其他的应用在运行吗 镜像服务器是否存在性能上的瓶颈?查看一些计数器确定一下 cpu,i/o,网络,内存等
    有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
    2010年10月11日 2:18
    版主
  • 确认网络带宽和其稳定性, 监测网络流量, 主备服务器的 I/O, CPU, Memory , 看他们是否处理正常状态
    2010年10月11日 4:17
  • 首先感谢以上各位的回复!  

    主/镜像 Server 的配置的确存在一定差距,但是影响应该不大, 目前已经可以排除网络/CPU/内存的问题,在Win performace 中看到Avg.Disk Queue Length 达到100. 在SQL Active Monotor 中DataFile I/O的响应时间也很高。看来I/O就是瓶颈。

    但是昨天重做了Mirror 时发现,起初没有异常(包括I/O),当主数据库启动了一个备份数据的存储后镜像数据库I/O出现问题,主要代码如下。

    Declare @RowCount int=100

    while( @RowCount =100)

    begin

        waitfor delay '00:00:01'

        begin tran

       delete top(100) from TABELNAME

       set  @RowCount =@@RowCount

      commit tran

    end

    为保证几张主表的数据量不会太多,每天定时执行这样的数据备份,当然该存储需要运行几个小时甚至更久。

    我怀疑是否是该操作会使SQL产生了太多Transcation,或是产生了巨大的长时间Transcation。

    该如何理解该操作对Mirror产生的影响?

    2010年10月12日 2:04
  • DB mirroring is good for db with smaller transactions, because sql replays changes on mirroed db in transaction bases. Bigger transactions, longer undo queue.
    • 已标记为答案 倒骑驴 2010年10月15日 0:02
    2010年10月12日 2:29
  • rmiao, 你是认为是整个While loop 为一个Transcation?  我为什么不能认为Loop中的每一次Delete就是Mirror可重做的Transation?

    2010年10月12日 2:53
  • 将每次删除的记录数和延迟时间都设置大一些.
    • 已标记为答案 倒骑驴 2010年10月15日 0:02
    2010年10月12日 4:35
  • 你可以考虑使用truncate表,这样产生较少的日志记录, 对于mirror影响小。

    不过要确保没有语句在产寻这张表,以防止阻塞.

     

    truncate操作是minial log, 并且不会引发触发器(是否会影响你的业务逻辑?)。

    如果因为某些原因无法使用truncate,应当将间隔时间设置的长一些


    有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
    2010年10月12日 12:05
    版主
  • rmiao, 你是认为是整个While loop 为一个Transcation?  我为什么不能认为Loop中的每一次Delete就是Mirror可重做的Transation?

    It's not about how I or you think, it's about how sql works.
    2010年10月12日 13:16
  • rmiao, 你是认为是整个While loop 为一个Transcation?  我为什么不能认为Loop中的每一次Delete就是Mirror可重做的Transation?

    It's not about how I or you think, it's about how sql works.


    sqlserver也不会将while loop当成一个transaction...

    每一次loop都是一个单独的事务


    有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
    • 已标记为答案 倒骑驴 2010年10月15日 0:03
    2010年10月12日 15:36
    版主
  • 将每次删除的记录数和延迟时间都设置大一些.

      好方法,的确有改善! 但是IO现在还是瓶颈所在,从软件(SQL)方面该改如何改善?在硬件方面该如何评估两台Server的IO性能指标差距是否适合做Mirror?
    2010年10月13日 0:09
  • Not much you can do in sql. Regarding hardware, what kind of disk servers have? How did you place dbs on disks? What's network link speed between them?  
    2010年10月13日 0:37
  • Not much you can do in sql. Regarding hardware, what kind of disk servers have? How did you place dbs on disks? What's network link speed between them?  

    principal Sever :都是固态硬盘, 逻辑分区C(RAID1) &D(RAID5)   MDF/LDF都在 D盘上

    Mirror Sever :都是普通硬盘 逻辑分区C(RAID1) &D(RAID5)&E(RAID5),MDF在D上,LDF在E盘上。 

    虽然硬盘性能差距较大,但Server压力在Mirror Server承受范围内应该还是可以做的吧。

    2010年10月14日 1:48
  • Works but slow as you can see. Keep in mind that sql will suspend mirroring if undo queue is too long.
    2010年10月14日 2:32
  • 差距大就只能用high performance..
    有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
    • 已标记为答案 倒骑驴 2010年10月15日 0:03
    2010年10月14日 4:37
    版主