转贴请注明出自微软BI开拓者www.windbi.com
在SQLServer2005之前,当使用事件探查器或系统监视器的时候我常处于两种境地,这使我很为难。首先,我在事件探查器里看到运行时间很长的事件并想知道它是怎样影响服务器性能的。其次,在系统监视器的服务器活动里看到长钉形状的图又想知道是什么查询或其他活动引起的。不管怎样,我都不能找到我的答案,因为没有方法去关联事件探查器的事件和系统监视器的计数活动。但在SQLServer2005中,有办法啦。
在这篇文章里,我们看看怎样去收集系统监视器和事件探查器的数据,然后关联它们以便你能正确的了解SQLServer的活动是怎样直接的影响服务器性能的,反之亦是。对于本文,假定你已经了解怎样使用系统监视器和事件探查器的基础。
用系统监视器收集数据
如果你想关联系统监视器的计数数据和SQLServer2005事件探查器跟踪事件,你必须同时捕捉两类型的数据。你可以要么先启动系统监视器要么先启动事件探查器,对于下面的例子,我将先启动系统监视器,然后启动事件探查器。
为了开始用系统监视器收集计数器性能数据,启动系统监视器,然后扩展“性能日志和警报”。如下图。这里就是你创建一个新的系统监视器日志文件的地方,该日志文件用来关联我们也将收集的事件探查器跟踪的数据。
下一步,右击“计数日志”然后选择“新建日志设置”,弹出下面的对话框。
在上面输入你想分配给你将收集的日志文件的名称。然后单击“确定”,弹出下面的对话框。
现在你可以添加任何一个你想收集的对象或计数器,并且指定你想用来收集的数据的抽样数据的时间间隔长度。当你选择“添加对象”或“添加计数器”按钮来指定你在日志文件里想捕捉的数据时,它将占用SQLServer更多的资源,所以不要冲昏头脑去试图收集每一个对象和计数器。同样适用于去选择一个样本数据收集的时间间隔。当收集数据越频繁,关联系统监视器计数器和事件探查器事件就更容易,这样做也增加SQLServer的资源开销。你也许要用不同的时间间隔去实验以找出最合适的方案。
在这个例子里,我已经选择去收集三个对象的计数器数据,且每5分钟收集一次。一旦你做完上面的两项,你可以选择去改为任何其他选项,单击“确定”。出现下面的窗口:
你创建完了计数器日志。现在,为了手动启动计数器,右击计数器日志名称然后选择“启动”。这时,计数器日志将开始收集你选择的计数器数据。
在SQLServer2005的事件探查器里收集数据
现在系统监视器正在收集数据,也该创建一个事件探查器跟踪来开始收集活动并记录它们。
为了这样做,启动事件探查器。出现如下的对话框:
在上面的对话框里,你首先要分配一个“跟踪名称”。接下来你要选择“保存文件”选项以便你收集的跟踪得以保存。现在单击“运行”,出现下面的对话框:
在这个对话框里,你选择你要捕捉的事件和数据列。在这里,我限制我收集的数据为TSQL事件:SQL:BatchCompleted和SQL:BatchStarting。当指定事件时,重要的是要同时指定事件的开始和结束时间以便你能看到在系统监视器和事件探查器数据之间的正确关联。
一旦你对事件、数据列和任何想使用的过滤条件设置好后,选择“运行”,出现下面的窗口,这是你的事件探查器数据收集标准屏幕。事件探查器事件现在正被捕捉并存储到跟踪日志里。
结束跟踪
此时,系统监视器和事件探查器都在收集数据。在你任何需要的时候收集数据。当你收集完所有你需要的数据时,结束系统监视器和事件探查器,先结束哪个都行,无所谓。
此时你有两个日志文件:一个系统监视器计数器日志和一个事件探查器跟踪日志。我也建议你同时退出系统监视器和事件探查器。这样做可以省掉稍候可能遇到的一些麻烦。
怎样关联系统监视器和事件探查器的数据
现在是最有趣的部分了。这是关联你刚刚收集的日志的数据的时候了,看看它们互相是怎么关联的。
为了关联数据,启动事件探查器并载入你刚创建的跟踪日志文件。接下来,单击“文件”然后选择“导入性能数据”。出现下面的对话框。在这里,你必须选择先前你创建的系统监视器计数器日志文件。
一旦你选择了正确的日志,单击“打开”,出现下面的对话框:
在上面的对话框里,你会看到所有你可用的计数器。你看到仅有一个计数器是你刚打开的日志里的。选择你要看与事件探查器关联事件数据的那个计数器,然后单击“确定”,出现下面的窗口:
在上面的窗口里,你会看到在事件探查器事件(最上面的对话框)和系统监视器数据图形(中间部分)之间的关联。根据你观察的事件和计数器的多少,上面的对话框可能变得很忙。你的屏幕越大,事件和计数器显示得越少,数据查看和分析起来就越容易。
你可用两种方法查看数据。第一,你可以单击图形的任何地方,此时出现红线。这显示了特定时间点的计数器活动。然后在上面部分,你会看到在接近选择的计数器数据的时间高亮显示了发生的事件。这个选项可以让你去查看特定点发生的事件。你可以查看是什么查询或其他活动在此期间运行,它是怎样影响服务器资源的。
第二,你可以单击对话框上面部分的事件探查器的任何一个事件,然后在图形里的红线将移到事件发生的特定时间。这样,你能查看一个特定的事件是怎样影响服务器资源的。
例如,在下面的图中,注意我单击了窗口顶部的duration为3364934毫秒的事件。注意红线的位置。这里,你可以看到这个特殊的事件,运行得很长,在这段时间内%Processor Time几乎是60%。
充分理解你正看到的
在你会使用这个关联窗口之后,你可以发现一些奇特之处。例如,上面的例子里,我是怎样知道这个长时间运行的查询引起了CPU运行60%这么长时间的呢?实际上,我不知道。它是一个有根据的推测。这个工具没有能力具体确定一个特定的查询使用了多少服务器资源。但你能做一些有根据的推测。在我的例子里,我用duration排序了所有事件探查器捕捉到的跟踪。做完后,我发现其中一个查询运行了3364934毫秒。其他大部分查询都运行得不长。在图形里,我看到同一时期%CPU Utilization(CPU利用率)很高。这样我可以推断出这个特殊的查询是主要原因。特别是当我看到在这个查询执行完之后CPU利用率几乎降为0时。
你也要记住同一时刻可能运行多个查询,可能在计数器和事件之间没有同一时刻的关联,因为被测量的计数器超过你指定的时间间隔了,而事件正好发生在此时。如果你记住这些,然后用数据做一个小的实践,我想你会发现此关联可能性是真正很有用的。最后到现在为止,我能相当容易的找到是什么查询引起了服务器的压力。
在SQLServer2005之前,当使用事件探查器或系统监视器的时候我常处于两种境地,这使我很为难。首先,我在事件探查器里看到运行时间很长的事件并想知道它是怎样影响服务器性能的。其次,在系统监视器的服务器活动里看到长钉形状的图又想知道是什么查询或其他活动引起的。不管怎样,我都不能找到我的答案,因为没有方法去关联事件探查器的事件和系统监视器的计数活动。但在SQLServer2005中,有办法啦。
在这篇文章里,我们看看怎样去收集系统监视器和事件探查器的数据,然后关联它们以便你能正确的了解SQLServer的活动是怎样直接的影响服务器性能的,反之亦是。对于本文,假定你已经了解怎样使用系统监视器和事件探查器的基础。
用系统监视器收集数据
如果你想关联系统监视器的计数数据和SQLServer2005事件探查器跟踪事件,你必须同时捕捉两类型的数据。你可以要么先启动系统监视器要么先启动事件探查器,对于下面的例子,我将先启动系统监视器,然后启动事件探查器。
为了开始用系统监视器收集计数器性能数据,启动系统监视器,然后扩展“性能日志和警报”。如下图。这里就是你创建一个新的系统监视器日志文件的地方,该日志文件用来关联我们也将收集的事件探查器跟踪的数据。
下一步,右击“计数日志”然后选择“新建日志设置”,弹出下面的对话框。
在上面输入你想分配给你将收集的日志文件的名称。然后单击“确定”,弹出下面的对话框。
现在你可以添加任何一个你想收集的对象或计数器,并且指定你想用来收集的数据的抽样数据的时间间隔长度。当你选择“添加对象”或“添加计数器”按钮来指定你在日志文件里想捕捉的数据时,它将占用SQLServer更多的资源,所以不要冲昏头脑去试图收集每一个对象和计数器。同样适用于去选择一个样本数据收集的时间间隔。当收集数据越频繁,关联系统监视器计数器和事件探查器事件就更容易,这样做也增加SQLServer的资源开销。你也许要用不同的时间间隔去实验以找出最合适的方案。
在这个例子里,我已经选择去收集三个对象的计数器数据,且每5分钟收集一次。一旦你做完上面的两项,你可以选择去改为任何其他选项,单击“确定”。出现下面的窗口:
你创建完了计数器日志。现在,为了手动启动计数器,右击计数器日志名称然后选择“启动”。这时,计数器日志将开始收集你选择的计数器数据。
在SQLServer2005的事件探查器里收集数据
现在系统监视器正在收集数据,也该创建一个事件探查器跟踪来开始收集活动并记录它们。
为了这样做,启动事件探查器。出现如下的对话框:
在上面的对话框里,你首先要分配一个“跟踪名称”。接下来你要选择“保存文件”选项以便你收集的跟踪得以保存。现在单击“运行”,出现下面的对话框:
在这个对话框里,你选择你要捕捉的事件和数据列。在这里,我限制我收集的数据为TSQL事件:SQL:BatchCompleted和SQL:BatchStarting。当指定事件时,重要的是要同时指定事件的开始和结束时间以便你能看到在系统监视器和事件探查器数据之间的正确关联。
一旦你对事件、数据列和任何想使用的过滤条件设置好后,选择“运行”,出现下面的窗口,这是你的事件探查器数据收集标准屏幕。事件探查器事件现在正被捕捉并存储到跟踪日志里。
结束跟踪
此时,系统监视器和事件探查器都在收集数据。在你任何需要的时候收集数据。当你收集完所有你需要的数据时,结束系统监视器和事件探查器,先结束哪个都行,无所谓。
此时你有两个日志文件:一个系统监视器计数器日志和一个事件探查器跟踪日志。我也建议你同时退出系统监视器和事件探查器。这样做可以省掉稍候可能遇到的一些麻烦。
怎样关联系统监视器和事件探查器的数据
现在是最有趣的部分了。这是关联你刚刚收集的日志的数据的时候了,看看它们互相是怎么关联的。
为了关联数据,启动事件探查器并载入你刚创建的跟踪日志文件。接下来,单击“文件”然后选择“导入性能数据”。出现下面的对话框。在这里,你必须选择先前你创建的系统监视器计数器日志文件。
一旦你选择了正确的日志,单击“打开”,出现下面的对话框:
在上面的对话框里,你会看到所有你可用的计数器。你看到仅有一个计数器是你刚打开的日志里的。选择你要看与事件探查器关联事件数据的那个计数器,然后单击“确定”,出现下面的窗口:
在上面的窗口里,你会看到在事件探查器事件(最上面的对话框)和系统监视器数据图形(中间部分)之间的关联。根据你观察的事件和计数器的多少,上面的对话框可能变得很忙。你的屏幕越大,事件和计数器显示得越少,数据查看和分析起来就越容易。
你可用两种方法查看数据。第一,你可以单击图形的任何地方,此时出现红线。这显示了特定时间点的计数器活动。然后在上面部分,你会看到在接近选择的计数器数据的时间高亮显示了发生的事件。这个选项可以让你去查看特定点发生的事件。你可以查看是什么查询或其他活动在此期间运行,它是怎样影响服务器资源的。
第二,你可以单击对话框上面部分的事件探查器的任何一个事件,然后在图形里的红线将移到事件发生的特定时间。这样,你能查看一个特定的事件是怎样影响服务器资源的。
例如,在下面的图中,注意我单击了窗口顶部的duration为3364934毫秒的事件。注意红线的位置。这里,你可以看到这个特殊的事件,运行得很长,在这段时间内%Processor Time几乎是60%。
充分理解你正看到的
在你会使用这个关联窗口之后,你可以发现一些奇特之处。例如,上面的例子里,我是怎样知道这个长时间运行的查询引起了CPU运行60%这么长时间的呢?实际上,我不知道。它是一个有根据的推测。这个工具没有能力具体确定一个特定的查询使用了多少服务器资源。但你能做一些有根据的推测。在我的例子里,我用duration排序了所有事件探查器捕捉到的跟踪。做完后,我发现其中一个查询运行了3364934毫秒。其他大部分查询都运行得不长。在图形里,我看到同一时期%CPU Utilization(CPU利用率)很高。这样我可以推断出这个特殊的查询是主要原因。特别是当我看到在这个查询执行完之后CPU利用率几乎降为0时。
你也要记住同一时刻可能运行多个查询,可能在计数器和事件之间没有同一时刻的关联,因为被测量的计数器超过你指定的时间间隔了,而事件正好发生在此时。如果你记住这些,然后用数据做一个小的实践,我想你会发现此关联可能性是真正很有用的。最后到现在为止,我能相当容易的找到是什么查询引起了服务器的压力。