首页 > Linux操作系统 > Linux操作系统 > 事务复制会话 (一)
1) 日志读取器(LogReader)的读者线程通过存储过程sp_replcmds(xp_replcmds的包装)读取事务日志,它会扫描被标记为复制事务的日志,跳过非复制的事务。
2) 日志读取器的写者线程使用sp_MSadd_replcmds,将排队事务从读者线程写到分发数据库。
3) 分发的读者线程执行sp_MSget_repl_commands,从分发数据库获得未处理的命令并存储到内部队列。
4) 分发的写者线程通过以sp_MSupd、sp_MSins、sp_MSdel开头的几个参数化的存储过程,将行的变更应用到订阅方的每个项目,从而将队列中的命令写到订阅服务器。
5) 日志读取器和分发服务器也会执行一个“历史”线程,将总结数据写到分发数据库的系统表MSlogreader_history和MSdistribution_history中。
1. 性能故障排除工具
2. 日志读取器读者线程延迟
3. 日志读取器写者线程延迟
4. 分发代理读者线程延迟
5. 分发代理写者线程延迟
一、性能故障排除工具
SQL Server事件探查器(SQL Profiler):查看事务复制会话的信息有多种方法。与所有连接到SQL Server的应用程序一样,复制组件执行的每条命令都可以被事件探查器跟踪抓取。跟踪信息可以被存储或查询,从而找到运行时间较长的语句。
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE跟踪信息中的“应用名称”举例:复制存储过程调用举例:
活动监视器(Activity Monitor):SQL Server Management Studio活动监视器、SQL 2005的性能仪表盘(Performance Dashboard)、SQL 2008的性能数据仓库(Performance Database Warehouse)、以及系统存储过程,可以帮助查找阻塞、磁盘瓶颈和导致高IO和高CPU的语句。为了识别复制组件,我们可以查找日志读取器或分发代理作业连接到SQL Server的程序名。查找复制作业的列表,可运行下面的语句:
SELECT name, description, enabled from MSDB..sysjobs
WHERE category_id>10 and category_id<20
跟踪令牌(Tracer Tokens):使用复制监视器中的跟踪令牌功能,可以得到复制性能的概览。该功能提供了“发布服务器到分发服务器”以及“分发服务器到订阅服务器”的等待时间值。要使用该功能,开启复制监视器。在My Publishers表中,选择想要测试的发布。在右边的面板,选择Tracer Tokens标签,并点击“Insert Tracer Token”按钮。下面将会出现一个订阅方列表,可获得“发布服务器到分发服务器”和“分发服务器到订阅服务器”的值。
该方法仅对实时复制有用。如果拓扑是晚3天的,那将不会看到跟踪令牌按时到订阅方,所以,你只能看到日志读取器在时间上是否落后。这其实还是很有用的信息,尤其是在当订阅方只晚了五分钟,你可以看到令牌全程传递的情况。
如果看到“发布服务器到分发服务器”的时间很长,就要集中于日志读取器性能的问题排除。如果日志读取器性能很好,但“分发服务器到订阅服务器”的值很大,那么说明,事务从被发布数据库的事务日志到分发数据库的过程很快,但是从分发数据库到订阅数据库很慢。分发代理应当作为瓶颈调查的关键。
下面的链接提供了估计延迟时间的示例代码:
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE性能监视器(Performance Monitor):我们也可以使用Windows性能监视器来跟踪复制日志读取器的 “LogReader:Delivery Latency” 计数器或者复制分发的“Dist:Delivery Latency”计数器。不过,Windows性能监视器的复制计数器值仅在日志读取器或分发代理完成一个过程阶段并记录了性能状态之后才会更新。所以即使有一个包含上百万行的事务在处理,计数器的值也将显示为0 commands/sec及0 transactions/sec。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25175503/viewspace-705405/ ,如需转载,请注明出处,否则将追究法律责任。