A quick look at the various strategies available for tuning EIM on Oracle.
EIM is the mechanism used to load large data volumes into a Siebel database.
EIM can also be used for ongoing data loads where data is processed (typically from an external system) to create, update, merge or delete records.
EIM can load data fast. However, if the data is missing key fields from the source system, the entire data load will have to be repeated. Exhaustive, thorough checking, testing and validation of all data will have significant benefits. EIM performance degrades in direct proportion to the number of rejected records.
Consider using a staging table with multiple check constraints to validate the data and enforce integrity as much as possible.
Test, test, check and double check the load procedure. Check that data is actually visible in the Siebel application. Failure to populate a single primary column may mean data will not be visible to the end user.
Analyse the SQL statements issued by EIM Process and the performance profile. The IFB parameter SQLPROFILE may be specified to generate a detailed breakdown of each EIM step together with the most resource intensive SQL statements.
Gathering statspack snapshots at the start/end of EIM processing may be used to report on general Oracle performance metrics.
Disable Transaction Logging
Siebel supports mobile web clients (remote users who work in a discinnected mode and synchronise with the Siebel server). For large scale data loads,the Siebel System Preference 'Docking: Transaction Logging' should be set to 'FALSE'. When the data load is complete, mobile web clients should be extracted.
Tune the IFB
ONLY BASE COLUMNS
The parameters 'ONLY BASE TABLES and, in particular, 'ONLY BASE COLUMNS' limit the amount of processing done by EIM. In addition, the resulting IFB documents the data mappings.
The EIM parameter 'DEFAULT COLUMN' and 'FIXED COLUMN' are relatively inefficient. EIM generates an UPFDATE statement for each such column for each batch processed. It is preferable to populate constant values prior to the EIM load either using SQL*Loader or updating the data.
Two IFB parameters USE ESSENTIAL INDEX HINTS (default=TRUE) and USE INDEX HINTS (default=FALSE) should usually both be set to TRUE on Oracle. The parameters issue additional index hints to choose the appropriate indexes.
Direct path inserts
EIM also supports direct path inserts. The IFB parameter 'ORACLE INSERT APPEND MODE = TRUE' should be specified. This will add the /*+ APPEND */ hint to all insert statements.
Direct path load locks the target table. However, this isn't an issue here as the insert operation is the last part of EIM processing and is followed by a commit.
Tune the batch size
EIM processes data in batches. The size of each batch is determined by the IF_ROW_BATCH_NUM column in the EIM interface table. It is worth experimenting with batch size between 2,500 and 25,000 to determine the optimal value. There isn't a massive difference and 5,000 or 10,000 is normally a decent choice (and helps makes the sums easier).
Maintaining all those indexes is expensive. Oracle provides a feature to monitor index usage. This technique can be used to enable index monitoring, execute an EIM data load. Any non-unique indexes that were not used during EIM processing may be dropped.
The necessary DDL to re-create the indexes should be captured. This allows the indexes to be reinstated when data loading is complete. Parallel index creation may be used to create the indexes quickly. The Siebel DDLSYNC utility will also recreate any missing indexes but is sequential (and relatively slow).
Siebel is an OLTP application with users connecting using a web browser. EIM is a batch application. Consequently, there is scope to reconfigure the SGA. The size of the shared pool may be reduced and the memory allocated to the buffer cache.
For large data loads, it is recommended to pre-allocate the necessary tablespace. Dynamic extent allocation is expensive and should be avoided.
Redo logs(Undo Tablespaces)
EIM generates large volumes of redo information. In addition to the actual insert's of new records into the target tables, EIM performs updates on the EIM interface tables to set and modify status values. In addition, some primary columns will also result in update statements.
The final step of EIM tuning should be to run multiple EIM processes in parallel. EIM is database intensive and consumes relatively few resources on the Siebel application server. With modern disk storage technologies, the limiting factor for EIM throughput should be the CPU resources on the database server.