Tuesday, March 15, 2005

Monitoring Biztalk performance

Biztalk applications have now become matured enough and are now getting scrutinized for performance. Often this scrutinizing of results in capturing some key performance counters and you will eventually chose a set of counters to measure and run your tests. But often on later analysis you realize that you missed capturing certain key counters . So what is a good subset to be captured. The counters below offers a good start as any

Biztalk Box General

\\BTSBOX\.NET CLR Exceptions(_Global_)\*
\\BTSBOX\.NET CLR Memory(_Global_)\# Bytes in all Heaps
\\BTSBOX\.NET CLR Memory(_Global_)\# GC Handles
\\BTSBOX\.NET CLR Memory(_Global_)\# Gen 0 Collections
\\BTSBOX\.NET CLR Memory(_Global_)\# Gen 1 Collections
\\BTSBOX\.NET CLR Memory(_Global_)\# Gen 2 Collections
\\BTSBOX\.NET CLR Memory(_Global_)\# Total committed Bytes
\\BTSBOX\.NET CLR Memory(_Global_)\# Total reserved Bytes
\\BTSBOX\.NET CLR Memory(_Global_)\% Time in GC
\\BTSBOX\.NET CLR Memory(_Global_)\Allocated Bytes/sec
\\BTSBOX\.NET CLR Memory(_Global_)\Gen 0 heap size
\\BTSBOX\.NET CLR Memory(_Global_)\Gen 1 heap size
\\BTSBOX\.NET CLR Memory(_Global_)\Gen 2 heap size
\\BTSBOX\.NET CLR Memory(_Global_)\Large Object Heap size
\\BTSBOX\ASP.NET Applications(_LM_w3svc_1_ROOT_BTARNApp)\Anonymous Requests/Sec
\\BTSBOX\ASP.NET Applications(_LM_w3svc_1_ROOT_BTARNApp)\Requests In Application Queue
\\BTSBOX\ASP.NET Applications(_LM_w3svc_1_ROOT_BTARNApp)\Requests Total
\\BTSBOX\ASP.NET Applications(_LM_w3svc_1_ROOT_BTARNApp)\Requests/Sec
\\BTSBOX\BizTalk:Messaging(*)\*

Memory

\\BTSBOX\Memory\Available MBytes
\\BTSBOX\Memory\Available MBytes
\\BTSBOX\Memory\Committed Bytes

DISK

\\BTSBOX\PhysicalDisk(_Total)\% Disk Time
\\BTSBOX\PhysicalDisk(_Total)\% Idle Time

PROCESS
\\BTSBOX\Process(BTSNTSvc#1)\Handle Count
\\BTSBOX\Process(BTSNTSvc#1)\ID Process
\\BTSBOX\Process(BTSNTSvc#1)\Private Bytes
\\BTSBOX\Process(BTSNTSvc#1)\Thread Count
\\BTSBOX\Process(BTSNTSvc#2)\Handle Count
\\BTSBOX\Process(BTSNTSvc#2)\ID Process
\\BTSBOX\Process(BTSNTSvc#2)\Private Bytes
\\BTSBOX\Process(BTSNTSvc#2)\Thread Count
\\BTSBOX\Process(BTSNTSvc#3)\Handle Count
\\BTSBOX\Process(BTSNTSvc#3)\ID Process
\\BTSBOX\Process(BTSNTSvc#3)\Private Bytes
\\BTSBOX\Process(BTSNTSvc#3)\Thread Count
\\BTSBOX\Process(BTSNTSvc#4)\ID Process
\\BTSBOX\Process(BTSNTSvc#4)\Private Bytes
\\BTSBOX\Process(BTSNTSvc#5)\ID Process
\\BTSBOX\Process(BTSNTSvc#5)\Private Bytes
\\BTSBOX\Process(BTSNTSvc)\% Processor Time
\\BTSBOX\Process(BTSNTSvc)\Handle Count
\\BTSBOX\Process(BTSNTSvc)\Handle Count
\\BTSBOX\Process(BTSNTSvc)\ID Process
\\BTSBOX\Process(BTSNTSvc)\ID Process
\\BTSBOX\Process(BTSNTSvc)\Private Bytes
\\BTSBOX\Process(BTSNTSvc)\Private Bytes
\\BTSBOX\Process(BTSNTSvc)\Thread Count
\\BTSBOX\Process(BTSNTSvc)\Virtual Bytes
\\BTSBOX\Process(w3wp#1)\Private Bytes
\\BTSBOX\Process(w3wp)\ID Process
\\BTSBOX\Process(w3wp)\Private Bytes

\\BTSBOX\Processor(_Total)\% Processor Time
\\SQLBOX\PhysicalDisk(_Total)\% Disk Time
\\SQLBOX\PhysicalDisk(_Total)\% Idle Time
\\SQLBOX\PhysicalDisk(2 D:)\% Disk Time
\\SQLBOX\PhysicalDisk(2 D:)\% Idle Time
\\SQLBOX\PhysicalDisk(2 D:)\Avg. Disk Queue Length
\\SQLBOX\PhysicalDisk(2 D:)\Disk Read Bytes/sec
\\SQLBOX\PhysicalDisk(2 D:)\Disk Write Bytes/sec
\\SQLBOX\Processor(_Total)\% Processor Time


\\SQLBOX\SQLServer:General Statistics\User Connections
\\SQLBOX\SQLServer:Locks(_Total)\Average Wait Time (ms)
\\SQLBOX\SQLServer:Locks(_Total)\Lock Requests/sec
\\SQLBOX\SQLServer:Locks(_Total)\Lock Timeouts/sec
\\SQLBOX\SQLServer:Locks(_Total)\Lock Wait Time (ms)
\\SQLBOX\SQLServer:Locks(_Total)\Lock Waits/sec
\\SQLBOX\SQLServer:Locks(_Total)\Number of Deadlocks/sec



I am sure the list is quite extensive but will give you a good start on what to monitor or not monitor