I have not understood the difference beetween buffering via SE13 (with corresponding ST02 and ST10) and buffering in main memory via SNRO (and related RSD_IOBJ_GET and NRIV).
Please help me, I will reward points.
Thanks in advance.
When you load master data,BW must check to see if it is a new value, and if it is, it must assign a new SID for that master data value. Without Number Range buffering, the load process must perfrom a database read to a table to get the next available SID.
The process i sthe same when you are loading an InfoCube, the BW checks to see if the combination of characteristic values can already be found in the dimension table, and if not, it must read the number range table for that dimension to get the next available Dim ID.
Using number range buffering loads blocks of SID or DIM ID values into memory, e.g. 500 values, which means that the load processes only need to perform a DB read once for every 500 new SID/Dim values instead of once for each new values.
Buffering number ranges makes sense where you have a high volume (perhaps in the tens of thousands or more)of new SID/Dim ID values to be created as a result of a load. So you would only turn on number range buffering for selected Dims or or SIDs, or perhaps when you were doing a large inital load. Buffering also consumes server memory which is also why you would not use it for all SIDs/Dims. I've even seen some suggestions to turn off number range buffering after your loads are complete to ree up server memory, but that seems extreme to me unless you are severely memory contrained.
Number range tables begin with BIM (SIDs I believe) and BID (for Dims).
You turn buffering on for a SID or Dim directly in your Prod system.
Table buffering is an attempt by SAP to maintain frequently referenced data in memory on the Appl servers. If you have Master Data with many values, more than 100,000, SAP recommends <b>turning off</b> table buffering. There is an OSS Note on this, which you should be able to find by searching on table buffering.
SE13 is table buffering. System will buffer table values in memory.
Number range object buffering will buffer number ranges on each application server. So App server 1 will have numbers from 1-100, App2 wil have 101-200,... when an object reqeusts for a number range it will pick it from the app server memory. If continuous numbering is a must, then the number range should not be buffered.