帶 SQL Server 的性能監視器 - 多少計數器太多?
我正在使用內置的 Windows 性能監視器在通用硬體和 SQL Server 上進行一些性能分析。我一直在閱讀很多關於使用哪些性能計數器的資訊。特別是這個關於等待和隊列方法的文件很棒。
但是,它推薦了非常多的計數器,我擔心如果我有太多計數器,那麼要麼我的生產伺服器會崩潰,要麼結果會過於傾斜而無法獲得準確的讀數。
我對生成或收集這些統計數據的實際情況知之甚少——它們通常會給系統增加什麼樣的負載?我知道,答案是“這取決於”,取決於硬體和目前負載,但總的來說,我想知道是否就多少個肯定太多達成共識 - 一次 20、50、100 或更多?
編輯:如果它是相關的,我目前配置了 41 個計數器:
\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 完全打算讓您使用和收集它們。機器不必特意去生成它們,它所做的就是捕捉它們,而不是讓它們滑過,如果你選擇添加它們。我可以告訴你,我們的生產機器上有 75 個,負載沒有任何差異。
除非您每秒擷取 1000 個計數器,否則我認為您不會在伺服器上看到性能下降。我的建議:專注於你將如何使用它們。
我在 Excel 中分析我的跟踪結果,所以我總是保存為 CSV 格式,並確保我擷取的計數器少於 255 個(由於 Excel 中的列限制)。
您可能需要一些時間來確定哪些計數器對您有用,但是一旦您這樣做了,擷取額外的列對您沒有任何好處。例如,我曾經擷取所有 PhysicalDisk 計數器,直到我了解到對我最有用的是 Avg Disk Sec/Read、Avg Disk Sec/Write(用於測量延遲)和 Disk Reads/sec、Disk Writes /sec(衡量物理 IO 操作,這是我的 SAN 團隊關心的衡量標準)。
採樣間隔的類似方法。我在尋找一天或一周的趨勢嗎?在這種情況下,我只會每 3 到 5 分鐘採樣一次,因為更多時候我會嘗試刪除數據以製作可用的圖表。我是否希望在問題發生的那一刻發現問題?然後我將每 15 秒到 1 分鐘採樣一次。