如何查看distirbution agent的执行进度
在transactional replication troubleshooting的过程中,经常会遇到下面的场景:
客户在发布端执行了一个几百万行的更新,结果导致性能下降。 客户很想知道目前distribution agent的进度,完成的百分比,决定是等下去还是跳过这个过程。如果已经完成了90%,那么贸然停止就非常可惜了,并且rollback的操作也是要很长时间的。
下面介绍如何查看进度。
如果distribution agent已经启用了verbose log,可以通过verbose log来查看进度. Command id代表已经执行过的数量;transaction seqno表示正在进行的事务的xact_seqno。 然后在distribution数据库执行select count(*) From distribution..msrepl_commands with(nolock) where xact_seqno=@xact_seqno.
对比结果就可以知道进度了。

如果没有启用verbose log,就比较麻烦了,下面是具体的步骤。
- 找到相应的distribution agent 名称和publisher_database_id
select *From distribution..msdistribution_agents

- 通过名称就可以找到distribution agent进行的process id. 在distributor上执行下面的语句。
select hostprocess from sys.sysprocesses where program_name=@mergeAgentName
- 同一个distribution agent进程的process id是相同的,所以可以通过这个process id(对应trace里的client process id),使用sql server trace得到distribution agent正在subscriber端执行的语句.
- 假设我们得到了下面这个语句exec [dbo].[sp_MSupd_dbota] default,511,4,0x02
- 根据这个存储过程,我们可以得到相应的aritlce_id。
- 在subscription database 执行sp_helptext,得到表的名称
- 在distribution数据库查询得出article_id. select article_id from msarticles where destination_object=@tablename
- 在subscriber上执行下面的语句,得到subscription数据库当前当xact_seqno. (请将第一步得到的distribution name带入@distribution_agent)
select transaction_timestamp,* From MSreplication_subscriptions where distribution_agent=@distribution_agent
- 接下来就可找到distribution agent当前正在执行的xact_seqno了. 将第一步得到的publisher_database_id,第5步得到的article_id和上一步得到的xact_seqno带入下面的查询
select xact_seqno,count(*) as number From distribution..msrepl_commands with(nolock)
where publisher_database_id=@publisher_database_id and article_id=@article_id
xact_seqno>@xact_seqno group by xact_seqno order by xact_seqno
- 顺序靠前,并且number较大的就是正在执行的事务了。 您可能会问,为什么不是第六步得到的xact_seqno的下一个呢(select min(xact_seqno)From distribution..msrepl_commands with(nolock)where publisher_database_id=@publisher_database_id and xact_seqno>@xact_seqno).
因为distribution 并不是每一个事务都单独提交的,而是根据CommitBatchSize 和CommitBatchThreshold来提交的,这样可以提高性能。 具体请参见http://www.kendalvandyke.com/2008/11/how-commitbatchsize-and.html
- 在distribution数据执行sp_browsereplcmds @xact_seqno, @xact_seqno

- 用第四步得到的语句去查找,这样就可以知道当前执行到了什么位置
如何查看distirbution agent的执行进度的更多相关文章
- 【MS SQL】查看任务执行进度
原文:[MS SQL]查看任务执行进度 备份或还原数据库时,我一般是用MS SQL工具向导来进行,由于工具向导没有显示任务执行过程的状态, 如果数据库比较大执行时间较长的话,对任务啥时候执行完成比较迷 ...
- IOS下载查看PDF文件(有下载进度)
IOS(object-c) 下载查看 PDF 其实还是蛮容易操作的.在下载前,首先要把 IOS 可以保存文件的目录给过一遍: IOS 文件保存目录 IOS 可以自定义写入的文件目录,是很有限的,只能是 ...
- 通过DeveloperApi获取spark程序执行进度及异常
在应用spark时,经常要获取任务的执行进度,可以参照jobProgressListener的设计来完成该功能. 以下代码仅供参考,欢迎交流. 效果显示: 代码: package org.apache ...
- pv命令监控Linux命令的执行进度
pv命令监控Linux命令的执行进度 http://www.techweb.com.cn/network/system/2015-12-14/2241124.shtml yum install -y ...
- Linux查看非root流程执行
Linux查看非root流程执行 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ps -U root -u root -N PID TTY TIME CMD ...
- jQuery执行进度提示窗口的实现(progressbar)
使用jQuery原生插件,先看效果: 主要是progressbar的更新进度以及“请稍等”后省略号.倒计时关闭的效果 如果执行单个任务的时间较长,会导致浏览器假死,一定要使用异步,代码结构要稍作调整. ...
- 【原创】大叔经验分享(19)spark on yarn提交任务之后执行进度总是10%
spark 2.1.1 系统中希望监控spark on yarn任务的执行进度,但是监控过程发现提交任务之后执行进度总是10%,直到执行成功或者失败,进度会突然变为100%,很神奇, 下面看spark ...
- oracle中查看sql语句的执行计划
1.在pl/sql中打开cmd命令容器 2.在cmd命令窗口中输入:explain plan for select * from t; 3.查看sql语句的执行计划:select * from tab ...
- 查看带有A-Time的执行计划
先执行 SQL> alter session set statistics_level=all; 会话已更改. 再执行SQL语句: SQL> select count(*) from tb ...
随机推荐
- 如何保证access_token长期有效
为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等,开发者在调用这些接口时,都需要传入一个相 ...
- 如何管理和记录 SSIS 各个 Task 的开始执行时间和结束时间以及 Task 中添加|删除|修改的记录数
开篇语 在这篇日志中 如何在 ETL 项目中统一管理上百个 SSIS 包的日志和包配置框架 我介绍到了包级别的日志管理框架,那么这个主要是针对包这一个层级的 Log 信息,包括包开始执行和结束时间,以 ...
- Lowest Common Ancestor of Two Nodes in a Binary Tree
Reference: http://blog.csdn.net/v_july_v/article/details/18312089 http://leetcode.com/2011/07/lowes ...
- 15个最好的PDF转word的在线转换器,将PDF文件转换成doc文件
PDF是一种文件格式,包含文本,图像,数据等,这是独立于操作系统的文件类型.它是一个开放的标准,压缩,另一方面DOC文件和矢量图形是由微软文字处理文件.该文件格式将纯文本格式转换为格式化文档.它支持几 ...
- 深入了解STL中set与hash_set,hash表基础
一,set和hash_set简介 在STL中,set是以红黑树(RB-Tree)作为底层数据结构的,hash_set是以哈希表(Hash table)作为底层数据结构的.set可以在时间复杂度为O(l ...
- IE6下的效果
1. IE6有宽度border实现透明 如果想使得边框颜色透明,在其余浏览器下比较简单,直接使用:border-color:transparent;但在IE6下这个办法不行,可以通过下面的方式实现: ...
- C# 百度语音合成
语音合成及TTS,我们尝试使用百度的语音合成技术 不过我发现 有一种缺点在于没有离线包让我有些很不舒服,可能是在线版的 原因微软语音识别技术在Windows 2000是默认集成在系统组件中 或许我们不 ...
- MVC的JsonResult用法
在Asp.net Mvc 2中由于对数据的保护,默认情况下request为post,所以在前端请求的时候则需要以post方式request action方法: public JsonResult Ge ...
- 通过js看类似C#中的回掉
我认为并行有两种形式,第一种是异步,第二种是多线程,目的都是为了实现并行,只不过异步和多线程都是手段而已 第一种异步 异步,执行完函数或方法后,不必阻塞性地等待返回值或消息,只需要向系统委托一个异步过 ...
- 【网络——Linux】——IPMI详细介绍【转】
一.IPMI含义 智能平台管理接口(IPMI:Intelligent Platform Management Interface)是一项应用于服务器管理系统设计的标准,由Intel.HP.Dell和N ...