Tuning Replicat Transactions
Replicat uses regular SQL, so its performance depends on the performance of the target database and the type of SQL that is being applied (inserts, versus updates or deletes). However, you can take certain steps to maximize Replicat efficiency.
Tuning Coordination Performance Against Barrier Transactions
In a coordinated Replicat configuration, barrier transactions such as updates to the primary key cause an increased number of commits to the database, and they interrupt the benefit of the GROUPTRANSOPS
feature of Replicat. When there is a high number of barrier transactions in the overall workload of the coordinated Replicat, using a high number of threads can actually degrade Replicat performance.
To maintain high performance when large numbers of barrier transactions are expected, you can do the following:
-
Reduce the number of active threads in the group. This reduces the overall number of commits that Replicat performs.
-
Move the tables that account for the majority of the barrier transactions, and any tables with which they have dependencies, to a separate coordinated Replicat group that has a small number of threads. Keep the tables that have minimal barrier transactions in the original Replicat group with the higher number of threads, so that parallel performance is maintained without interruption by barrier transactions.
-
(Oracle RAC) In a new Replicat configuration, you can increase the
PCTFREE
attribute of the Replicat checkpoint table. However, this must be done before Replicat is started for the first time. The recommended value ofPCTFREE
is 90.
Preventing Full Table Scans in the Absence of Keys
If a target table does not have a primary key, a unique key, or a unique index, Replicat uses all of the columns to build its WHERE
clause. This is, essentially, a full table scan.
To make row selection more efficient, use a KEYCOLS
clause in the TABLE
and MAP
statements to identify one or more columns as unique. Replicat will use the specified columns as a key. The following example shows a KEYCOLS
clause in a TABLE
statement:
TABLE hr.emp, KEYCOLS (FIRST_NAME, LAST_NAME, DOB, ID_NO);
For usage guidelines and syntax, see the TABLE
and MAP
parameters in Parameters and Functions Reference
for Oracle GoldenGate.
Splitting Large Transactions
If the target database cannot handle large transactions from the source database, you can split them into a series of smaller ones by using the Replicat parameter MAXTRANSOPS
. See Parameters and Functions Reference
for Oracle GoldenGate for more information.
Note:
MAXTRANSOPS
is not valid for an integrated Replicat on an Oracle database system.
Adjusting Open Cursors
The Replicat process maintains cursors for cached SQL statements and for SQLEXEC
operations. Without enough cursors, Replicat must age more statements. By default, Replicat maintains as many cursors as allowed by the MAXSQLSTATEMENTS
parameter. You might find that the value of this parameter needs to be increased. If so, you might also need to adjust the maximum number of open cursors that are permitted by the database. See Parameters and Functions Reference
for Oracle GoldenGate for more information.
Improving Update Speed
Excessive block fragmentation causes Replicat to apply SQL statements at a slower than normal speed. Reorganize heavily fragmented tables, and then stop and start Replicat to register the new object ID.
Set a Replicat Transaction Timeout
Use the TRANSACTIONTIMEOUT
parameter to prevent an uncommitted Replicat target transaction from holding locks on the target database and consuming its resources unnecessarily. You can change the value of this parameter so that Replicat can work within existing application timeouts and other database requirements on the target.
TRANSACTIONTIMEOUT
limits the amount of time that Replicat can hold a target transaction open if it has not received the end-of-transaction record for the last source transaction in that transaction. By default, Replicat groups multiple source transactions into one target transaction to improve performance, but it will not commit a partial source transaction and will wait indefinitely for that last record. The Replicat parameter GROUPTRANSOPS
controls the minimum size of a grouped target transaction.
The following events could last long enough to trigger TRANSACTIONTIMEOUT
:
-
Network problems prevent trail data from being delivered to the target system.
-
Running out of disk space on any system, preventing trail data from being written.
-
Extract abends or is terminated in the middle of writing records for a transaction.
-
There is a source system failure, such as a power outage or system crash.
See TRANSACTIONTIMEOUT
in Parameters and Functions Reference
for Oracle GoldenGate for
more information.