利用typeperf工具收集SQL Server性能数据

网络整理 - 07-27

通常DBA在监控和优化SQL Server数据库DBA,都想利用命令行工具。其中经常要做的一件事情,就是收集服务器性能数据,包括CPU ,内存和磁盘利用率以及SQL Server特定数据。这时你就可以利用TypePerf.exe这个命令行工具来帮你捕获这些性能数据。

TypePerf.exe是一个命令行工具,包括把Windows操作系统的性能计数器数据输出到命令窗口或写入到支持该功能的日志文件格式中。

Windows操作系统以对象及其相关联的计数器的形式,提供了非常多的性能数据。例如, SQL Server提供了sqlserver统计对象的详细报告,包括了登录、注销、数据库连接等信息; 有些对象摆脱了计数器方式,转化为特定的实例。还是以sqlserver为例:数据库对象详细提供了每一个数据库的数据文件和事务日志文件大小,已使用事务日志的百分比,活动事务等。您可以指定一个单一的数据库或所有数据库结合在一起,作为该实例。

需要提醒的是,在SQL Server实例有个特殊的含义,即命名实例。

作为是典型的命令行工具,typeperf也有许多参数供选择,让您根据实际需要进行调整。打开一个命令提示符并输入以下命令:

typeperf -?

您会看到下面的输出:

用法:
typeperf {

| -cf <文件名>

| -q [object]

| -qx [object]

} [选项]

参数:

要监视的性能计数器。

选项:

-? 显示跟上下文相关的帮助。

-f 输出文件格式。默认值是 CSV。

-cf <文件名> 含有监视的性能计数器的文件,一个计数器一行。

-si <[[hh:]mm:]ss> 示例间的时间。默认值是 1 秒。

-o <文件名> 输出文件或 SQL 数据库的路径。默认值为 STDOUT。

-q [object] 列出已安装的计数器(无范例)。要列出某个对象的计数器,
包括对象名,如 Processor。

-qx [object] 列出已安装的计数器(带范例)。要列出某个对象的计数器,
包括对象名,如 Processor。

-sc 要收集的示例数量。默认值为,在 CTRL+C 之前都进行采样。

-config <文件名> 含有命令选项的设置文件。

-s 在计数器路径中没有指定服务器的情况下要监视的服务器。

-y 不用提示对所有问题都回答 yes。

使用typeperf的最终目标,是采用一种可重复的方式来捕捉性能数据。例如:指定您选择在一个批处理文件,执行特定操作; 默认情况下该命令执行后,性能数据将输出到命令窗口,您也可以使用- f选项指定一个CSV文件(逗号分隔值) , TSV文件(制表符分隔值)将性能数据输出到指定文件中。

使用typeperf捕捉性能数据之前,我们需要明确哪些性能对象时可用的。采用以下两个选项,您可以获得指定的机器上的性能对象列表:

-q [object] 列出已安装的计数器(无范例)。
-qx [object] 列出已安装的计数器(带范例)。
在上述两个选项中,[object]是可选的参数,如果指定了该参数,将对对象列表进行过滤。默认是显示当前机器上的性能对象,你可以用-s 来指定其他的机器。

输入以下命令可以获得SQL Server缓冲管理器对象的所有技术器列表:

TYPEPERF -q "SQLServer:Buffer Manager"

你可以看到类似以下的输出内容:

以下为引用的内容:

 \SQLServer:Buffer Manager\Buffer cache hit ratio
  \SQLServer:Buffer Manager\Page lookups/sec
  \SQLServer:Buffer Manager\Free list stalls/sec
  \SQLServer:Buffer Manager\Free pages
  \SQLServer:Buffer Manager\Total pages
  \SQLServer:Buffer Manager\Target pages
  \SQLServer:Buffer Manager\Database pages
  \SQLServer:Buffer Manager\Reserved pages
  \SQLServer:Buffer Manager\Stolen pages
  \SQLServer:Buffer Manager\Lazy writes/sec
  \SQLServer:Buffer Manager\Readahead pages/sec
  \SQLServer:Buffer Manager\Page reads/sec
  \SQLServer:Buffer Manager\Page writes/sec
  \SQLServer:Buffer Manager\Checkpoint pages/sec
  \SQLServer:Buffer Manager\AWE lookup maps/sec
  \SQLServer:Buffer Manager\AWE stolen maps/sec
  \SQLServer:Buffer Manager\AWE write maps/sec
  \SQLServer:Buffer Manager\AWE unmap calls/sec
  \SQLServer:Buffer Manager\AWE unmap pages/sec
  \SQLServer:Buffer Manager\Page life expectancy
 


输入以下命令可以获得tempdb这个数据库实例所有的计数器列表:

TYPEPERF -qx "SQLServer:Databases" | FIND "tempdb"

你可以看到类似以下的输出内容:  

以下为引用的内容:

\SQLServer:Databases(tempdb)\Data File(s) Size (KB)
  \SQLServer:Databases(tempdb)\Log File(s) Size (KB)
  \SQLServer:Databases(tempdb)\Log File(s) Used Size (KB)
  \SQLServer:Databases(tempdb)\Percent Log Used
  \SQLServer:Databases(tempdb)\Active Transactions
  \SQLServer:Databases(tempdb)\Transactions/sec
  \SQLServer:Databases(tempdb)\Repl. Pending Xacts
  \SQLServer:Databases(tempdb)\Repl. Trans. Rate
  \SQLServer:Databases(tempdb)\Log Cache Reads/sec
  \SQLServer:Databases(tempdb)\Log Cache Hit Ratio
  \SQLServer:Databases(tempdb)\Bulk Copy Rows/sec
  \SQLServer:Databases(tempdb)\Bulk Copy Throughput/sec
  \SQLServer:Databases(tempdb)\Backup/Restore Throughput/sec
  \SQLServer:Databases(tempdb)\DBCC Logical Scan Bytes/sec
  \SQLServer:Databases(tempdb)\Shrink Data Movement Bytes/sec
  \SQLServer:Databases(tempdb)\Log Flushes/sec
  \SQLServer:Databases(tempdb)\Log Bytes Flushed/sec
  \SQLServer:Databases(tempdb)\Log Flush Waits/sec