Feedback
Did this article resolve your question/issue?

   

Article

A database running with -B2 crashes with error (1040)

« Go Back

Information

 
TitleA database running with -B2 crashes with error (1040)
URL Namedatabase-B2-crashes-with-1040-000078422
Article Number000180541
EnvironmentProduct: OpenEdge
Version: 11.6.x
OS: All supported platforms
Other: -B2
Question/Problem Description
Database crashes with error 1040 where objects are assigned to the Alternate Buffer Pool at the object level and -B2 is used

PROBKUP online crashes the database with 1040, when db is started with -B2 and PROBKUP does not use private buffers (-Bp)

Online dbanalys, tabanalys, ixanalys crashes the database with 1040, when db is started with -B2 and private buffers (-Bp) are not used

TDE epolicy manage update sessions to encrypt existing data assigned to the Alternate Buffer Pool crashes the database with error 1040 when the database is started with -B2

When -B2 is not used at database startup the database does not crash with error 1040
Steps to Reproduce
Clarifying Information
online PROBKUP succeeds when the database is not started with -B2
online PROBKUP succeeds when the database is started with -B2 and PROBKUP uses private buffers (-Bp)
online dbanalys, tabanalys, ixanalys succeed when the database is not started with -B2
online dbanalys, tabanalys, ixanalys succeed when the database is started with -B2 and private buffers (-Bp) are used
offline probkup and analys succeed
Error Message(1040) SYSTEM ERROR: Not enough database buffers (-B)
Defect/Enhancement NumberDefect PSC00354391, PSC00362535
Cause
A regression was introduced in 11.6.3.0 and 11.5.1.025 by the changes for PSC00346392. Refer to Article: When block requests for specific objects are being made, buffers from the primary buffer pool are being de-queued and added to the alternate buffer pool.  Over time this exhausts the primary buffer pool (-B) and the 1040 error is the result. 
Resolution
Upgrade to OpenEdge 11.7.0, 11.6.4.006, 11.6.3.032 where the buffer pool exhaustion 1040 is avoided by reverting the changes to the picking algorithm for Object Level assignments (PSC00346392).  For further information refer to Article: This means over sizing the Alternate Buffer Pool to specifically avoid the LRU2 mechanism from being enabled.  Beyond the size of assigned object data:

1.  For Object Level Alternate Buffer Pool assignment, include:
  • Index / LOB free blocks and Master Control Object Blocks, when a table’s related index / lob are not also assigned at the object level
Alternatively use Area level Alternate Buffer Pool assignment:
  • Move all Objects that will be assigned to the Alternate Buffer Pool into one or more Type II Storage Areas
  • Assign the Storage Area to the Alternate Buffer Pool: proutil -C enableB2 "area name"
Since OpenEdge 11.7 this information is included in: 
  • PROUTIL -C viewB2 which includes the current storage pool assigned, the size (in blocks) of each object, the type of block and a Total for the Area.  
  • PROMON> R&D > 2,3 (activity, buffer pool) which provides detail about the types of blocks accessed in the buffer pools.
2.  When Run online tools with block level access, as opposed to block requests for specific objects, with Private Buffers (-Bp)
  • probkup online dbname <backupvolume> -Bp 64
  • proutil dbname -C dbanalys -Bp 64
Consider increasing the database startup parameter -Bpmax 64 (default). The private buffer pool (-Bp) is an isolated portion of public buffer pool (-B), it is also limited to no more than 25% of the primary buffer pool (-B) value.  Client sessions may also be making use of using private buffers (-Bp, NumSeqBuffers)

3. For TDE enabled databases:

Start the Database without -B2 in order to run epolicy manage update sessions to encrypt existing data.
Once blocks have been encrypted, initialise -B2 online with: proutil -C increaseto -B2 <value>

4.  Finally, periodically monitor and increase the Alternate Buffer pool size once LRU2 is enabled:

PROMON > R&D > 2 Activity Displays > 3 Buffer Cache
"LRU2 replacement policy enabled" 

PROUTIL -C INCREASETO -B2 <value>

PROMON > R&D > 4 Administrative Functions > 4 Adjust Latch Options > 3. Disable LRU2 alternate buffer pool replacement policy

 
Workaround
When objects have been assigned to the Alternate Buffer Pool:
  1. When enabling TDE: Start the Database without -B2 in order to run epolicy manage update sessions to encrypt existing data. Once blocks have been encrypted, initialise -B2 online with: proutil -C increaseto -B2 <value>
  2. Once the Alternate Buffer Pool is in use, run online PROBKUP and analysis tools with Private Buffers (-Bp)
  • probkup online dbname <backupvolume> -Bp 64
  • proutil dbname -C dbanalys -Bp 64
Consider increasing the database startup parameter -Bpmax 64 (default). The private buffer pool (-Bp) is an isolated portion of public buffer pool (-B), it is also limited to no more than 25% of the primary buffer pool (-B) value.

3. Monitor the use of B2 according to the steps presented in Article: 4. As a last resort in case 1040 error persists, in terms of a workaround, stop using -B2.

It is not necessary to un-assign the objects assigned to the Alternate Buffer Pool, but when starting up a database broker do not specify a value for the -B2 parameter.  This is further discussed in Article:
Notes
Last Modified Date2/3/2020 4:31 PM
Attachment 
Files
Disclaimer The origins of the information on this site may be internal or external to Progress Software Corporation (“Progress”). Progress Software Corporation makes all reasonable efforts to verify this information. However, the information provided is for your information only. Progress Software Corporation makes no explicit or implied claims to the validity of this information.

Any sample code provided on this site is not supported under any Progress support program or service. The sample code is provided on an "AS IS" basis. Progress makes no warranties, express or implied, and disclaims all implied warranties including, without limitation, the implied warranties of merchantability or of fitness for a particular purpose. The entire risk arising out of the use or performance of the sample code is borne by the user. In no event shall Progress, its employees, or anyone else involved in the creation, production, or delivery of the code be liable for any damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information, or other pecuniary loss) arising out of the use of or inability to use the sample code, even if Progress has been advised of the possibility of such damages.