zoukankan      html  css  js  c++  java
  • sql server distribution 库数据文件过大

    原因分析

    distribution库过大原因在于MSrepl_commands,MSrepl_transactions没有进行有效清理

    解决方法一

    修改sp_MSdelete_dodelete及sp_MSdelete_publisherdb_trans两个存储过程,在删除时循环部份进行删除

    分别将DELETE TOP(2000) MSrepl_commands  和 delete TOP(5000) MSrepl_transactions 的top数量调大到合适的数量级
    ,需要注意同时要修改判断条件
    

    修改完成后,执行

    use distribution;
    EXEC dbo.sp_MSdistribution_cleanup @min_distretention = 0, @max_distretention = 72
    

    或者执行清除作业,在执行清除作业时,注意看一下历史记录,是否执行成功,执行成功后,对DB进行收缩。

    解决方法二

    distribution库已经上T,或大得删除时需要耗费大量时间时,采用此法:
    1、在复制管理器里,停止所有的log reader代理
    2、将事务分发到订阅端,可以使用以下查询未分发的命令数

    With MaxXact (ServerName, PublisherDBID, XactSeqNo)
     As (Select S.name, DA.publisher_database_id, max(H.xact_seqno)
     From distribution.dbo.MSdistribution_history H with(nolock)
     Inner Join distribution.dbo.MSdistribution_agents DA with(nolock)
     On DA.id = H.agent_id
     Inner Join master.sys.servers S with(nolock)
     On S.server_id = DA.subscriber_id
     Group By S.name, DA.publisher_database_id)
     Select MX.ServerName, MX.PublisherDBID, COUNT(*)
     As CommandsNotReplicated
     From distribution.dbo.MSrepl_commands C with(nolock)
     Right Join MaxXact MX On
     MX.XactSeqNo < C.xact_seqno And
     MX.PublisherDBID = C.publisher_database_id
     Group By MX.ServerName, MX.PublisherDBID;
    

    当剩余命令为1时,再双击任务查看未分发命令,如果为0时,执行
    3、执行 TRUNCATE TABLE distribution.dbo.MSrepl_commands
    4、然后启动log reader代理
    5、最后,执行完后,对DB进行收缩。

  • 相关阅读:
    [转载]SELinux 环境下网络服务设置,配置 Apache 、Samba、NFS
    [转载]SELinux安全系统基础
    Linux NFS服务器的安装与配置
    将可执行程序设为linux服务启动
    不关闭selinux下配置php+httpd访问KingbaseES
    [转载]SELinux安全系统基础
    解决samba和SELINUX 冲突
    [转载]在线文本编辑器的基本实现原理
    [转载]使用postgresql安装wordpress
    [转载]php连接postgreSQL数据库及其操作(php5,postgreSQL9)
  • 原文地址:https://www.cnblogs.com/littlewrong/p/15469104.html
Copyright © 2011-2022 走看看