我在通用硬件和SQL Server上使用内置的Windows性能监视器进行一些性能分析。 我一直在阅读很多有关使用哪个性能计数器的信息。 特别是关于等待和排队方法的这个文件是非常棒的。
然而,它推荐了很多的计数器,我担心如果我的计数器太多,那么我的生产服务器将会崩溃,或者结果太倾斜,无法获得准确的读数。
我不了解生成或收集这些统计数据的实际情况 – 他们通常将什么样的负载添加到系统中? 我知道,答案是“取决于”,硬件和当前的负载,但总的来说,我想知道是否有多less肯定是太多 – 一次20,50,100或更多的共识。
编辑:如果它是相关的,我有41个计数器当前configuration:
\Memory\Page Faults/sec \Memory\Pages/sec \PhysicalDisk(_Total)\% Disk Time \PhysicalDisk(_Total)\Avg. Disk Queue Length \PhysicalDisk(_Total)\Disk Reads/sec \PhysicalDisk(_Total)\Disk Writes/sec \Process(sqlservr)\% Privileged Time \Process(sqlservr)\% Processor Time \Process(sqlservr)\% User Time \Process(sqlservr)\Page Faults/sec \Processor(_Total)\% Processor Time \Processor(_Total)\Interrupts/sec \System\Processor Queue Length \SQLServer:Access Methods\Full Scans/sec \SQLServer:Access Methods\Index Searches/sec \SQLServer:Access Methods\Page Splits/sec \SQLServer:Buffer Manager\Buffer cache hit ratio \SQLServer:Buffer Manager\Checkpoint pages/sec \SQLServer:Buffer Manager\Lazy writes/sec \SQLServer:Buffer Manager\Page life expectancy \SQLServer:Buffer Manager\Page reads/sec \SQLServer:Buffer Manager\Page writes/sec \SQLServer:Databases(_Total)\Log Flush Wait Time \SQLServer:Databases(_Total)\Log Flush Waits/sec \SQLServer:Databases(_Total)\Transactions/sec \SQLServer:General Statistics\User Connections \SQLServer:Latches\Average Latch Wait Time (ms) \SQLServer:Latches\Latch Waits/sec \SQLServer:Locks\Average Wait Time (ms) \SQLServer:Locks(_Total)\Lock Wait Time (ms) \SQLServer:Locks(_Total)\Lock Waits/sec \SQLServer:Memory Manager\Memory Grants Pending \SQLServer:Memory Manager\Memory Grants Outstanding \SQLServer:Memory Manager\Target Server Memory (KB) \SQLServer:Memory Manager\Total Server Memory (KB) \SQLServer:Plan Cache\Cache Hit Ratio \SQLServer:SQL Statistics\SQL Compilations/sec \SQLServer:SQL Statistics\SQL Re-Compilations/sec \SQLServer:SQL Statistics\Batch Requests/sec \SQLServer:SQL Statistics\Auto-Param Attempts/sec \SQLServer:SQL Statistics\Failed Auto-Params/sec
我不能给你一个神奇的数字,但我可以告诉你,性能计数器的开销是非常低的。 这些信息已经存在,Microsoft完全打算让您使用它们并收集它们。 如果你select添加它们,那么机器不需要去生成所有的东西,而只是捕获它们,而不是让它们滑动。 我可以告诉你,我们的生产机器上有75台,没有负载差异。
除非您每秒捕获1000个计数器,否则我不会想到您会在服务器上看到性能下降。 我的build议: 关注你将如何使用它们。
我在Excel中分析我的跟踪结果,所以我总是保存为CSV格式,并确保我捕获less于255个计数器(由于Excel中的列限制)。
您可能需要一些时间来确定哪些计数器对您有用,但是一旦您这样做了,那么捕获额外的列也不会有什么好处。 例如,我曾经捕获所有的物理磁盘计数器,直到我得到最使用的是平均磁盘秒/读,平均磁盘秒/写(测量延迟)和磁盘读取/秒,磁盘写入/秒(以测量物理IO操作,这是我的SAN团队关心的措施)。
类似的采样间隔方法。 我在寻找一天或一周的趋势吗? 在这种情况下,我只会每3-5分钟进行一次采样,因为我经常会试图摆脱数据来创build一个可用的图表。 我是否在发生问题的时候发现问题? 然后我会每隔15秒到1分钟抽样。
这些可能是指向性能计数器select的SQL Server MVPbuild议的有用链接:
http://www.brentozar.com/archive/2006/12/dba-101-using-perfmon-for-sql-performance-tuning/
http://www.sql-server-performance.com/tips/sql_server_performance_monitor_coutners_p1.aspx
我更关心采样间隔比计数器的数量; 如果您正在寻找基线或趋势,则不要使用1秒; 如果您长期运行,则只需结束更多的数据即可进行平滑分析。