Πώς μπορούμε να αυξήσουμε την απόδοση στο target Replicat του Oracle GoldenGate με παραλληλία

Πώς μπορούμε να αυξήσουμε την απόδοση στο target Replicat του Oracle GoldenGate με παραλληλία
Πώς μπορούμε να αυξήσουμε την απόδοση στο target Replicat του Oracle GoldenGate με παραλληλία

Αν επιλέξουμε να κάνουμε το Initial Load πριν τον συγχρονισμό μέσω Replicat του GoldenGate είτε απλά το Replicat έχει να συγχρονίσει μεγάλο όγκο δεδομένων ένα Replicat thread δεν είναι αρκετό.

Σε αυτό το άρθρο θα δούμε δύο τρόπους ώστε να τρέξουμε το Replicat process με παραλληλία. Ο ένας τρόπος είναι μέσω Classic Replicat με RANGE FILTER ο οποίος έχει πολύ καλή απόδοση στο Initial Load. Ο άλλος τρόπος είναι μέσω Coordinated Replicat που προτείνεται για τον συγχρονισμό των συναλλαγών διότι προστατεύει από conflicts, blocks και deadlocks καθώς το head Coordinator process συντονίζει με την σωστή σειρά την εκτέλεση των DDL (ALTER, CREATE) και DML(UPDATE,INSERT,DELETE) actions

Classic Replicat με RANGE FILTER

Σε αυτή την λειτουργία μπορούμε κάνοντας MAP και βάζοντας RANGE FILTER στους πίνακες που βρίσκονται στο parameter file του κάθε Replicat να τους χωρίσουμε σε πολλαπλά partitions. Έτσι μπορούμε να φτιάξουμε πολλαπλά διαφορετικά Replicat processes που το καθένα από αυτά είναι υπεύθυνο στο να κάνει apply το συγκεκριμένο partition του πίνακα.

Πώς μπορούμε να αυξήσουμε την απόδοση στο target Replicat του Oracle GoldenGate με παραλληλία
01 (docs.oracle.com)

Αυτή η μέθοδος έχει εξαιρετική απόδοση για χρήση σε Initial Load καθώς αποτελείται από μαζικά INSERTS. Όμως θα πρέπει να προσέξουμε γιατί αυτή η μέθοδος δεν μπορεί να χρησιμοποιηθεί στην δεύτερα φάση του συγχρονισμού που θα περνάμε συναλλαγές καθώς ότι DDL (ALTER, CREATE) και DML(UPDATE,INSERT,DELETE) action γίνεται δεν μας εγγυάται οτι θα περάσουν με την σωστή σειρά. Για αυτόν τον λόγο αν προσπαθήσουμε να περάσουμε συναλλαγές με αυτή την μέθοδο θα έχουμε conflicts, blocks, deadlocks και errors.

Coordinated Replicat

Σε αυτή την λειτουργία ορίζοντας κατά την δημιουργία του ότι πρόκειται για coordinated replicat και κάνοντας MAP βάζοντας THREADRANGE στους πίνακες που βρίσκονται στο parameter file του Replicat , δημιουργείτε ένα μόνο processes που ονομάζεται Replicat Coordinator, αυτό με την σειρά του δημιουργεί threads αναλόγος το THREADRANGE που έχουμε ορίσει και αναλαμβάνει να συντονίζει την σειρά που πρέπει να τρέξει το κάθε thread ώστε οι συναλλαγές να μην έχουν conflicts, blocks, deadlocks και errors.

Πώς μπορούμε να αυξήσουμε την απόδοση στο target Replicat του Oracle GoldenGate με παραλληλία

Οι διαφορές μεταξύ των Replicat modes

Πώς μπορούμε να αυξήσουμε την απόδοση στο target Replicat του Oracle GoldenGate με παραλληλία
03 (docs.oracle.com)

Τα προαπαιτούμενα

Για το άρθρο αυτό θεωρούμε ότι έχουμε ήδη μία ολοκληρωμένη εγκατάσταση GoldenGate.

Το πώς γίνεται η εγκατάσταση και παραμετροποίηση μπορούμε να το διαβάσουμε στο άρθρο εδώ.

Έπειτα για το παράδειγμα μας θα θεωρήσουμε ότι έχουμε κάνει τις παρακάτω ρυθμίσεις στο target για τα Extracts.

Έχουμε φτιάξει και ξεκινήσει το extract για τον συγχρονισμό τον συναλλαγών:

edit param MIS_EXT
EXTRACT MIS_EXT
USERIDALIAS GGADMIN
RMTHOST sqlserverdb.mshome.net, MGRPORT 7809
RMTFILE ./dirdat/mi, PURGE
TABLE STRATOS.CUSTOMERS;
add extract mis_ext, integrated tranlog, exttrail ./dirdat/mi, BEGIN NOW
start mis_ext

Έχουμε φτιάξει και ξεκινήσει το extract για το Initial Load:

edit param INI_EXT
EXTRACT INI_EXT
USERIDALIAS GGADMIN
RMTHOST sqlserverdb.mshome.net, MGRPORT 7809
RMTFILE ./dirdat/fe, PURGE
TABLE STRATOS.CUSTOMERS;
add extract ini_ext, sourceistable

Η εγκατάσταση του Classic Replicat με RANGE FILTER για το Initial Load

Για την εγκατάσταση του η μόνη διαφοροποίηση από ένα Replicat είναι η προσθήκη του RANGE FILTER μετά το MAP με ορισμό αναλόγος του πόσα Replicat Processes θέλουμε να φτιάξουμε. Για το παράδειγμα μας θα έχουμε δύο processes:

edit param IN1_REP
REPLICAT in1_rep
TARGETDB sqlserverdb, USERIDALIAS ggadmin
SOURCECHARSET PASSTHRU
BATCHSQL
REPERROR(60,TRANSABORT, MAXRETRIES 10, DELAYSECS 60)
DISCARDFILE ./dirrpt/sql_discard.txt, APPEND, MEGABYTES 50
FUNCTIONSTACKSIZE 500
MAP STRATOS.CUSTOMERS, TARGET DBO.CUSTOMERS FILTER (@RANGE(1,2));
edit param IN2_REP
REPLICAT in2_rep
TARGETDB sqlserverdb, USERIDALIAS ggadmin
SOURCECHARSET PASSTHRU
BATCHSQL
REPERROR(60,TRANSABORT, MAXRETRIES 10, DELAYSECS 60)
DISCARDFILE ./dirrpt/sql_discard.txt, APPEND, MEGABYTES 50
FUNCTIONSTACKSIZE 500

MAP STRATOS.CUSTOMERS, TARGET DBO.CUSTOMERS FILTER (@RANGE(2,2));

Πέρα από το RANGE FILTER έχουμε προσθέσει το BATCHSQL, το TRANSABORT για την επανεκτέλεση συναλλαγών από timeouts / deadlocks και έχουμε μεγαλώσει το FUNCTIONSTACKSIZE ώστε τα insert statements να τρέχουν μαζικά σε batch αυξάνοντας το performance.

Στη συνέχεια προσθέτουμε τα δύο αυτά replicat processes:

add replicat in1_rep, exttrail ./dirdat/fe
add replicat in2_rep, exttrail ./dirdat/fe

Και τα ξεκινάμε:

start in*

Η εγκατάσταση του Coordinated Replicat για τον συγχρονισμό των συναλλαγών

Για την εγκατάσταση του θα φτιάξουμε μόνο ένα Replicat στο οποίο θα προσθέσουμε το THREADRANGE που θέλουμε μετά το MAP με ορισμό αναλόγος του πόσα threads θέλουμε να κάνουμε χρήση. Για το παράδειγμα μας θα βάλουμε οκτώ threads:

edit param mirep
REPLICAT mirep
TARGETDB sqlserverdb, USERIDALIAS ggadmin
SOURCECHARSET PASSTHRU
REPERROR(60,TRANSABORT, MAXRETRIES 10, DELAYSECS 60)
DISCARDFILE ./dirrpt/sql_discard.txt, APPEND, MEGABYTES 50
DISCARDROLLOVER AT 03:00 ON TUESDAY
REPORTROLLOVER AT 03:00 ON TUESDAY
FUNCTIONSTACKSIZE 500
HANDLECOLLISIONS
MAP STRATOS.CUSTOMERS, TARGET DBO.CUSTOMERS THREADRANGE(1-8);

Την παράμετρο HANDLECOLLISIONS την ορίζουμε ώστε να μην έχουμε πρόβλημα με τον αρχικό συγχρονισμό με conflicts από το Initial Load, μπορούμε να το αφαιρέσουμε μετά. Αν θέλουμε να τρέχει μόνο σε ένα thread στον συγκεκριμένο πίνακα αντί για THREADRANGE βάζουμε THREAD(1).

Έπειτα προσθέτουμε και ξεκινάμε το Coordinated Replicat process:

add replicat mirep, coordinated, exttrail ./dirdat/mi
start mirep

Στην περίπτωση που θέλουμε να ξεκινήσουμε από συγκεκριμένο trail file και rba:

add replicat mirep, coordinated, exttrail ./dirdat/fe, extseqno=55, extrba=1292840

Όταν το ξεκινήσουμε ορίζουμε την παράμετρο FILTERDUMPTRANSACTIONS ώστε γίνει έλεγχος στις συναλλαγές που ήδη έχουν περάσει:

start mirep FILTERDUPTRANSACTIONS

Με το που ξεκινήσει θα δούμε ότι το Coordinated Replicat δημιούργησε από κάτω του οκτώ threads:

info mirep, detail
Πώς μπορούμε να αυξήσουμε την απόδοση στο target Replicat του Oracle GoldenGate με παραλληλία
04

Σε περίπτωση abnormal stop του Coordinated Replicat

Στην περίπτωση που γίνει abort ή κλείσει απρόσμενα το Coordinated Replicat, θα πρέπει πριν το ξεκινήσουμε ξανά να το συγχρονίσουμε με την εντολή synchronize ώστε όλα τα theads να βρίσκονται στο ίδιο χρονικό σημείο:

synchronize replicat mirep

Όταν ολοκληρωθεί ο συγχρονισμός θα δούμε ότι έχει σταματήσει, τότε μπορούμε να το ξεκινήσουμε και πάλι:

start mirep

Πηγές:

Μοιράσου το

Αφήστε μία απάντηση