从事件探查器中监控到如下语句执行时间查过 1分钟:

EXEC dbo .sp_MSdistribution_cleanup @min_distretention = 0, @max_distretention = 72

该存储过程被“ 分发清除:分发 ”作业每10 分钟调用一次,用户 从分发数据库中删除复制的事务。 停用在最大分发保持期内尚未同步的订阅。

该存储过程主要是删除 MSrepl_commands和MSrepl_transactions 两个表过期数据

查询数据库以及这两个表的数据

可以看到 MSrepl_commands的数据库的空间和数据库空间几乎一致,对其进行删除是性能瓶颈所在。

查询 MSrepl_commands表中未过期数据按照小时分组的命令数。

SELECT T.[publisher_database_id]
,datepart(mm,[entry_time]) 'month'
, datepart(dd,[entry_time]) 'day'
, datepart(hh,[entry_time]) 'hour'
,count(C.[xact_seqno]) 'count of commands'
FROM [distribution].[dbo].[MSrepl_transactions](nolock) T
JOIN [MSrepl_commands](nolock) C
ON T.[xact_seqno] = C.[xact_seqno]
GROUP BY T.[publisher_database_id]
,datepart(mm,[entry_time])
, datepart(dd,[entry_time])
, datepart(hh,[entry_time])
order by 1,2,3,4

从结果中看出,定义每次删除 50万数据能够删除有一个小时内的数据,而且可以防止有激增数据情况。


解决方案:

1、删除MSrepl_commands 表的存储过程是 sp_MSdelete_publisherdb_trans,删除msrepl_transaction 表的存储过程是 sp_MSdelete_dodelete

分别修改两个存储过程中删除两张表的语句:

DELETE TOP(2000) MSrepl_commands 改为DELETE TOP(500000) MSrepl_commands,两处;delete TOP(5000) MSrepl_transactions 改为delete TOP(500000) MSrepl_transactions两处

2、即使每次删除的数据量很大,但 10分钟执行的频度还是太高,调整为 1小时执行一次。

3、总体上每小时的记录数还是很多,所以需要一次减少保留的时间。根据需求,我改为了 36小时

编辑步骤,将 72改成36

4、第一次建议手工执行删除,并收缩表空间

执行 EXEC dbo .sp_MSdistribution_cleanup @min_distretention = 0, @max_distretention = 36

执行DBCC SHRINKDATABASE ( '数据库' )收缩数据库,收缩后,数据库大小减小为原来一半

建议将replicate的恢复模式改为简单,并且开启自动收缩功能。

distribution数据库过大问题的更多相关文章

  1. SQL Server删除distribution数据库

    在数据库服务器删除复制(发布订阅)后,如何删除掉数据库distribution呢?如果你通过SSMS工具去删除数据库distribution,你会发现根本没有删除选项. 下面介绍一下删除distrib ...

  2. SQL Server删除distribution数据库二

    以前总结过一遍博文SQL Server删除distribution数据库,里面介绍了如何删除distribution数据库.今天介绍一个删除distribution的特殊案例, 在这之前,我不知道这个 ...

  3. 【查阅】教你使用SQL SERVER复制

    关键词:复制,复制总结,复制汇总,复制查阅 1.概念与搭建 Step1:SQL SERVER复制介绍 Step2:SQL Server 复制事务发布 Step3:SQL Server 通过备份文件初始 ...

  4. distribution 分发数据库 灾难恢复 备份恢复

    参考: http://www.sqlservercentral.com/articles/Replication/117265/ 前提:     准备一台电脑,主机名和以前的分发数据库一致.并且安装s ...

  5. 镜像切换Logreader Agent报错:分发数据库中可能存在不一致的状态(续)

    报错: 分发数据库中可能存在不一致的状态: dist_backup_lsn {00000030:000001ba:0004},dist_last_lsn {00000030:000001cd:0004 ...

  6. Distribution1:Distribution Reader

    在transactional replication中,在publication中执行了一个更新,例如:update table set col=? Where ?,如果table中含有大量的数据行, ...

  7. 5、SQL Server数据库、T-SQL

    SQL Server数据库基础 一.安装SQL Server数据库 setup.exe->安装->全新SQL Server独立安装或向现有安装添加功能->输入序列号->下一步- ...

  8. 教你管理SQL数据库系列(1-4)

    原文 教你管理 SQL Server 数据库(1)数据库的结构  http://bbs.51cto.com/thread-1084951-1.html教你管理 SQL Server 数据库(2)系统数 ...

  9. SQL Server性能调优——报表数据库与业务数据库分离

    前段时间把公司的主数据库切了,分成业务库和报表库,业务库向报表库进行实时的Replication.这个项目的上线提升了系统的性能和可维护性,现在把设计时的考量和所做的工作重新回顾一下,作为备忘. 项目 ...

随机推荐

  1. Extjs tree的相关方法及配置项

    Ext.tree.TreePanel       主要配置项:             root:树的根节点.             rootVisible:是否显示根节点,默认为true.     ...

  2. How to crack gbooks

    Damn cnblogs, no auto saving set by default, even worse than csdn, can't believe it, lost half an ho ...

  3. Nginx+Lua 积累

    1.解析16进制编码的中文参数 local encodeStr = "%E6%B0%94" local decodeStr = ""; , #encodeStr ...

  4. 【BZOJ】3239: Discrete Logging

    http://www.lydsy.com/JudgeOnline/problem.php?id=3239 题意:原题很清楚了= = #include <bits/stdc++.h> usi ...

  5. Bootstrap整合ASP.NET MVC验证、jquery.validate.unobtrusive

    没什么好讲的,上代码: (function ($) { var defaultOptions = { validClass: 'has-success', errorClass: 'has-error ...

  6. 运行java的class文件方法详解

    一.运行class文件 执行带main方法的class文件,命令行为:java <CLASS文件名>注意:CLASS文件名不要带文件后缀.class 例如: 复制代码代码如下: java ...

  7. ng-repeat 指令

    <!--索引属性:$index,$first,$middle,$last--> <!--样式属性:ng-class-even,ng-class-odd--> <tr ng ...

  8. jquery插件jquery.LightBox.js之点击放大图片并左右点击切换图片(仿相册插件)

    该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 此插件旨在实现目前较为流行的点击放大图片并左右点击切换图片的效果,您可以根据自己的实 ...

  9. HashMap封装的数据用循环快速添加进list中产生的数据集全部相同的问题

    一.问题概述 在一次使用SimpleAdapter时,Data需要使用传入一条数据(Image.Text),该数据条使用HashMap封装.在用HashMap封装的数据用循环快速添加进list中产生了 ...

  10. 打造移动终端的 WebApp(一):搭建一个舞台

    最近随着 Apple iOS 和 Android 平台的盛行,一个新的名词 WebApp 也逐渐火了起来,这里我也趁着热潮做一个关于 WebApp 系列的学习笔记,分享平时的一些研究以及项目中的经验, ...