复制日志读取器和复制分发代理程序的性能统计信息工具简介

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 2892631
简介
性能统计信息添加到 mslogreader_historytable 和 msdistribution_historytable 在 Microsoft SQL Server 中的分发数据库上。您可以使用这些统计信息查看复制日志读取器和复制分发代理程序的新性能历史记录。

注意:这些变化是第一个在以下 SQL Server 生成 ︰
  • 9.00.4220
  • 9.00.3315
  • 10.00.1806
  • 10.00.2714

每隔五分钟,日志读取器和分发代理程序的性能统计数据是 recordedin 的历史记录表。默认情况下,仅过去 48 小时内的数据将保留。清理过程中删除早于 48 小时的数据。可以通过执行sp_changedistributiondb存储过程并指定history_retention参数的新值来更改默认值。

以下是日志读取器代理程序的历史记录表中性能输出的示例 ︰

<stats state="1" work="9" idle="295">  <reader fetch="8" wait="0"/>  <writer write="9" wait="0"/>  <sincelaststats elapsedtime="304" work="9" cmds="52596" cmdspersec="5753.000000">    <reader fetch="8" wait="0"/>    <writer write="9" wait="0"/>  </sincelaststats></stats> 

有三个状态事件可以记录 ︰
状态说明
1描述的读取器和编写器的正常事件线程性能。
2引发时代理读取器线程将等待超过代理-messageinterval时间发生的事件。(默认情况下,时间是 60 秒。如果您注意到记录的代理程序的状态 2 事件,这表明代理所花很长时间才能将更改写入到目标。
3引发时写入器线程等待-messageinterval时间长于只能由日志读取器代理程序生成的事件。如果您注意到记录日志读取器代理程序的状态 3 事件,这表明代理所花很长时间才能扫描事务日志中的复制的更改。
分发代理程序读取器线程
以下性能统计数据展示了处于滞后时间和瓶颈是分发代理程序读取器线程中的复制拓扑的情况。此线程查询分发数据库 (分发服务器>.MSdistribution_history.Commentstable) 将应用于订阅服务器的命令。

<stats state="1" work="14798" idle="2035">
<reader fetch="14798" wait="193"></reader>
<writer write="12373" wait="9888"></writer>
<sincelaststats elapsedtime="424" work="415" cmds="296900" cmdspersec="713.000000">
<reader fetch="415" wait="7"></reader>
<writer write="377" wait="212"></writer>
</sincelaststats>
</stats>


"Sincelaststats"的编写器等待时间 (以秒为 212) 出现高。这是写入器线程等待读取器线程提供缓冲区写入器线程可应用于订阅服务器数据库的时间。TheDistribution 代理读取器线程执行的sp_MSget_repl_commands存储过程。

如果您发现高编写器等待时间在分发代理程序的性能统计信息,您应该调查对照数据库以及分发服务器的分发代理程序执行的性能。特别是,您应该调查sp_MSget_repl_commands存储过程的执行时间。
分发代理程序写入器线程
以下性能统计数据展示了处于滞后时间和瓶颈是分发代理程序读取器线程中的复制拓扑的情况。此线程查询分发数据库 (分发服务器>.MSdistribution_history.Comments 表) 命令将应用于订阅服务器。

注意:状态为 2,而输出是状态 1 统计的稍有不同。数据表明,该读取器线程必须等待超过分发代理程序的状态 2 状态配置-messageinterval值。默认情况下, messageinterval 的值为 60 秒。

<stats state="2" fetch="48" wait="384" cmds="1028" callstogetreplcmds="321">
<sincelaststats elapsedtime="312" fetch="47" wait="284" cmds="1028" cmdspersec="3.000000"></sincelaststats>
</stats>


如果-messageinterval值增加,可能会再次收到类似于以下内容的状态 1 统计 ︰

<stats state="1" work="1941" idle="0">
<reader fetch="717" wait="1225"></reader>
<writer write="1941" wait="134"></writer>
<sincelaststats elapsedtime="764" work="764" cmds="1170730" cmdspersec="1530.000000">
<reader fetch="258" wait="505"></reader>
<writer write="764" wait="50"></writer>
</sincelaststats>
</stats>


注意:505 秒 sincelaststats 提取等待时间会非常高。

如果您发现高读取器等待时间在分发代理程序的性能统计信息,您应该调查分发代理程序执行对订阅服务器和数据库的性能。使用事件探查器跟踪工具来调查的复制存储过程的执行性能。通常按以下方式命名的存储的过程 ︰
  • sp_MSupd_ownertablename>
  • sp_MSins_ownertablename>
  • sp_MSdel_ownertablename>
此外,要确定的瓶颈是基于硬件或基于系统,使用性能监视器来监视系统性能。例如,使用性能监视器的物理磁盘计数器。
日志读取器代理程序读取器线程
以下性能统计数据展示了处于滞后时间和瓶颈是日志读取器代理程序读取器线程中的复制拓扑的情况。日志读取器代理程序读取器线程扫描命令将传递到分发数据库的发布的数据库事务日志。

<Distribution server="">.MSlogreader_history.Comments

</Distribution>
<stats state="1" work="301" idle="0">
<reader fetch="278" wait="0"></reader>
<writer write="12" wait="288"></writer>
<sincelaststats elapsedtime="301" work="301" cmds="104500" cmdspersec="347.000000">
<reader fetch="278" wait="0"></reader>
<writer write="12" wait="288"></writer>
</sincelaststats>
</stats>


Sincelaststats 编写器等待统计的 288 秒出现高。这是写入器线程等待提供缓冲区,使该读取器线程的时间。日志读取器代理程序读取器线程执行的sp_replcmds存储过程。如果您发现高等待线程在日志读取器代理程序的性能统计信息的编写器,应调查对发布服务器和数据库的日志读取器代理程序执行的性能和再调查sp_replcmds存储过程的执行时间。

下面是每个性能统计信息的说明 ︰
统计信息状态说明
状态状态 1 ︰ 此状态指示批处理提交之后通常是性能报告。

状态 2 ︰ 读取器线程指示批阅读等待更长的时间,比值为 messageinterval 属性。

状态 3 ︰ 写入器线程指示批处理写等待时间超过messageinterval 的值。
传送的命令2 只此状态表明命令由 theDistribution 代理读取数。
callstogetreplcmds2 只此状态表明对分发代理程序的sp_MSget_repl_commands存储过程的调用数量。
工作值表示自上一次的代理启动以来工作所花费的代理的累计时间。时间不包括空闲时间。
空闲值表示该代理在等待前面的调用返回任何交易记录或事务数小于MaxTrans属性的值为自上次代理启动时调用sp_replcmds存储过程的累计时间。
读取器读取值表示读取自上次代理启动之后花费的累积时间。时间不包括空闲时间和等待的编写器。
读取器等待值表示自上次代理启动之后的累计等待的编写时间。值显示等待完成之前读取器可以重新填充数据缓冲区的使用的数据缓冲区写入器线程所用的时间。
编写器写入该值表示编写器自上次代理启动以来花费的累积时间。时间不包括空闲时间和等待的读者。

等待编写器,此值表示自上次代理启动之后的等待的读取时间。值显示等待完成之前编写器可以应用数据缓冲区填充数据缓冲区读取器线程所用的时间。
sincelaststats_elapsed_timeSincelaststats 节点显示的最后一个记录的统计事件类似的统计信息的期间的开始。默认情况下,该期间为 5 分钟。时间不包括空闲时间。值表示最后一个记录的统计事件以来所经历的时间。
sincelaststats 的工作值表示自上一次统计事件的代理所用的时间。
sincelaststats 命令值表示自上一次统计事件的命令的数量。
sincelaststats cmdspersec值表示的每秒自上一次统计事件以来执行的命令的数量。
sincelaststats\reader 提取值表示读者自上一次统计事件以来所花费的累积时间。时间不包括空闲时间和等待的编写器。
sincelaststats\reader 等待值表示自上一次统计事件以来的累计等待的编写时间。值显示等待完成之前读取器可以重新填充数据缓冲区的使用的数据缓冲区写入器线程所用的时间。
sincelaststats\writer值表示累积时间花费自上一次统计事件以来该编写器。时间不包括空闲时间和等待的读者。
sincelaststats\writer 等待值表示自上一次统计事件以来等待的读取时间。值显示等待完成之前编写器可以应用数据缓冲区填充数据缓冲区读取器线程所用的时间。
要加载 MSlogreader_history 和 MSdistribution_history 入表可方便地查询 XML 数据运行统计信息脚本
有 4 脚本示例帮助您永久表可方便地查询到提取的性能统计数据。另外,还有大约对应分发代理程序的性能统计信息的日志读取器代理程序性能统计数据的存储的过程 (即到 perf_stats_tab 表)。

若要获取脚本示例,请访问此示例单击KB2892631.zip,然后 uncompressfile KB2892631.zip,您将看到下面的四个脚本文件 ︰
  • Original version of the Perf_stats_script.sql file:perf_stats_script.sql
  • 修订后的 Usp_move_stats_to_table.sql 文件 ︰ usp_move_stats_to_table.sql
  • 修订后的 Sp_endtoend_stats.sql 文件 ︰ sp_endtoend_stats.sql
  • 另一个脚本来读取实时或从分发数据库备份的数据 ︰ Additional_Script.sql

备注:

  • Perf_stats_tab 表包含日志读取器代理程序和分发代理程序的性能统计信息。可以通过在类型独立查询统计信息分散子句或位置类型 = = 'LogRead' 子句。
  • Move_stats_to_tab 存储过程 mslogreader_history 表和 msdistribution_history 在打开游标,然后才能到 perf_stats_tab 表中提取 XML 性能统计数据,调用每个行的 move_stats_to_tab 存储过程。

警告:本文已自动翻译

属性

文章 ID:2892631 - 上次审阅时间:05/04/2016 12:12:00 - 修订版本: 2.0

  • kbsurveynew kbtshoot kbexpertiseadvanced kbmt KB2892631 KbMtzh
反馈