ããã©ãŒãã³ã¹ã®åé¡ãåŠçãã
ãã®ããã¥ã¡ã³ãã§ã¯ãDMã«ååšããå¯èœæ§ã®ããäžè¬çãªããã©ãŒãã³ã¹ã®åé¡ãšããããã®å¯ŸåŠæ¹æ³ã玹ä»ããŸãã
åé¡ã蚺æããåã«ã DMãã³ãããŒã¯ã¬ããŒããåç §ã§ããŸãã
ããã©ãŒãã³ã¹ã®åé¡ã蚺æããã³åŠçãããšãã¯ã次ã®ããšã確èªããŠãã ããã
- DMç£èŠã³ã³ããŒãã³ããæ£ããæ§æããã³ã€ã³ã¹ããŒã«ãããŠããã
- Grafanaã¢ãã¿ãªã³ã°ããã·ã¥ããŒãã§ã¢ãã¿ãªã³ã°ææšã衚瀺ã§ããŸãã
- 蚺æããã³ã³ããŒãã³ãã¯ããŸãæ©èœããŸããããããªããšãç£èŠã¡ããªãã¯ã®äŸå€ãããã©ãŒãã³ã¹ã®åé¡ã®èšºæã«å¹²æžããå¯èœæ§ããããŸãã
ããŒã¿ç§»è¡ã®åŸ
ã¡æéãé·ãå Žåãããã«ããã¯ãDMã³ã³ããŒãã³ãå
ã«ããã®ããTiDBã¯ã©ã¹ã¿å
ã«ããã®ãããã°ããææ¡ããããã«ãæåã«ããŠã³ã¹ããªãŒã ãžã®SQLã¹ããŒãã¡ã³ãã®èšè¿°ã®DML queue remain length
ã確èªã§ããŸãã
ãªã¬ãŒãã°ãŠããã
ãªã¬ãŒãã°ãŠãããã®ããã©ãŒãã³ã¹ã®åé¡ã蚺æããããã«ã binlog file gap between master and relay
ã®ç£èŠã¡ããªãã¯ã確èªã§ããŸãããã®ã¡ããªãã¯ã®è©³çްã«ã€ããŠã¯ã ãªã¬ãŒãã°ã®ç£èŠã¡ããªãã¯ãåç
§ããŠãã ããããã®ã¡ããªãã¯ãé·æé1ãã倧ããå Žåã¯ãéåžžãããã©ãŒãã³ã¹ã®åé¡ãããããšã瀺ããŠããŸãããã®ã¡ããªãã¯ã0ã®å Žåãéåžžãããã©ãŒãã³ã¹ã®åé¡ããªãããšã瀺ããŸãã
binlog file gap between master and relay
ã®å€ã0ã§ããããããã©ãŒãã³ã¹ã®åé¡ããããšæãããå Žåã¯ã binlog pos
ã確èªã§ããŸãããã®ã¡ããªãã¯ã®master
ãrelay
ãããã¯ããã«å€§ããå Žåãããã©ãŒãã³ã¹ã®åé¡ãååšããå¯èœæ§ããããŸãããã®å Žåãããã«å¿ããŠãã®åé¡ã蚺æããŠåŠçããŸãã
binlogããŒã¿ãèªã¿åã
read binlog event duration
ã¯ããªã¬ãŒãã°ãã¢ããã¹ããªãŒã ããŒã¿ããŒã¹ïŒMySQL / MariaDBïŒããbinlogãèªã¿åãæéã瀺ããŸããçæ³çã«ã¯ããã®ã¡ããªãã¯ã¯ãDM-workerãšMySQL/MariaDBã€ã³ã¹ã¿ã³ã¹éã®ãããã¯ãŒã¯é
å»¶ã«è¿ããã®ã§ãã
1ã€ã®ããŒã¿ã»ã³ã¿ãŒã§ã®ããŒã¿ç§»è¡ã®å ŽåãbinlogããŒã¿ã®èªã¿åãã¯ããã©ãŒãã³ã¹ã®ããã«ããã¯ã«ã¯ãªããŸããã
read binlog event duration
ã®å€ã倧ããããå Žåã¯ãDM-workerãšMySQL/MariaDBã®éã®ãããã¯ãŒã¯æ¥ç¶ã確èªããŠãã ãããå°ç忣ç°å¢ã§ã®ããŒã¿ç§»è¡ã®å Žåã¯ãã¿ãŒã²ããããŒã¿ã»ã³ã¿ãŒã«TiDBã¯ã©ã¹ã¿ããããã€ããªãããDM-workerãšMySQL/MariaDBã1ã€ã®ããŒã¿ã»ã³ã¿ãŒã«ãããã€ããŠã¿ãŠãã ããã
ã¢ããã¹ããªãŒã ããŒã¿ããŒã¹ããbinlogããŒã¿ãèªã¿åãããã»ã¹ã«ã¯ã次ã®ãµãããã»ã¹ãå«ãŸããŸãã
- ã¢ããã¹ããªãŒã ã®MySQL/MariaDBã¯ãbinlogããŒã¿ãããŒã«ã«ã§èªã¿åãããããã¯ãŒã¯çµç±ã§éä¿¡ããŸãã MySQL / MariaDBã®ããŒãã§äŸå€ãçºçããªãå Žåããã®ãµãããã»ã¹ã¯éåžžãããã«ããã¯ã«ã¯ãªããŸããã
- binlogããŒã¿ã¯ãMySQL / MariaDBãé 眮ãããŠãããã·ã³ãããDM-workerãé 眮ãããŠãããã·ã³ã«ãããã¯ãŒã¯çµç±ã§è»¢éãããŸãããã®ãµãããã»ã¹ãããã«ããã¯ã«ãªããã©ããã¯ãäž»ã«DM-workerãšã¢ããã¹ããªãŒã ã®MySQL/MariaDBéã®ãããã¯ãŒã¯æ¥ç¶ã«äŸåããŸãã
- DM-workerã¯ããããã¯ãŒã¯ããŒã¿ã¹ããªãŒã ããbinlogããŒã¿ãèªã¿åãããããbinlogã€ãã³ããšããŠæ§ç¯ããŸãã DMã¯ãŒã«ãŒã®ããŒãã§äŸå€ãçºçããªãå Žåããã®ãµãããã»ã¹ã¯éåžžãããã«ããã¯ã«ã¯ãªããŸããã
ããŒãïŒ
å€
read binlog event duration
ã倧ããå Žåãå¥ã®èããããçç±ã¯ãã¢ããã¹ããªãŒã ã®MySQL/MariaDBã®è² è·ãäœãããšã§ããããã¯ãbinlogã€ãã³ããäžå®æéDMã«éä¿¡ããå¿ èŠããªãããªã¬ãŒãã°ãŠããããåŸ æ©ç¶æ ã®ãŸãŸã§ããããããã®å€ã«ã¯è¿œå ã®åŸ æ©æéãå«ãŸããããšãæå³ããŸãã
binlogããŒã¿ã®ãã³ãŒããšæ€èšŒ
binlogã€ãã³ããDMã¡ã¢ãªã«èªã¿èŸŒãã åŸãDMã®ãªã¬ãŒåŠçãŠãããã¯ããŒã¿ããã³ãŒãããŠæ€èšŒããŸããããã¯éåžžãããã©ãŒãã³ã¹ã®ããã«ããã¯ã«ã¯ãªããŸããããããã£ãŠãããã©ã«ãã§ã¯ãç£èŠããã·ã¥ããŒãã«é¢é£ããããã©ãŒãã³ã¹ã¡ããªãã¯ã¯ãããŸããããã®ã¡ããªãã¯ã衚瀺ããå¿
èŠãããå Žåã¯ãGrafanaã«ç£èŠé
ç®ãæåã§è¿œå ã§ããŸãããã®ç£èŠé
ç®ã¯ãPrometheusã®ã¡ããªãã¯ã§ããdm_relay_read_transform_duration
ã«å¯Ÿå¿ããŸãã
ãªã¬ãŒãã°ãã¡ã€ã«ã®æžã蟌ã¿
binlogã€ãã³ãããªã¬ãŒãã°ãã¡ã€ã«ã«æžã蟌ãå Žåãé¢é£ããããã©ãŒãã³ã¹ã¡ããªãã¯ã¯write relay log duration
ã§ãã binlog event size
ã倧ããããªãå Žåããã®å€ã¯ãã€ã¯ãç§ã§ããå¿
èŠããããŸãã write relay log duration
ã倧ããããå Žåã¯ããã£ã¹ã¯ã®æžã蟌ã¿ããã©ãŒãã³ã¹ã確èªããŠãã ãããæžã蟌ã¿ããã©ãŒãã³ã¹ã®äœäžãåé¿ããã«ã¯ãDMã¯ãŒã«ãŒã«ããŒã«ã«SSDã䜿çšããŸãã
ããŒããŠããã
ããŒããŠãããã®äž»ãªæäœã¯ãããŒã«ã«ããSQLãã¡ã€ã«ããŒã¿ãèªã¿åãããããããŠã³ã¹ããªãŒã ã«æžã蟌ãããšã§ããé¢é£ããããã©ãŒãã³ã¹ã¡ããªãã¯ã¯transaction execution latency
ã§ãããã®å€ã倧ããããå Žåã¯ãããŠã³ã¹ããªãŒã ããŒã¿ããŒã¹ã®ç£èŠã確èªããŠãããŠã³ã¹ããªãŒã ã®ããã©ãŒãã³ã¹ã確èªããŠãã ããã DMãšããŠã³ã¹ããªãŒã ããŒã¿ããŒã¹ã®éã«å€§ããªãããã¯ãŒã¯é
å»¶ããããã©ããã確èªããããšãã§ããŸãã
Binlogã¬ããªã±ãŒã·ã§ã³ãŠããã
Binlogã¬ããªã±ãŒã·ã§ã³ãŠãããã®ããã©ãŒãã³ã¹ã®åé¡ã蚺æããããã«ã binlog file gap between master and syncer
ã®ç£èŠã¡ããªãã¯ã確èªã§ããŸãããã®ã¡ããªãã¯ã®è©³çްã«ã€ããŠã¯ã Binlogã¬ããªã±ãŒã·ã§ã³ã®ç£èŠã¡ããªãã¯ãåç
§ããŠãã ããã
- ãã®ã¡ããªãã¯ãé·æé1ãã倧ããå Žåã¯ãéåžžãããã©ãŒãã³ã¹ã®åé¡ãããããšã瀺ããŠããŸãã
- ãã®ã¡ããªãã¯ã0ã®å Žåãéåžžãããã©ãŒãã³ã¹ã®åé¡ããªãããšã瀺ããŸãã
binlog file gap between master and syncer
ãé·æé1ãã倧ããå Žåã¯ã binlog file gap between relay and syncer
ããã§ãã¯ããŠãé
å»¶ãäž»ã«ååšãããŠããããç¹å®ããŸãããã®å€ãéåžž0ã®å Žåãé
å»¶ã¯ãªã¬ãŒãã°ãŠãããã«ååšããå¯èœæ§ããããŸããæ¬¡ã«ã ãªã¬ãŒãã°ãŠããããåç
§ããŠãã®åé¡ã解決ã§ããŸãããã以å€ã®å Žåã¯ãBinlogã¬ããªã±ãŒã·ã§ã³ãŠãããã®ãã§ãã¯ãç¶è¡ããŸãã
binlogããŒã¿ãèªã¿åã
Binlogã¬ããªã±ãŒã·ã§ã³ãŠãããã¯ãæ§æã«å¿ããŠãbinlogã€ãã³ããã¢ããã¹ããªãŒã ã®MySQL / MariaDBããèªã¿åããããªã¬ãŒãã°ãã¡ã€ã«ããèªã¿åãããæ±ºå®ããŸããé¢é£ããããã©ãŒãã³ã¹ã¡ããªãã¯ã¯read binlog event duration
ã§ãéåžžã¯æ°ãã€ã¯ãç§ããæ°åãã€ã¯ãç§ã®ç¯å²ã§ãã
DMã®Binlogã¬ããªã±ãŒã·ã§ã³åŠçãŠããããã¢ããã¹ããªãŒã ã®MySQL/MariaDBããbinlogã€ãã³ããèªã¿åãå Žåãåé¡ãç¹å®ããŠè§£æ±ºããã«ã¯ãããªã¬ãŒãã°ãŠããããã»ã¯ã·ã§ã³ã®binlogããŒã¿ãèªã¿åããåç §ããŠãã ããã
DMã®Binlogã¬ããªã±ãŒã·ã§ã³åŠçãŠãããããªã¬ãŒãã°ãã¡ã€ã«ããbinlogã€ãã³ããèªã¿åãå Žåã
binlog event size
ã倧ããããªãå Žåãread binlog event duration
ã®å€ã¯ãã€ã¯ãç§ã§ããå¿ èŠããããŸããread binlog event duration
ã倧ããããå Žåã¯ããã£ã¹ã¯ã®èªã¿åãããã©ãŒãã³ã¹ã確èªããŠãã ãããæžã蟌ã¿ããã©ãŒãã³ã¹ã®äœäžãåé¿ããã«ã¯ãDMã¯ãŒã«ãŒã«ããŒã«ã«SSDã䜿çšããŸãã
binlogã€ãã³ã倿
Binlogã¬ããªã±ãŒã·ã§ã³ãŠãããã¯ãDMLãæ§ç¯ããDDLãè§£æããbinlogã€ãã³ãããŒã¿ããããŒãã«ã«ãŒã¿ãŒã®å€æãå®è¡ããŸããé¢é£ããã¡ããªãã¯ã¯transform binlog event duration
ã§ãã
æéã¯ãäž»ã«ã¢ããã¹ããªãŒã ã®æžãèŸŒã¿æäœã®åœ±é¿ãåããŸãã INSERT INTO
ã¹ããŒãã¡ã³ããäŸã«ãšããšãåäžã®VALUES
ã倿ããã®ã«ãããæéã¯ãå€ãã®VALUES
ã倿ããã®ã«ãããæéãšã¯å€§ããç°ãªããŸããæ¶è²»ãããæéã¯ãæ°åãã€ã¯ãç§ããæ°çŸãã€ã¯ãç§ã®ç¯å²ã§ããå¯èœæ§ããããŸãããã ããéåžžãããã¯ã·ã¹ãã ã®ããã«ããã¯ã§ã¯ãããŸããã
SQLã¹ããŒãã¡ã³ããããŠã³ã¹ããªãŒã ã«æžã蟌ã
Binlogã¬ããªã±ãŒã·ã§ã³ãŠãããã倿ãããSQLã¹ããŒãã¡ã³ããããŠã³ã¹ããªãŒã ã«æžã蟌ãå Žåãé¢é£ããããã©ãŒãã³ã¹ã¡ããªãã¯ã¯DML queue remain length
ãštransaction execution latency
ã§ãã
binlogã€ãã³ãããSQLã¹ããŒãã¡ã³ããäœæããåŸãDMã¯worker-count
ã®ãã¥ãŒã䜿çšããŠããããã®ã¹ããŒãã¡ã³ããããŠã³ã¹ããªãŒã ã«åæã«æžã蟌ã¿ãŸãããã ããç£èŠãšã³ããªãå€ãããã®ãé¿ããããã«ãDMã¯äžŠè¡ãã¥ãŒã®IDã«å¯ŸããŠã¢ãžã¥ã8
æŒç®ãå®è¡ããŸããããã¯ããã¹ãŠã®åæãã¥ãŒãq_0
ããq_7
ãŸã§ã®1ã€ã®ã¢ã€ãã ã«å¯Ÿå¿ããããšãæå³ããŸãã
DML queue remain length
ã¯ã䞊è¡åŠçãã¥ãŒã§ãæ¶è²»ãããŠããããããŠã³ã¹ããªãŒã ãžã®æžã蟌ã¿ãéå§ãããŠããªãDMLã¹ããŒãã¡ã³ãã®æ°ã瀺ããŸããçæ³çã«ã¯ãåq_*
ã«å¯Ÿå¿ããæ²ç·ã¯ã»ãŒåãã§ããããã§ãªãå Žåã¯ãåæè² è·ã極端ã«äžåè¡¡ã§ããããšã瀺ããŠããŸãã
è² è·ã忣ãããŠããªãå Žåã¯ãããŒãã«ãç§»è¡ããå¿ èŠããããã©ããã確èªããŠãã ãããäž»ããŒãŸãã¯äžæããŒããããŸãããããã®ããŒãååšããªãå Žåã¯ãäž»ããŒãŸãã¯äžæã®ããŒã远å ããŸããè² è·ã忣ãããŠããªããšãã«ãããã®ããŒãååšããå Žåã¯ãDMãv1.0.5以éã®ããŒãžã§ã³ã«ã¢ããã°ã¬ãŒãããŠãã ããã
ããŒã¿ç§»è¡ãªã³ã¯å šäœã«ç®ç«ã£ãé å»¶ããªãå Žåã察å¿ãã
DML queue remain length
ã®æ²ç·ã¯ã»ãšãã©ã®å Žå0ã§ãããæå€§å€ã¯ã¿ã¹ã¯æ§æãã¡ã€ã«ã®å€batch
ãè¶ ããŸãããããŒã¿ç§»è¡ãªã³ã¯ã«é¡èãªé å»¶ããããå
q_*
ã«å¯Ÿå¿ããDML queue remain length
ã®æ²ç·ãã»ãŒåãã§ãã»ãšãã©ã®å Žå0ã§ããå ŽåãDMã¯ãã®ã¢ããã¹ããªãŒã ããã®ããŒã¿ã®èªã¿åãã倿ããŸãã¯åææžã蟌ã¿ã«å€±æããããšãæå³ããŸããæéïŒããã«ããã¯ã¯ãªã¬ãŒãã°ãŠãããã«ããå¯èœæ§ããããŸãïŒããã©ãã«ã·ã¥ãŒãã£ã³ã°ã«ã€ããŠã¯ããã®ããã¥ã¡ã³ãã®åã®ã»ã¯ã·ã§ã³ãåç §ããŠãã ããã
察å¿ããDML queue remain length
ã®æ²ç·ã0ã§ãªãå ŽåïŒéåžžãæå€§å€ã¯1024以äžïŒãSQLã¹ããŒãã¡ã³ããããŠã³ã¹ããªãŒã ã«æžã蟌ããšãã«ããã«ããã¯ãããããšã瀺ããŸãã transaction execution latency
ã䜿çšããŠãããŠã³ã¹ããªãŒã ãžã®åäžã®ãã©ã³ã¶ã¯ã·ã§ã³ãå®è¡ããããã«æ¶è²»ãããæéã衚瀺ã§ããŸãã
transaction execution latency
ã¯éåžžæ°åããªç§ã§ãããã®å€ã倧ããããå Žåã¯ãããŠã³ã¹ããªãŒã ããŒã¿ããŒã¹ã®ç£èŠã«åºã¥ããŠããŠã³ã¹ããªãŒã ã®ããã©ãŒãã³ã¹ã確èªããŠãã ããã DMãšããŠã³ã¹ããªãŒã ããŒã¿ããŒã¹ã®éã«å€§ããªãããã¯ãŒã¯é
å»¶ããããã©ããã確èªããããšãã§ããŸãã
BEGIN
ããŸãã¯UPDATE
ãªã©ã®åäžã®COMMIT
ãããŠã³ã¹ããªãŒã ã«æžã蟌ãã®ã«ãããæéã衚瀺ããããã«ã INSERT
ããã§ãã¯ããããšãstatement execution latency
DELETE
ã