Salesforce

Can PROMON and VST counters be reset to zero while the database is online?

« Go Back

Information

 
TitleCan PROMON and VST counters be reset to zero while the database is online?
URL NameP119202
Article Number000158681
EnvironmentProduct: OpenEdge
Version: 10.1A, 10.1B, 10.2x, 11.x. 12.x
OS: All supported platforms
Other: PROMON, VST
Question/Problem Description
Can VST counters be reset to zero while the database is online?
Can PROMON values be reset online between testing baselines?
How to zero VST statistics between online performance test baselines?
How to reset table and index usage values in _tablestat and _indexstat online?
How to reset _usertablestat and _userindexstat statistics online?
How to tell when VST statistics were last reset?
Why are negative values returned for a VST?
What to do when a negative value overflow is returned in PROMON?
Steps to Reproduce
Clarifying Information
Error Message
Defect NumberEnhancement OE00121165 / PSC00166992, OE00134976 / PSC00180699
Enhancement Number
Cause
Resolution
In versions prior to OpenEdge 10.1B, negative values are then returned due to the construction of Progress (32-Bit) and the data types for many Progress data structures which are therefore limited to the maximum number sizes for 32-bit architectures being 4 billion (unsigned). Since OpenEdge uses a signed integer for these integer values, it will be 2 billion positive and 2 billion negative. Therefore as the values increase to the maximum positive of 2 billion (2^31) the values roll-over and begin decreasing from the maximum negative values. The VST _ActBILog._BiLog-BytesWrtn for example, cycles through positive and negative values after every 2 billion.

In OpenEdge 10.1A, to combat this signed integer overflow for customers inconvenienced by having to restart the database simply to clear shared memory counters, an undocumented feature was introduced: ​zerostats can be called with either PROUTIL or DBUTIL online [OE00121165 / PSC00166992]
 
$   proutil dbname -C zerostats
$   dbutil dbname -C zerostats

After running zerostats all shared memory (PROMON and VST) counters will be will zero'd out online. Use-Cases:
  • When a database has been left running for extended periods that counters overflow to negative numbers. OpenEdge 10.1B introduced 64-bit counters, where many of these integers were subsequently changed to 64-bit (ULONG) and no longer overflow at 2-billion, which negates the need to use the zerostats utility in most cases.
  • At any other time a new VST or PROMON baseline is needed when benchmarking metrics.
The zerostats functionality was further enhanced since OpenEdge 10.1B01 and 10.1C, to include clearing _tablestat, _indexstat, _usertablestat and _userindexstat statistics [OE00134976 / PSC00180699].

Consequences of using zerostats:
  • OpenEdge Management also uses the statistics provided by the VSTs.  OEM and the VSTs assume that the statistics are sampled from database startup, therefore resetting this baseline online will lead to distorted statistics being reported by OEM or application code that relies on VST reported values.
  • Since zerostats will affect the values calculated and displayed by PROMON and VSTs, Administrators must therefore be aware when this command has been run.  One way to do so is to inspect the related database .lg file for the following message:
Usr 5 set name to Zero Vst Statistics. (7129)
Since 11.6, 12 the VST: _DbStatus-ZeroStatsDate records the Date/time of the last PROUTIL ZEROSTATS operation
Workaround
Prior to OpenEdge 10.1A, VST's can only be re-set by restarting that instance of the database.

When shutting this database is not an option, an alternative method is to monitor the needed statistics though ABL using the relevant VST tables, by taking a metric baseline and store it in a variable then subtract it from the next metric instead as long as the integer value has not over-flowed (reports as a negative value)

Example:
DEF VAR Record-BytesRead LIKE _actrecord._Record-BytesRead

FIND FIRST _ActRecord.
Record-BytesRead = _actrecord._Record-BytesRead.

/* then subtract it from the next metric */

FIND FIRST _ActRecord.
Record-BytesRead = _actrecord._Record-BytesRead - Record-BytesRead.

DISPLAY Record-BytesRead.

 
Notes
Keyword Phrase
Last Modified Date9/22/2020 2:09 PM

Powered by