SQL Server TroubleShooting With Performance Counter
2023-05-25
網站效能是現代網路應用開發中一個重要的考量因素。隨著使用者對於網站效能的期望日益提高,開發人員需要採取有效的方法來評估和優化網站的性能。我將介紹 Performance Counter 以及使用 Logman 幫助我們測量和監控網站的效能表現。
說明
Performance Counter 是一種用於監控系統性能的工具。它提供了豐富的指標和計量單位,可以用於測量各種系統和應用程序的效能表現。Performance Counter 可以監控處理器使用率、記憶體使用量、網路流量、磁碟活動和其他關鍵的系統資源。透過 Performance Counter,開發人員可以收集實時的性能數據,以了解系統在不同負載下的表現。
如果要使用 GUI 介面可以使用 Windows Run Perfmon
的方式進行管理。
使用 Command Line Interface 則是使用 logman
來 start, stop, delete 操作 performance counter。
應用範圍
資源監控:使用 Performance Counter,可以監控系統資源的使用情況,例如 CPU 利用率、記憶體使用量和網路帶寬等。這些數據能夠提供給開發人員和系統管理員有關系統效能和資源利用率的寶貴資訊。
應用程式性能評估:Performance Counter 可以用於監控應用程式的性能表現。開發人員可以收集各種指標,例如請求處理時間、資料庫查詢時間和頁面加載時間等。透過這些數據,開發人員能夠識別瓶頸和效能問題,並針對性地進行優化。
自訂計數器:除了系統提供的預設計數器之外,Performance Counter 還支援自訂計數器的建立。開發人員可以根據特定需求建立自訂的計數器,以追蹤和監控應用程式的特定指標。
實戰
實務上在使用,通常是根據所要分析的產品 (Windows Server, IIS Server, SQL Server) 來進行明確的指標蒐集。
SQL Server 通常蒐集以下資訊:
"\Memory\*"
"\Paging Files(*)\*"
"\PhysicalDisk(*)\*"
"\Process(*)\*"
"\Server\*"
"\System\*"
"\Processor(*)\*"
"\Network Interface(*)\*"
"\SQLServer:General Statistics\*"
"\SQLServer:Buffer Manager\*"
"\SQLServer:Buffer Partition(*)\*"
"\SQLServer:Buffer Node(*)\*"
"\SQLServer:Locks(*)\*"
"\SQLServer:Databases(*)\*"
"\SQLServer:Latches\*"
"\SQLServer:Access Methods\*"
"\SQLServer:SQL Errors(*)\*"
"\SQLServer:SQL Statistics\*"
"\SQLServer:Plan Cache(*)\*"
"\SQLServer:Cursor Manager by Type(*)\*"
"\SQLServer:Memory Manager\*"
"\SQLServer:Transactions\*"
"\SQLServer:Wait Statistics(*)\"
IIS Server 通常蒐集以下資訊:
"\Memory\*"
"\Paging Files(*)\*"
"\PhysicalDisk(*)\*"
"\Process(*)\*"
"\Server\*"
"\System\*"
"\Processor(*)\*"
"\Network Interface(*)\*"
"\W3SVC_W3WP(*)\*"
"\.NET CLR Memory(*)\*"
"\.NET CLR Interop(*)\*"
"\.NET CLR Exceptions(*)\*"
"\.NET CLR Loading(*)\*"
"\.NET CLR LocksAndThreads(*)\*"
"\.NET CLR Jit(*)\*"
"\.NET CLR Remoting(*)\*"
"\.NET CLR Security(*)\*"
"\.NET CLR Data(*)\*"
"\.NET CLR Networking(*)\*"
"\.NET CLR Networking 4.0.0.0(*)\*"
"\.NET Data Provider for Oracle(*)\*"
"\.NET Data Provider for SqlServer(*)\*"
"\.NET Memory Cache 4.0(*)\*"
"\Active Server Pages\*"
"\ASP.NET\*"
"\ASP.NET Applications(*)\*"
"\ASP.NET v1.1.4322\*"
"\ASP.NET Apps v1.1.4322(*)\*"
"\ASP.NET v2.0.50727\*"
"\ASP.NET Apps v2.0.50727(*)\*"
"\ASP.NET v4.0.30319\*"
"\ASP.NET Apps v4.0.30319(*)\*"
"\ASP.NET State Service\*"
"\BITS Net Utilization\*"
"\Internet Information Services Global\*"
"\Web Service(*)\*"
"\Web Service Cache\*"
"\Windows Workflow Foundation(*)\*"
"\WF (System.Workflow) 4.0.0.0(*)\*"
實務的操作上,也不會手動建立 Counter,而會使用腳本的方式搭配上述的各業務情境中要分析的產品決定指標來蒐集。
cscript ConfigPerfmonLog.vbs /config:SQLBaseLine.config /maxsize:300 /interval:10 /format:bin /output:D:\Perflogs
可以從 Windows Run Perfmon
或 Command Line Interface logman
來確認目前的 Performance Counter 是否正在蒐集。
需要注意的是蒐集期間 Log 檔案的外觀上大小不會增加,必須要停止 Performance Counter 檔案才會突然顯示實際的檔案大小。
分析 Performance Counter
如果是 SQL Server 的效能分析情境,可以搭配 WhoIsActive 的紀錄進行分析,例如在 WhoIsActive 觀察到 WaitType 有 CXPACKET 或者是 PAGEIOLATCH,可以搭配 Performance Counter 確認 System: Process Queue Length 以及確認 Physical Disk: Avg. Disk sec/Transfer 來判斷硬體的情況。
另外可以使用 Clint Huffman 所開發的 PAL 來協助分析 Performance Counter。
相關連結
SQL Server Troubleshooting 疑難排解起手式 🎮