Skip to Content
Dec 12, 2017 at 06:54 PM

What do @@*_busy variables mean in the new kernel mode=threaded world?


I have an old script that kept track of how busy an ASE server was using calculated deltas from the following query:

select @@system_busy, @@user_busy,  @@cpu_busy, @@idle, @@io_busy, @@pack_received, @@pack_sent, @@packet_errors, @@total_errors, @@total_read, @@total_write

This worked fine until we recently switched to ASE "kernel mode"="threaded" (ie., use OS level threads for multi-tasking within Sybase).

After the switch, the io_busy ticks went up (as a percentage of total ticks) and idle ticks went down.

Looking at sp_symon with the "kernel" option, the Kernel Utilization -> Engine Utilization section also shows most time being spent in I/O (and not much idle). For example 93% I/O busy and 2% idle. sp_monitor gives similar numbers. But I know my ASE server isn't that busy.

Looking farther down in sp_sysmon output, I see the Thread Utilization section. Here, things look more reasonable. For example, in the syb_default_pool, I see 81% idle, 18% User Busy, 1% System Busy. Similar numbers in the syb_system_pool threads.

What's the best way to extract these sort of monitoring stats from a "threaded" ASE server so I can record them in my own historical database? Sum columns from monEngine instead?

monSysLoad is interesting, but it only gives averages per engine. To get server wide stats I'd have to take averages of these averages, which is not really a meaningful thing to do.

Thanks in advance
Ben Slade
near Washington DC