Table buffering - Invalidations vs Changes on ST10
Hello experts,
Could you please let us know what is the difference between the number of "Invalidations" and the number of "Changes" that are registered via ST10 transactions for each table?
We are interested to identify which tables should be unbuffered considering that these metrics hopefully could help us to take a decision, we would like to know what is the basic difference between each of them.
Thanks and best regards,
Hi Rodolfo,
interesting questions:
A change is a DML statement (INSERT, UPDATE, DELET, MODIFY).
A invalidation is flagging an entry (line, region, table) in the table buffer as invalid
because it has been changed.
I suggest to create you own tables (sng, gen, ful), buffer them and run some tests.
I don't know each and every detail since i didn't tested everything here but here are some of my observations.
A change is counted in the DBI and is a (one) change statement. e.g.
INSERT from wa = 1 change
This will lead to 1 invaldiation PER REMOTE APPLICATION SERVER (the local one is updated with the change hence has no invalidation).
As far as i know array statements are counted as a (one) change as well like:
INSERT ... from TABLE
One change would be the UPDATE SET ... .
These statements let to many invalidations in my test (nr. of records / regions to be changed multiplied with the nr. of remote application servers).
To make it more complicated:
we can have invalidations and no changes since:
R3trans or tp might change buffered tables (do invalidations) but record no change in the DBI.
or
if a projection view is changed the change is recorded in the DBI against the view but the the underlying tables
get invalidations as well (like the view) on the remote application servers.
Kind regards,
Hermann
Similar Messages
-
Expert,
We want to Change the one table Table buffering on from "Buffering Switched on" to "
Buffering not allowed".
we have to do the changes on our my DEV-QUA-> PRD Enviromment.
Please let me know which transaction should I use to do the changes in Dev(ECC-700)system.
Is it sm13. also please provide the steps to do that.
Thanks
MalaiDear Anil, Sunil & hari,
Thank you very much for all quick response..
Ok once I did a changes in SE11 as per you mentioned steps, Then a new transport wil be created right.
I want to apply the same changes in all my three system enviroment. DEV->QEA->PRD>
1. If we import the (Created TR at DEV) TR request from DEV to QUA using Stms-> Will it be updated to QUA system as like Dev system.
Thanks
Malai -
hi experts,
Explain me what is table buffering.why we have to use this concept ?and under which circumstances we need to use this concept.and if not what will be the consequences.
ragards,
manihi,
You get the same in SAP help, but i dont know the link..
SAP Buffering
The SAP database interface enables storage of database tables in local buffers, i.e. the buffers reside locally on each application server of the system. Buffering is especially important in a client/server environment because the access time using the network is much greater than the access time to a locally buffered table.
The flag Buffering allowed must be set in the ABAP/4 Dictionary in order that a table be buffered. The buffering type must also be maintained in the technical settings of the table. Setting the flag Buffering allowed alone does not cause the tables to be buffered!
Whether or not it makes sense to buffer a table depends on the type of access to the table.
The buffering type defines how the table should be buffered.
There are the following 3 buffering types:
X full buffering
P single record (partial) buffering
G generic buffering
no entry no buffering
A number of key fields between 1 and number of key fields -1 must be defined for generic buffering.
X full buffering
Full buffering
With full buffering, either the complete table or none of the table is in the buffer. If a read access is made to a record, all records of the table are transferred to the buffer.
When should you select full buffering?
For tables up to 30 KB in size. If a table is accessed frequently, but all accesses are read accesses, this value can be exceeded.
For larger tables where large numbers of records are frequently accessed. However, if the application program is able to formulate an extremely selective WHERE condition using a database index, it may be advisable to dispense with full buffering.
For tables with frequent accesses to data not contained in the table. Since all records are contained in the buffer, a quick decision can be made as to whether or not the table contains a record for a specific key.
When considering whether a table should be fully buffered, you should take three aspects into account: the size of the table, the number of read accesses, and the number of write accesses. Tables best suited to full buffering are small, frequently read, and rarely updated.
P single record (partial) buffering
Single-record buffering
With this kind of buffering, only the records of a table which are actually accessed are loaded into the buffer.
This kind of buffering requires less storage space in the buffer than full buffering. However, greater organization is necessary and considerably more database accesses are necessary for loading.
If an as yet unbuffered record is accessed with SELECT SINGLE, a database access occurs to load the record. If the table does not contain a record for the specified key ('no record found'), this record is noted as nonexistent in the buffer. If a further attempt is made to access this record, a renewed database access can be avoided.
When should single-record buffering be selected?
For large tables where there are frequent single-record accesses (with SELECT SINGLE ...). The size of the records being accessed should be between 100-200 KB.
For comparatively small tables for which the access range is large, it is normally advisable to opt for full buffering. Only one database access is required to load such a table for full buffering, whilst single-record buffering calls for a very large number of table accesses.
Generic buffering
In a read access to a record of a generically buffered table, all the records whose left-justified part of the key (generic area) corresponds are loaded into the buffer.
If this type of buffering is selected, the generic area must be defined by specifying a number n of key fields. The first n key fields of the table then define the generic key.
The number of key fields to be entered must lie between 1 and the number of key fields -1. For example, only values between 1 and 5 are permitted for a table with 6 key fields.
When should generic buffering be selected?
A table should be buffered generically if usually only certain areas of the table are required. The individual generic areas are treated like independent tables which are fully buffered. Please also read the text about full buffering.
The generic key area should be selected so that the generic areas are not too small to prevent too may generic areas being produced. If there are only a few records per generic area, it is more efficient to use full buffering.
Generic buffering only makes sense if the table is accessed by a specified generic key. If, when an access takes place, a field of the generic key is not supplied with a value, the buffer is ignored and the records are read directly from the database.
Language-specific tables are an example of a good use of generic buffering (with the language key field as generic key area).
Bypassing Buffer is related to the buffering settings in the technical
details of a database table. These table buffers are available on every
application server. SELECT statements on a buffered table use this table
buffer in stead of processing the SQL request on the database. As a
result, using table buffering leads to performance improvements, but
only if:
- the buffered table is small
- the contents of the table doesn't change often.
SAP uses table buffering for a lot of their customizing table.
Bypassing Buffer means: skip the table buffer on the application server
and process the sql-request on the database.
The table buffers are automatically synchronized with changes in the
database. However, it takes some time for the database updated to be
available in the table buffer. So if you want to be 100% sure that the
data you read is up to date, you must use the option BYPASSING BUFFER.
Please note that there are also SQL statements that implicitely perform
a BYPASSING BUFFER, for example when using a table in a JOIN statement.
regards,
Prabhu
reward if it is helpful. -
Table to look for change documents for users
Hi friends,
Is there any standard table to look for change documents for a user?change document through SUIM does not give the correct log.
Thanks for you support.Julius
Looking at another of Tracy's other post (http://scn.sap.com/thread/3598947) she's trying to use ACL. Hence needing to know the tables to write joins/queries to hit tables within ACL
I've seen ACL used and have had the fun experience of Auditors using Google to find tables to perform checks on without context of what has actually been implemented in their particular system.
Regards
Colleen -
I have a series of databases. They're mirrors of each other in structure, only the data inside them changes. There's a database for each customer. Each night I run a procedure that checks if anything has changed in the database since the previous run and
e-mails me if it has. The reason for this was that an employee in the past was changing (and breaking) things so I wanted to track what was going on. Now, one of these databases is idle at the moment, in abeyance if you like, yet 1 table's modified date changes
once a week! Table definition stays stable at the level I am recording it (code below) so why is the modified date changing? Could it be an index-defrag? But if so, why this table and none of the others or indeed its mirror databases? CHECKDB run every day
and that's OK. Full backup done weekly. But again, why this 1 table? Nothing is even using the table at the moment! Code to get object definitions below.
SET
@command =
INSERT INTO TblSETUP_DatabaseVersionControl
SELECT
+ @database
+
''' as DatabaseName
+
CAST(@datestamp
as
varchar(20))
+
''' as SnapshotTime
,so.object_id as ObjectId
,so.[name] as ObjectName
,so.[type_desc] as ObjectType
,so.create_date as CreateDate
,so.modify_date as ModifiedDate
,CASE
WHEN so.type = ''U''
THEN tbl.TableDefinition
WHEN so.type = ''SN''
THEN ''CREATE SYNONYM ['' + ss.name + ''] FOR '' + ss.base_object_name
ELSE sm.definition
END as ObjectDefinition
FROM '
+ @database
+
'.sys.objects so
LEFT OUTER JOIN '
+ @database
+
'.sys.sql_modules sm
ON so.object_id = sm.object_id
LEFT OUTER JOIN (SELECT
td.object_id
,SUBSTRING(td.TableDefintionRaw,1,LEN(td.TableDefintionRaw)-1) + '')'' as TableDefinition
FROM (
select
so1.object_id
,(select
CASE
WHEN sc.column_id = 1
THEN ''CREATE TABLE ['' + so.name + ''] ([''
+ sc.name + ''] [''
+ st.name + '']''
+ CASE WHEN st.name LIKE ''%char%'' THEN ''('' + CAST(sc.max_length as varchar(5)) + '')'' ELSE '''' END
+ CASE WHEN sc.is_nullable = 1 THEN '' NULL,'' ELSE '' NOT NULL,'' END
ELSE ''['' + sc.name + ''] [''
+ st.name + '']''
+ CASE WHEN st.name LIKE ''%char%'' THEN ''('' + CAST(sc.max_length as varchar(5)) + '')'' ELSE '''' END
+ CASE WHEN sc.is_nullable = 1 THEN '' NULL,'' ELSE '' NOT NULL,'' END
END
from '
+ @database
+
'.sys.objects so
inner join '
+ @database
+
'.sys.columns sc
on so.object_id = sc.object_id
inner join '
+ @database
+
'.sys.types st
on sc.user_type_id = st.user_type_id
where so.type = ''U''
AND so.object_id = so1.object_id
order by sc.column_id
FOR XML PATH('''')) AS TableDefintionRaw
from '
+ @database
+
'.sys.objects so1
WHERE so1.type = ''U''
group by so1.object_id) as td) as tbl
ON so.object_id = tbl.object_id
LEFT OUTER JOIN '
+ @database
+
'.sys.synonyms ss
ON so.object_id = ss.object_id
WHERE so.[type] IN(''P'' -- Stored procedures
,''V'' -- Views
,''U'' -- User table
,''SN'' -- Synonym
,''FN'' -- Function
ORDER BY so.[type],so.name
JCEHIncidentally, I remember the second reason I set all this up. I had a view that used to revert back to an old definition under SQL 2008. It was weird. More than 1 of us had gone in and "fixed it" and then it unfixed itself. It turned out the view had been
renamed in the past. Each night I have a procedure that checks all views in the instance running sp_refreshview. Any errors are caught and e-mailed to me. It seems that the old definition was still stored somehow under the old name but with the same object
id (there had been some corruption in the database when a drive in the RAID5 array became suspect - picked up with CHECKDB, Windows and indeed the HP software didn't pick anything up). Although the database had been "fixed" this view switched back to
the old definition each time sp_refreshview was run. Fix was to drop and re-create using new definition. Learnt the lesson though and now keep track of all main definitions in each instance.
J
JCEH -
Which table contains - Customer Master Changes?
Team,
Which table contains - Customer Master Changes?
Please be specific; For example:
CDHDR:
OBJECTCLAS ?
CDPOS:
BJECTCLAS?
ABNAME
ABKEY
HNGIND
ThanksHi Naved,
try this:
CDHDR-OBJECTCLAS = 'DEBI'
CDHDR-OBJECTID = customer no.
CDPOS-OBJECTCLAS = 'DEBI'
CDPOS-OBJECTID = customer no.
CDPOS-CHANGENR = CDHDR-CHANGENR
CDPOS-TABNAME = 'KNA1'
CDPOS-TABKEY = sy-mandt + customer no. (key of table KNA1)
CDPOS-FNAME = field modified
CDPOS-CHNGIND = (U Update, I Insert, D Delete)
Regards, Manuel
PS: Please remember to reward points if the answer is useful. -
Which table contains - FI Document Changes?
Team,
Which table contains - FI Document Changes?
Please be specific; For example:
CDHDR:
OBJECTCLAS ?
CDPOS:
BJECTCLAS?
ABNAME
ABKEY
HNGIND
ThanksHello
The OBJECTCLAS is BELEG.
Use FM CHANGEDOCUMENT_READ_HEADERS
with objectclass = 'BELEG'
objectid = (concatenate client + company code + doc no + fiscal year)
Then loop at the header and use FM
CHANGEDOCUMENT_READ_POSITIONS
to get the CDPOS values
Hope this helps
Shounak
Message was edited by: Shounak Mukherjee -
Table that contains the change date for every cost element
Hi everyone!
Can anyone please help me find a table which contains the change date for every cost element?
Thanks,JessIf you basically want to find out if anyone changed the cost element, you need to use transaction KA05 and enter the cost element and controlling area.
This would actually bring you whatever field was changed and on double clicking give you the actual change and the date on which the change was made.
Problem is this change date is actually the creation date of a change document which is in the table CDHDR.Its not like the change date is on any master tables.
Hope this helps
Deepa -
In the Table Overflow can we change show link to + sign?
In the Table Overflow can we change show link to + sign?
I asked about this awhile ago on this form,
Removing the words 'Show'/'Hide' from table detail disclosure
Changing this is a ADF Faces skinning issue, so the JDeveloper forum would be your best best. I've always wanted to implement this, but I have never got around to it -
Table for Function modules - Changed date & Changed by.
Hi Experts,
Help me to get Function module changed date & changed by.
For programs we can get the mentained information in TABLE : TADIR.Function Modules change history can be retrieved from table TRDIR.
Function Module stores a program Include in table TRDIR.
The details of the Function Module can be found in Attributes-->general data tab in the Function Module.
You need to pass the Include which correponds the FM.
Hence you can find the Log changes.
Hope this helps.
Regards
Vinayak -
To know the table names that contains changed and old PO values.
Dear All,
Please let me on the table names that contains changed PO value and old PO value details for which I'll be grateful.
Regards,
S.SureshHello,
Check the table CDHDR and CDPOS.
Cheers,
Vasanth
Edited by: Vasanth M on Feb 18, 2008 12:08 PM -
Table which stores the changes on a object
Hi,
Could any one tell me a table which stores the changes done to an object ex:Master data info object.
I want to know when an particular attribute added to the master data.
Thanks in advanceI am not sure what is the level of detail you are looking for.
CDHDR might help.
Arun -
Table for exhange rate changed on
Hi
Table for exchange rate is TCURR. and where can i find the changes done and changed by.
what is the table to find the "changed on" and "change
thanksHi Sameer,
Pls check in the following tables:
SE16n_cd_key and se16n_cd_data
You can find the required info. in the above mentioned tables.
Regards,
Mohan. -
Hi,
what is the simple meaining if "invalidate" records in table buffering ?
thanks
b
Moderator message: please find available information.
Edited by: Thomas Zloch on Nov 13, 2011 1:29 PMHi,
what is the simple meaining if "invalidate" records in table buffering ?
thanks
b
Moderator message: please find available information.
Edited by: Thomas Zloch on Nov 13, 2011 1:29 PM -
Find when table Authorization Group was changed
Dear Experts,
Kindly help me on finding this. Table T001B have standard Authorization group as FB31 but it has been changed to &NC& by some one. It means &NC& means there is no Authorization group assigned to the table. I need to find when it was changed. Do i have any ways to find it out? I checked with entering table name in CDPOS i didnt find any entry. Kindly help me out how to find who and when this table Authorization group was changed for table T001B.
Thanks & Regards,
SathishThanks Thomas,
I check in that transaction it shows log only for 3 months. I dont see any changes to those table what i want may be this Authorization group change in done even older.
Thanks for your reply.
Maybe you are looking for
-
Iphone in recovery mode, how can i make assure that my data will not erase
firstly thanks for quick reply. sorry sir, i am confused in last line you wrote, " This will erase the phone but you will be given an option at the end to restore to an existing backup, if you have one." i did not understand last sentence - if i have
-
Agree to terms & conditions option in pdf form
Hi, I'll start by giving you some background to the job. I have created a layout using inDesign CS5 and imported it into Acrobat Pro 9. I have then used 'form editing' to produce a form that can be filled in and the FDF data emailed back when a 'send
-
How do I disable "Temporarily avoiding bad connevtoon
How can I disable Avoid Bad Connections? I'd rather not get the "Temporarily Avoiding bad connections" feature. Thank you. Solved! Go to Solution.
-
Rounding and displaying doubles
How do you stop a double (eg 12646903) being displayed as 1.2646903E7? ??? . Lynda
-
Hi all, I am coding an Z Program and in this Zprogram i have to call an Standard Program(RFFOUS_T) and after giving the Necessary input Manually in the first selection screen (1000)of the Standard program i have to return back to my Z program How can