Salesforce

Dirty Buffers value in the Promon Checkpoints screen shows as 16384P

« Go Back

Information

 
TitleDirty Buffers value in the Promon Checkpoints screen shows as 16384P
URL NameP125579
Article Number000166622
EnvironmentProduct: OpenEdge
Version: 10.0x, 10.1x, 10.2A, 10.2B, 11.0x. 11.1x
OS: All supported platforms
Other: PROMON, VST
Question/Problem Description
Dirty Buffers value in the PROMON Checkpoints screen is shown as 16384P.
Checkpoint Dirty Buffers column displays 16384P as it's value.
When this Checkpoint Dirty Buffers value reaches 16384P it remains at this value.

Example:

Ckpt                         ------ Database Writes ------
  No. Time      Len   Dirty    CPT Q    Scan   APW Q Flushes
                                                           
  562 12:19:45  118   16384P   2278     398       0       0
  561 12:12:34  127   16384P   2638     431       0       0
  560 12:05:16  124   16384P   2452     334       0       0


VST _checkpoint._checkpoint-dirty are negative values when the 16384P PROMON value is reached

Example:

_checkpoint-time  _checkpoint-dirty
12:19:45          -427504
12:12:34          -422903
12:05:16          -422220
Steps to Reproduce
Clarifying Information
Database has been online for a very long time.
There are not necessarily any performance problems at the time.
Error Message
Defect NumberDefect OE00156650 / PSC00190835
Enhancement Number
Cause
PROMON value limit is reached when the Checkpoint Dirty Buffer value is decremented often.

Although there are checks for it becoming negative, the value is unsigned and thus wraps to a large positive value. It's also a race condition.

This "large positive value" is then passed into the output formatting function which determines the suffix (P).
The function expects an 8 byte double and it is implicitly cast (by the compiler), which interprets this into a positive floating point number before passing the value to the function.

Example:

dirtyBuffers = 0xFFFF..FF unsigned,

Which is a large positive number: 18446744073709551615
This is then cast as a double and passed in to the formatting function.
The formatting function receives a floating point: 18446744073709551616.00000

The 64 bit integral representation, this number is 64bits and each bit is on.
If only the most significant bit is on, the value is: 2^63 = 8192 Petabytes.
Since bits 62, 61, 60, etc are also on, the value is converging close to 16384 Petabytes.

It will take roughly 2^50 decrements on the Dirty Buffer value for this to change in the PROMON display.
Resolution
Upgrade to OpenEdge 10.2B07, 11.2 or later where bk_numdirty64 has been changed to signed (from ULONG64 to LONG64).
Workaround
If using OpenEdge 10.1A or above, run:
 
$  proutil dbname -C zerostats

It will zero out all PROMON and VST shared memory counters online when a database has been left running so long that counters overflow to negative numbers - or at any other time a new baseline is needed.

Prior to OpenEdge 10.1A, VST's can only be re-set by restarting that instance of the database.

 
Notes
Keyword Phrase
Last Modified Date11/20/2020 7:27 AM

Powered by