Engine Busy Utilization

Reports the percentage of time the Adaptive Server kernel is busy executing tasks on each Adaptive Server engine (rather than time spent idle). The summary row gives the total and the average active time for all engines combined.

The values reported on the Engine Busy Utilization report may differ from the CPU usage values reported by operating system tools. When Adaptive Server has no tasks to process, it enters a loop that regularly checks for network I/O, completed disk I/Os, and tasks in the run queue.

One measurement that cannot be made from inside Adaptive Server is the percentage of time that Adaptive Server had control of the CPU versus the time the CPU was in use by the operating system. The operating system provides CPU time to Adaptive Server. sp_sysmon reports how Adaptive Server uses the time the operating system provides. You should always use sp_sysmon in conjunction with the operating system’s monitoring tools to get readings for both systems.

Check your operating system documentation for the correct commands.

To reduce the time that Adaptive Server spends checking for I/O while idle, lower the sp_configure parameter runnable process search count. This parameter specifies the number of times an Adaptive Server engine loops looking for a runnable task before yielding the CPU. However, decreasing the value for runnable process search count can increase latency, decreasing performance.

“Engine Busy Utilization” measures how busy Adaptive Server engines were during the CPU time they were given. If the engine is available to Adaptive Server for 80% of a 10-minute sample interval, and “Engine Busy Utilization” was 90%, it means that Adaptive Server was busy for 7 minutes and 12 seconds and was idle for 48 seconds.

When sp_sysmon samples the counters (by default, every 100 milliseconds), each engine indicates what it is currently doing. For example, if it is executing a task, it reports that it is "CPU Busy,"; if it is idling, it reports that it is "Idle"; if it is idling and has at least one pending asynchronous disk IO, it reports "IO Busy."

“Engine Busy Utilization” can help you decide whether there are too many or too few Adaptive Server engines. Adaptive Server high scalability is due to tunable mechanisms that avoid resource contention.

By checking sp_sysmon output for problems and tuning to alleviate contention, response time can remain high even at “Engine Busy” values in the 80 to 90% range. If values are consistently very high (more than 90%), it is likely that response time and throughput could benefit from an additional engine.

The “Engine Busy Utilization” values are averages over the sample interval, so very high averages indicate that engines may be 80% busy during part of the interval. Spinlock contention increases CPU usage, and should be checked if the server experiences high CPU utilization. In-memory table scans also increase CPU usage, which you can decrease by tuning queries appropriately.

When engine utilization is extremely high, the housekeeper wash task writes few or no pages out to disk (since it runs only during idle CPU cycles.) This means that a checkpoint finds many pages that need to be written to disk, and the checkpoint process, a large batch job, or a database dump is likely to send CPU usage to 100% for a period of time, causing a perceptible dip in response time.

If the “Engine Busy Utilization” percentages are consistently high, and you want to improve response time and throughput by adding Adaptive Server engines, check for increased resource contention in other areas after adding each engine.

In an environment where Adaptive Server is serving a large number of users, performance is usually fairly evenly distributed across engines. However, when there are more engines than tasks, you may see some engines with a large percentage of utilization, and other engines may be idle. For example:

Engine Busy Utilization          CPU Busy       I/O Busy        Idle 
------------------------         ---------       -------     -------- 
Engine 0                            68.7 %          2.5 %      28.8 % 
Engine 1                            61.9 %          3.3 %      34.8 % 
Engine 2                            67.0 %          2.4 %      30.6 % 
Engine 3                            69.0 %          3.8 %      27.2 % 
Engine 4                            60.2 %          2.7 %      37.2 % 
Engine 5                            55.7 %          3.2 %      41.1 % 
Engine 6                            53.8 %          3.2 %      43.0 % 
-----------------------           --------       --------   --------    
Summary                Total       436.3 %          21.1 %     242.6 %              
Average                              62.3 %           3.0 %      34.7 % 

In an SMP environment, tasks have soft affinity to engines. Without other activity (such as lock contention) that could cause a task to be placed in the global run cue, the task continues to run on the same engine.