如何查看distirbution agent的执行进度
来源:互联网 发布:我是淘宝卖家怎么收钱 编辑:程序博客网 时间:2024/05/19 05:29
在transactional replication troubleshooting的过程中,经常会遇到下面的场景:
客户在发布端执行了一个几百万行的更新,结果导致性能下降。客户很想知道目前distribution agent的进度,完成的百分比,决定是等下去还是跳过这个过程。如果已经完成了90%,那么贸然停止就非常可惜了,并且rollback的操作也是要很长时间的。
下面介绍如何查看进度。
如果distribution agent已经启用了verbose log,可以通过verbose log来查看进度. Command id代表已经执行过的数量;transaction seqno表示正在进行的事务的xact_seqno。然后在distribution数据库执行selectcount(*)From distribution..msrepl_commandswith(nolock)where xact_seqno=@xact_seqno.
对比结果就可以知道进度了。
如果没有启用verbose log,就比较麻烦了,下面是具体的步骤。
- 找到相应的distribution agent名称和publisher_database_id
select*From distribution..msdistribution_agents
- 通过名称就可以找到distribution agent进行的process id.在distributor上执行下面的语句。
select hostprocessfrom sys.sysprocesseswhere 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_idfrom msarticles where destination_object=@tablename
- 在subscriber上执行下面的语句,得到subscription数据库当前当xact_seqno.(请将第一步得到的distribution name带入@distribution_agent)
select transaction_timestamp,*From MSreplication_subscriptionswhere 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_commandswith(nolock)
where publisher_database_id=@publisher_database_idand article_id=@article_id
xact_seqno>@xact_seqnogroup by xact_seqno orderby 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的执行进度
- 如何查看distirbution agent的执行进度
- 查看dd命令的执行进度
- 查看dd命令的执行进度
- 如何有效进行测试执行进度计划的制订
- 如何使用pv命令监控Linux命令的执行进度
- 如何查看sql的执行计划
- 如何查看ibatis的执行日志
- 如何查看oracle的执行计划
- 如何查看PL/SQL执行的历史
- oracle sql的执行计划如何查看
- 如何查看自己刚刚执行的SQL
- 如何查看linux的命令执行路径
- 如何查看曾经执行的SQL的执行计划
- 简介如何查看执行计划以及执行计划的准确性
- 简介如何查看执行计划以及执行计划的准确性
- 如何查看执行计划以及执行计划的准…
- 简介如何查看执行计划以及执行计划的准确性
- 敏捷开发之Scrum
- coredata 分页查询数据
- MVVM入门 - 新手倒腾一下午了
- i2c驱动难点解疑
- 带自定义菜单的微信类
- 如何查看distirbution agent的执行进度
- 倒腾(sort 排序)
- Windows MSDN上关于LDAP和活动目录的文档资料
- UVA 1301 Fishnet
- HDU 2896 AC自动机
- 怎样管理难缠的老板
- HDU2412 && POJ3342:Party at Hali-Bula(树形DP)
- 网络协议栈深入分析(五)--套接字的绑定、监听、连接和断开
- 编程之美 1.1 让cpu占用率曲线听你指挥(多核处理器)