有时候,分发数据库(Distribution Database)会增长得非常大,那么如何解决呢,请看Chris Skorlinski,  Microsoft SQL Server Escalation Services 的解决方案。

原文地址:How to resolve when Distribution Database is growing huge (+25gig), 本人翻译水平有限,如果有什么地方翻译不当或不对的地方,请不吝指教!

是的,我当然知道大数据库是相对的,但总体来说,如果你看到分发数据库越来越大增长到25G,这意味着清理进程很难删除复制事务,后面我将介绍如何以及为什么清理过程会这样。但是现在我想介绍一种我们经常用的技巧从分发数据清除数据行。这个解决方案包括修改SQL复制存储过程,以及增加每笔事务删除的行数,如果你对代码修改感到不舒服,直接跳到STEP 7吧。

第一篇发布出来的是“保守”的方法,接下来,我会发表一些更“激进”的解决方案。

1) 保存清理删除msrepl_commands对象的srepl_commands存储过程的原始脚本

sp_helptext  sp_MSdelete_publisherdb_trans

2) 将CREATE改为ALTER

ALTER PROCEDURE sp_MSdelete_publisherdb_trans

3)改变三处DELETE操作,从2000改为100000行

DELETE TOP(2000) MSrepl_commands . . .

4) 保存msrepl_transaction 清理存储过程sp_MSdelete_dodelete的原始代码

sp_helptext sp_MSdelete_dodelete

5)将CREATE关键字改为ALTER

ALTER PROCEDURE sp_MSdelete_dodelete

6)改变两处删除MSrepl_transactions记录的地方,将5000改为100000行。

delete TOP(5000) MSrepl_transactions . . .

7) Determine oldest day containing transactions 决定保留事物多少天

Code Snippet
  1. --(shows breakout by day, by hour.  Took 2 hours on 350million rows, 100gb distribtuion db)
  2. SELECT T.[publisher_database_id]
  3. ,  datepart(mm,[entry_time]) 'month'
  4. ,  datepart(dd,[entry_time]) 'day'
  5. ,  datepart(hh,[entry_time]) 'hour'
  6. ,  count(C.[xact_seqno]) 'count of commands'
  7. FROM [distribution].[dbo].[MSrepl_transactions](nolock) T
  8. JOIN [MSrepl_commands](nolock) C
  9. ON T.[xact_seqno] = C.[xact_seqno]
  10. GROUP BY T.[publisher_database_id]
  11. ,datepart(mm,[entry_time])
  12. , datepart(dd,[entry_time])
  13. , datepart(hh,[entry_time])
  14. order by 1,2,3,4
  15. --Or, just select oldest 10 rows and note the entry_time stamp.
  16. --(select took 5 minutes on 350million rows, 100gb distribtuion db)
  17. SELECT TOP 10 * FROM [distribution].[dbo].[MSrepl_transactions](nolock)

8)通过SSMS或TSQL作业执行清理以前的事务(24小时*5天=120),然后继续执行减少@max_distretention的执行

Code Snippet
  1. EXEC dbo.sp_MSdistribution_cleanup @min_distretention = 0, @max_distretention = 120
  2. Example output: (4 hours to removed 340million rows)
  3. Removed 3493 replicated transactions consisting of 343877158 statements in 15043 seconds (22859 rows/sec).

Hope you found this helpful,

希望这个对你有用。

Chris Skorlinski,  Microsoft SQL Server Escalation Services

[翻译]当分发数据库增长到25G时如何解决的更多相关文章

  1. ORACLE数据库在导入导出时序列不一致的问题

    ORACLE数据库在导入导出时序列不一致的问题   在使用ORACLE数据库时,当给一个表设置自增字段时,我们经常会使用到序列+触发器来完成.但当你需要对数据库进行导入导出时,序列很容易出问题. 当你 ...

  2. MySQL数据表中有自增长主键时如何插入数据

    原文链接:https://blog.csdn.net/RuobaiMEN/article/details/79794199 MySQL数据库表中有自增主键ID,当用SQL插入语句中插入语句带有ID列值 ...

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

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

  4. [R语言]R语言使用多线程对数据库进行大批量访问时出现无法连接问题

    问题描述: 在R中使用多线程对数据库进行写入,在服务器端运行脚本(linux环境),总是在第6-7万个任务线程时,出现无法连接到数据库的问题.任务中断,错误信息为task 6xxxx failed,C ...

  5. access数据库select查询top时无效的解决办法

    access数据库select查询top时有时无效,原因就是在使用Order by时,且排序的条件中数据有重复的. 比如:select top 10 * from table1 order by cd ...

  6. 把数据保存到数据库附加表 `dede_addonarticle` 时出错,请把相关信息提交给DedeCms官方。Duplicate entry

    把数据保存到数据库附加表 `dede_addonarticle` 时出错,请把相关信息提交给DedeCms官方.Duplicate entry ’3′ for key ‘PRIMARY’ 你的主键是不 ...

  7. java.sql.date与java.util.date区别以及数据库中插入带时分秒的时间

    java.sql.Date,java.sql.Time和java.sql.Timestamp三个都是java.util.Date的子类(包装类). java.sql.Date是java.util.Da ...

  8. 数据库中插入数据时发生ora-00984错误

    操作Oracle数据库,插入数据时显示:ORA-00984列在此处不允许错误,如下图所示: 出现的原因是由于,在插入字符或字符串型字段时.如果插入的数据是纯数字,则不会有错误:如果出现字符,则会报OR ...

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

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

随机推荐

  1. iOS开发——高级特性&Runtime运行时特性详解

    Runtime运行时特性详解 本文详细整理了 Cocoa 的 Runtime 系统的知识,它使得 Objective-C 如虎添翼,具备了灵活的动态特性,使这门古老的语言焕发生机.主要内容如下: 引言 ...

  2. WebGIS中一种根据网格索引判断点面关系的方法

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 判断点面关系的算法有很多,在我之前的博文中有一篇专门对其进行 ...

  3. 自定义angularjs分页控件

    继昨天写了knockoutjs+ jquery pagination+asp.net web Api 实现无刷新列表页 ,正好最近刚学习angularjs ,故琢磨着写一个angularjs版本的分页 ...

  4. OpenCV2:等间隔采样和局部均值的图像缩小

    图像的缩小从物理意义上来说,就是将图像的每个像素的大小缩小相应的倍数.但是,改变像素的物理尺寸显然不是那么容易的,从数字图像处理的角度来看,图像的缩小实际就是通过减少像素个数来实现的.显而易见的,减少 ...

  5. Java进击C#——项目开发环境

    本章简言 上一章我们了解一下开发环境,知道了什么去新建一个项目工程.却并没有去项目工程进行介绍.可是之后我们会常常跟项目工程打交道.所以这章笔者就对项程工程的常用的一些功能进行讲解.当然说全面那是不可 ...

  6. linux源码分析(四)-start_kernel-cgroup

    前置:这里使用的linux版本是4.8,x86体系. cgroup_init_early(); 聊这个函数就需要先了解cgroup. cgroup概念 这个函数就是初始化cgroup所需要的参数的.c ...

  7. 自己封装的一个LoadRes组件

    这两周一直太忙,没有好好处理上上上周遇到的一个让我加班到凌晨的问题,这个问题是判断flash的加载. 之前的思路是让flash的人在制作flash的时候,加入了一个回调方法,该方法再会回调我页面的方法 ...

  8. css3实现光标悬浮滚动菜单

    效果:http://hovertree.com/texiao/css3/21/ 本文所用到的CSS知识请点击效果展示也中第一和第二个链接. 代码: <!DOCTYPE html> < ...

  9. 基于CkEditor实现.net在线开发之路(2)编写C#代码,怎么调用它。

    上一章简约的介绍了CkEditor编辑器,可以编辑js逻辑代码,css,html,C#代码,这章我根据实际例子,讲解怎么编写C#代码和怎么调用它. 大家都还记得刚刚接触程序编时的hello Word吧 ...

  10. jQuery中eq()方法用法实例

    本文实例讲述了jQuery中eq()方法用法.分享给大家供大家参考.具体分析如下: 此方法能够获取匹配元素集上的相应位置索引的元素. 匹配元素集上元素的位置索引是从0开始的. 语法结构: 复制代码 代 ...