Recently I thought there is a bug on the “Activity: Servers” screen in promon but the deeper investigation proves I was wrong - it’s rather a feature. Maybe I’m not the only one who made such mistake. So I decided to share my findings with community.
But first of all, a bit of theory: Activity counters are divided in two categories : copyable and non-copyable. The “copyable” activity counters are the ones that promon copies from database shared memory to one of two areas (Copy 1 and Copy 2) in promon's private memory. The values reported by promon are the difference between those two copies. The most of activity counters per database are copyable (unfortunately with a few exceptions). Activity counters per servers are copyable too - the only multi-instance counters. All activity counters per users are non-copyable - promon always reports them since user’s connection time.
Promon allows to use the set of the actions that will change one or both copies of the copyable counters:
A Activate auto repeat mode. L Load activity counters from start of session S Sample activity counters U Update activity counters Z Zero the activity counters
For example, the “U” action will update only “Copy 2” but will leave “Copy 1” unchanged. “Z” action updates both copies in promon’s memory (it’s the most “expansive” action).
No matter which Activity screen will be used to make an action, promon will copy the whole set of the copyable activity counters. In other words, you will update data on all Activity screens at once. Note that the screen display time (the one on top left corner of the promon’s screens) is not related to the timestamps of data on these screens - neither for Status fields nor for Activity fields. Real timestamps are reported on a header of the Activity screens but precision is only a minute - MM/DD/YY HH:MM to MM/DD/YY HH:MM (hrs min sec)
Activity counters per servers reported by the “Activity: Servers” screen are the difference of the counters for a particular server. But between the times when promon made “Copy 1” and “Copy2” new servers can be launched or old servers can be terminated.
When we use, for example, the “U” action and there were no newly spawned servers that re-used the numbers of the recently terminated ones (the same slots in the Server Table) then:
1. We will not see the activity of newly spawned server because promon uses data in “Copy 1” to create the list of the servers to report (even if “Copy 2” contains new servers);
2. We can see statistics of the servers that do not exist anymore because the slots in the Server Table are not cleaned when a server is terminated. The same is true for the “Status: Servers” screen:
11/16/19 Status: Servers 17:13:31 Sv Server Pend. Cur. Max. Port User No Pid Type Protocol Logins Users Users Users Num Type Threaded 0 1256 Login TCP 6 0 0 5 3000 BROK 1 1 11248 Auto TCP 1 0 1 5 3001 TSRV 1 2 0 Inactive TCP 1 0 0 5 3005 0 3 0 Inactive 0 0 0 0 0 0
Note that server 2 was terminated but the values in “Logins” and “Port Num” columns show its old data.
By the way, “Logins” is a server’s activity counter but it’s not a “copyable” activity counter. Using _Servers VST you can create statistics of “Logins” and “Logouts” per sampling interval: New “Cur Users” = Old “Cur Users” + “Logins” - “Logouts”.
By the way #2: Progress could replace the obsolete field “Protocol” on this screen by the time of server’s startup. So we can easy see which servers were the recently spawned.
By the way #3, since V12.0 the screen have two new columns. Values in the column with strange name “User Type” are:
BROK is a primary database broker (even if it’s not a login broker);
SERV are either the secondary login brokers or the servers spawned by the broker that are not threaded (-threadedServer 0)
TSRV are the servers spawned by the broker that are threaded. (-threadedServer 1)
When there is a newly spawned server that re-used a number of the recently terminated server then
3. the statistics stored in “Copy 1” and “Copy 2” belong to the different processes and their difference for this server number does not have a sense. Sometimes (not always) the data on this screen can look obviously wrong:
11/16/19 Activity: Servers 17:02:40 11/16/19 17:00 to 11/16/19 17:02 (1 min 47 sec) Total Per Min Per Sec Per Tx Messages received 16777216T 9407785T 172399477324388320.00 0.00 Messages sent 16777216T 9407785T 172399477324388320.00 0.00 Bytes received 16777216T 9407785T 172399477324388320.00 0.00 Bytes sent 16777216T 9407785T 172399477324388128.00 0.00 Records received 0 0 0.00 0.00 Records sent 16777216T 9407785T 172399477324388320.00 0.00 Queries received 16777216T 9407785T 172399477324388320.00 0.00 Time slices 16777216T 9407785T 172399477324388320.00 0.00 Activity for Server 2
If you use VSTs to get an activity by servers then you can check an unique server ID (_Server-Num + _Server-Pid + _Connect-Time) to avoid such meaningless data.
Thanks George, that was informative as always. Any idea why Activity: Servers "Records received" is always zero?
"Records received" is not always zero. Remote client can send back to its server the new or updated records:
04/07/19 Activity: Servers 13:31:11 04/07/19 13:01 to 04/07/19 13:31 (30 min 1 sec) Total Per Min Per Sec Per Tx Messages received 35018 1167 19.44 0.98 Messages sent 19284 642 10.71 0.54 Bytes received 8006985 266751 4445.86 224.10 Bytes sent 7838352 261133 4352.22 219.38 Records received 33 1 0.02 0.00 Records sent 33246 1108 18.46 0.93 Queries received 6145 205 3.41 0.17 Time slices 72850 2427 40.45 2.04 Activity for Server 6