ããã¯ããªã«ãããããŠæžãããã®ïŒ
TiDBã®ã¢ãŒããã¯ãã£ãŒããã£ãããšææ¡ããããšããããã®ãããã®ç¶ãã§ãã
â»æåã®ãšã³ããªãŒããã®ã·ãªãŒãºã®ã€ã³ããã¯ã¹ããŒãžã«ããªã£ãŠããŸã
TiDBのアーキテクチャーをざっくりと眺めてみる(全体概要、ストレージ概要まで) - CLOVER🍀
TiDBのアーキテクチャーをざっくりと眺めてみる(コンピューティング概要) - CLOVER🍀
TiDBのアーキテクチャーをざっくりと眺めてみる(ストレージエンジン概要:TiKV編) - CLOVER🍀
TiDBのアーキテクチャーをざっくりと眺めてみる(ストレージエンジン概要:TiFlash編) - CLOVER🍀
ä»åã¯ãã©ã³ã¶ã¯ã·ã§ã³ã«ã€ããŠæ±ã£ãŠã¿ãããšæããŸãã
ãŸãããã®ã·ãªãŒãºã¯ãã£ããä»åã§çµããã«ããããšæããŸãã
TiDBã®ãã©ã³ã¶ã¯ã·ã§ã³
TiDBã®ãã©ã³ã¶ã¯ã·ã§ã³ã«ã€ããŠæžãããããŒãžã¯ãã¡ãã
TiDBã¯æ²èŠ³çã楜芳çã®ããããã®ãã©ã³ã¶ã¯ã·ã§ã³ã¢ãŒãã䜿çšããåæ£ãã©ã³ã¶ã¯ã·ã§ã³ããµããŒãããŠããŠãããã©ã«ãã§ã¯
æ²èŠ³çãã©ã³ã¶ã¯ã·ã§ã³ã¢ãŒãã䜿çšããããã§ãã
TiDB supports distributed transactions using either pessimistic or optimistic transaction mode. Starting from TiDB 3.0.8, TiDB uses the pessimistic transaction mode by default.
ãã®ããŒãžã§ã¯äžè¬çãªãã©ã³ã¶ã¯ã·ã§ã³ã®æäœã«ã€ããŠæžãããŠããŸãããç¹åŸŽçãªãã®ãæããŠãããŸãããã
BEGIN
ãŸãã¯START TRANSACTION
ã§æ°ãããã©ã³ã¶ã¯ã·ã§ã³ãéå§ãã- ãã®æã«çŸåšã®ã»ãã·ã§ã³ã§ãã©ã³ã¶ã¯ã·ã§ã³ãåŠçäžã ã£ãå Žåããã®ãã©ã³ã¶ã¯ã·ã§ã³ãã³ãããããŠããæ°ãããã©ã³ã¶ã¯ã·ã§ã³ãéå§ãã
- ããã©ã«ãã¯ãªãŒãã³ãããïŒMySQLãšã®äºææ§ã®ããïŒ
- DDLã¯ãªãŒãã³ããããããããŒã«ããã¯ã¯ã§ããªã
- ãã©ã³ã¶ã¯ã·ã§ã³äžã«DDLãå®è¡ãããšãçŸåšã®ãã©ã³ã¶ã¯ã·ã§ã³ãã³ãããããåŸã«DDLãå®è¡ãã
- 楜芳çãã©ã³ã¶ã¯ã·ã§ã³ã¯ããã©ã«ãã§DMLã®å®è¡æã«äž»ããŒå¶çŽãŸãã¯äžæå¶çŽããã§ãã¯ããªã
- ãã§ãã¯ã¯ã³ãããæã«è¡ããã
- ãã®é 延ãã§ãã¯ã®æé©åã¯ããããã¯ãŒã¯éä¿¡ãåæžããããšã§ããã©ãŒãã³ã¹ã®åäžãçã£ããã®
- èšå®ã§ç¡å¹ã«ããããšãã§ãã
- ããã©ã«ãã§ã¯ã²ãšã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã®ãµã€ãºã¯100MB以äžã§ããå¿
èŠããã
- èšå®ã§å€æŽå¯èœ
- ãã©ã³ã¶ã¯ã·ã§ã³ã«å¯ŸããTiDBããã»ã¹ã®ã¡ã¢ãªãŒäœ¿çšéã¯ãã©ã³ã¶ã¯ã·ã§ã³ã®ãµã€ãºã®2ã3å以äžã«ãªãããããµãŒããŒã®æ®ãã¡ã¢ãªãŒéã«ãå¶éãåãã
Causal consistencyïŒå æäžè²«æ§ïŒ
TiDBã¯Causal consistencyïŒå æäžè²«æ§ïŒããµããŒãããŠããŠãã³ãããæã«PDããã¿ã€ã ã¹ã¿ã³ããååŸããå¿
èŠããªããªããã³ãããã®
åŸ
ã¡æéãçããªããŸãã
Causal consistencyãæå¹ã«ãããã©ã³ã¶ã¯ã·ã§ã³ã¯ä»¥äžã®ã³ãã³ãã§éå§ã§ããŸãã
START TRANSACTION WITH CAUSAL CONSISTENCY ONLY;
TiDBãããã©ã«ãã§ä¿èšŒããã®ã¯Linear ConsistencyïŒç·åœ¢äžè²«æ§ïŒã§ãã
åèïŒ
Eventual Consistencyまでの一貫性図解大全 #分散システム - Qiita
ããšãã°ã
ãã©ã³ã¶ã¯ã·ã§ã³1ãšãã©ã³ã¶ã¯ã·ã§ã³2ãããããã©ã³ã¶ã¯ã·ã§ã³1ãã³ããããããåŸã«ãã©ã³ã¶ã¯ã·ã§ã³2ãã³ããããããå Žåã
è«ççã«ã¯ãã©ã³ã¶ã¯ã·ã§ã³2ã¯ãã©ã³ã¶ã¯ã·ã§ã³1ã®åŸã«çºçããŸãã
Causal consistencyã¯Linear Consistencyããã匱ããCausal consistencyã§ã¯ãã©ã³ã¶ã¯ã·ã§ã³1ãšãã©ã³ã¶ã¯ã·ã§ã³2ã«ãã£ãŠããã¯ãŸãã¯
æžã蟌ãŸããããŒã¿ã亀é¯ããŠããå Žåã®ã¿ã2ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã®ã³ãããé ãšçºçé ãä¿èšŒãããŸãã
ããã¯ãããŒã¿ããŒã¹ã2ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã®éã«å æé¢ä¿ãããããšãç¥ã£ãŠããããšãæå³ããŠããŸãããŸããçŸåšã®TiDBã¯
å€éšããå æé¢ä¿ãæž¡ãããããšããµããŒãããŠããŸããã
Causal consistencyãæå¹ã«ãªã£ãŠãããã©ã³ã¶ã¯ã·ã§ã³ã«ã¯ã次ã®3ã€ã®ç¹åŸŽããããŸãã
- æœåšçãªå æé¢ä¿ãæã€ãã©ã³ã¶ã¯ã·ã§ã³ã¯ãäžè²«ããè«ççãªé åºãšç©ççãªã³ãããé åºãæã€
- å æé¢ä¿ã®ãªããã©ã³ã¶ã¯ã·ã§ã³ã§ã¯ãäžè²«ããè«ççãªé åºãšç©ççãªã³ãããé åºãä¿èšŒãããªã
- ããã¯ãªãã®èªã¿åãã§ã¯å æé¢ä¿ã¯äœãããªã
æœåšçãªå æé¢ä¿ãæã€ãã©ã³ã¶ã¯ã·ã§ã³ã¯ãäžè²«ããè«ççãªé åºãšç©ççãªã³ãããé åºãæã€
å ·äœçãªäŸã¯ãã¡ããCausal consistencyãæå¹ã«ãã2ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã瀺ããŠããŸãã
ãã®äŸã®å Žåã2ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã¯åãidã®ã¬ã³ãŒããããã¯ãå€æŽããŠããŸããã€ãŸã2ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«ã¯æœåšçãª
å æé¢ä¿ããããŸãããã®å ŽåãCausal consistencyãæå¹ã«ããŠããŠããã©ã³ã¶ã¯ã·ã§ã³2ã¯ãã©ã³ã¶ã¯ã·ã§ã³1ã®åŸã«çºçããå¿
èŠã
ãããŸãã
ãªã®ã§ããã©ã³ã¶ã¯ã·ã§ã³2ã®idã2ã®ã¬ã³ãŒãã«å¯Ÿããå€æŽãèªã¿åãããã«ã¯ããã©ã³ã¶ã¯ã·ã§ã³1ãå®äºããŠããå¿ èŠããããŸãã
å æé¢ä¿ã®ãªããã©ã³ã¶ã¯ã·ã§ã³ã§ã¯ãäžè²«ããè«ççãªé åºãšç©ççãªã³ãããé åºãä¿èšŒãããªã
å ·äœçãªäŸã¯ãã¡ããCausal consistencyãæå¹ã«ãã2ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ãšãããã²ãšã€å¥ã®ãã©ã³ã¶ã¯ã·ã§ã³ã®äŸã瀺ããŠããŸãã
ãã©ã³ã¶ã¯ã·ã§ã³1ãæŽæ°ããŠããã¬ã³ãŒããšããã©ã³ã¶ã¯ã·ã§ã³2ãæŽæ°ããŠããã¬ã³ãŒãã¯ãããããå¥ã®idãªã®ã§2ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã®
éã«å æé¢ä¿ã¯ãããŸããããããã®ãã©ã³ã¶ã¯ã·ã§ã³ã«Causal consistencyãæå¹ã«ãªã£ãŠããå Žåãç©ççãªé çªã§ãã©ã³ã¶ã¯ã·ã§ã³1ã
ãã©ã³ã¶ã¯ã·ã§ã³2ã®é ã«ã³ãããããããšããŠãTiDBã¯ãã©ã³ã¶ã¯ã·ã§ã³ãè«ççã«ãã®é çªã«ãªãããšãä¿èšŒããŸããã
ãã©ã³ã¶ã¯ã·ã§ã³3ããã©ã³ã¶ã¯ã·ã§ã³1ã®ã³ãããåã«éå§ããããã©ã³ã¶ã¯ã·ã§ã³2ã®ã³ãããåŸã«idã1ã®ã¬ã³ãŒããèªã¿åãå Žåã
idã1ã®ã¬ã³ãŒãã®å€ã¯2ãidã2ã®ã¬ã³ãŒãã®å€ã¯0ïŒåæå€ïŒãèªã¿åãå¯èœæ§ããããŸãã
â»ã€ãŸãããã©ã³ã¶ã¯ã·ã§ã³2ã®ããŒã¿ã¯ã³ãããåŸããã©ã³ã¶ã¯ã·ã§ã³1ã®ããŒã¿ã¯ã³ãããåã®ç¶æ
ã®ãã®ãèŠããå¯èœæ§ããã
ããã¯ãªãã®èªã¿åãã§ã¯å æé¢ä¿ã¯äœãããªã
å ·äœçãªäŸã¯ãã¡ããCausal consistencyãæå¹ã«ãã2ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã瀺ããŠããŸãã
Transactions / Causal consistency / Reads without lock do not create causal relationship
ãã©ã³ã¶ã¯ã·ã§ã³2ã¯idã1ã®ã¬ã³ãŒããæŽæ°ãããã©ã³ã¶ã¯ã·ã§ã³1ã¯åããidã1ã®ã¬ã³ãŒããèªã¿åã£ãŠããŸãããèªã¿åãæã«ããã¯ã
ååŸããŠããªãã®ã§2ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã®éã«å æé¢ä¿ã¯äœãããŸããã
2ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã¯Write SkewïŒâ»ïŒãçããŠããŸãã
â»ãããã©ã³ã¶ã¯ã·ã§ã³T1ãxã®å€ãèªã¿åã£ãŠyã®å€ãå€æŽããå¥ã®ãã©ã³ã¶ã¯ã·ã§ã³T2ãyã®å€ãèªã¿åã£ãŠxã®å€ãå€æŽããæãäžè²«æ§ã®ãªãå€æŽã«ãªã£ãŠããŸãããš
ãã®å Žåã2ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«å æé¢ä¿ããããšãããäžåçã§ãããCausal consistencyãæå¹ã«ãªã£ãŠãããã®2ã€ã®
ãã©ã³ã¶ã¯ã·ã§ã³ã«æ確ãªè«ççãªé åºããããŸããã
ã³ãããåé¢ã¬ãã«
ã³ãããåé¢ã¬ãã«ã«ã€ããŠæžãããŠããããŒãžã¯ãã¡ãã
TiDB Transaction Isolation Levels | TiDB Docs
TiDBã¯READ COMMITTEDããµããŒãããŠããŸãããããã¯æ²èŠ³çãã©ã³ã¶ã¯ã·ã§ã³ã¢ãŒãã§ã®ã¿æå¹ãªããšãæžãããŠããŸãã
The Read Committed isolation level only takes effect in the pessimistic transaction mode. In the optimistic transaction mode, setting the transaction isolation level to Read Committed does not take effect and transactions still use the Repeatable Read isolation level.
楜芳çãã©ã³ã¶ã¯ã·ã§ã³ã¢ãŒãã®å Žåã¯ããã©ã³ã¶ã¯ã·ã§ã³åé¢ã¬ãã«ãREAD COMMITTEDã«èšå®ããŠãREPEATABLE READã§
åäœããããšãæžãããŠããŸãã
ã¡ãªã¿ã«ãTiDBããµããŒãããŠãããã©ã³ã¶ã¯ã·ã§ã³åé¢ã¬ãã«ã¯READ COMMITTEDãšREPEATABLE READã®2ã€ã®ããã§ãã
TiDB supports the following isolation levels: READ COMMITTED and REPEATABLE READ
Transaction overview / Transaction isolation levels
楜芳çãã©ã³ã¶ã¯ã·ã§ã³
楜芳çãã©ã³ã¶ã¯ã·ã§ã³ã«ã€ããŠæžãããŠããããŒãžã¯ãã¡ãã
TiDB Optimistic Transaction Model | TiDB Docs
TiDB 3.0.8以éã®ããã©ã«ãã®ãã©ã³ã¶ã¯ã·ã§ã³ã¢ãŒãã¯æ²èŠ³çãã©ã³ã¶ã¯ã·ã§ã³ãªã®ã§ãããæ²èŠ³çãã©ã³ã¶ã¯ã·ã§ã³ã«ã€ããŠæžããã
ããŒãžã¯æ¥œèŠ³çãã©ã³ã¶ã¯ã·ã§ã³ã«ã€ããŠã®èª¬æãèªãã§ããããšãåæã«ãªã£ãŠãããããªã®ã§ãå
ã«ãã¡ããèŠãŠãããŸãã
楜芳çãã©ã³ã¶ã¯ã·ã§ã³ã¯ç«¶åããæŽæ°ãã³ãããæã«æ€åºããããšã§ã¬ã³ãŒãããã¯ãååŸããããã»ã¹ãã¹ãããã§ããåæã«å®è¡ããã
ãã©ã³ã¶ã¯ã·ã§ã³ãåãã¬ã³ãŒããé »ç¹ã«æŽæ°ããªãå Žåã«ããã©ãŒãã³ã¹ãåäžããã¢ãŒãã§ããåæå®è¡ããããã©ã³ã¶ã¯ã·ã§ã³ã
åãã¬ã³ãŒããæŽæ°ããç¶æ³ãé »çºããå Žåã¯ãæ²èŠ³çãã©ã³ã¶ã¯ã·ã§ã³ãããããã©ãŒãã³ã¹ãæªããªãå¯èœæ§ããããŸãã
ãã£ãŠãç¹åŸŽçãªã®ã¯ã³ãããã倱æããããšããããã¢ããªã±ãŒã·ã§ã³ããã®ãšã©ãŒãé©åã«åŠçããå¿ èŠããããšããããšã§ããã
楜芳çãã©ã³ã¶ã¯ã·ã§ã³ã®åå
楜芳çãã©ã³ã¶ã¯ã·ã§ã³ã¯ãåæ£ãã©ã³ã¶ã¯ã·ã§ã³ããµããŒãããããã«2ãã§ãŒãºã³ããããæ¡çšããŠããŸãã
TiDB Optimistic Transaction Model / Principles of optimistic transactions
ãã®ã·ãŒã±ã³ã¹ãå³ç€ºãããã®ã¯ãã¡ãã§ãã
以äžã®æé ã«ãªã£ãŠããŸãã
- ã¯ã©ã€ã¢ã³ãããã©ã³ã¶ã¯ã·ã§ã³ãéå§ãã
- TiDBã¯PDããã¿ã€ã ã¹ã¿ã³ããååŸãããããçŸåšã®ãã©ã³ã¶ã¯ã·ã§ã³ã®äžæã®ãã©ã³ã¶ã¯ã·ã§ã³IDãšããŠååŸãã
- ãã®ãã©ã³ã¶ã¯ã·ã§ã³IDãstart_tsãšåŒã³ãå調å¢å ãã€ã°ããŒãã«ã«äžæãšãªãç¹æ§ãæã€
- start_tsã¯ããŒã¿ããŒã¹ã®ã¹ãããã·ã§ããã®ããŒãžã§ã³ãšããŠãæ©èœããïŒMVCCïŒ
- TiDBã¯PDããã¿ã€ã ã¹ã¿ã³ããååŸãããããçŸåšã®ãã©ã³ã¶ã¯ã·ã§ã³ã®äžæã®ãã©ã³ã¶ã¯ã·ã§ã³IDãšããŠååŸãã
- ã¯ã©ã€ã¢ã³ããèªã¿åããªã¯ãšã¹ããè¡ã
- TiDBã¯PDããã«ãŒãã£ã³ã°ïŒTiKVããŒãéã®ããŒã¿ã®åæ£ç¶æ³ïŒãåä¿¡ãã
- TiDBã¯TiKVããstart_tsã®ããŒãžã§ã³ã®ããŒã¿ãåãåã
- ã¯ã©ã€ã¢ã³ããæžã蟌ã¿ãªã¯ãšã¹ããè¡ã
- TiDBã¯æžã蟌ãŸããããŒã¿ãå¶çŽãæºãããŠãããã©ãã確èªãã
- æå¹ãªããŒã¿ã¯ãTiDBã®ãã®ãã©ã³ã¶ã¯ã·ã§ã³ã®ãã©ã€ããŒãã¡ã¢ãªãŒã«ä¿åããã 1 ã¯ã©ã€ã¢ã³ããã³ãããã®ãªã¯ãšã¹ããè¡ã
- TiDBã¯2ãã§ãŒãºã³ããããéå§ãããã©ã³ã¶ã¯ã·ã§ã³ã®ã¢ãããã¯æ§ãä¿èšŒããªããããŒã¿ãã¹ãã¢ã«ä¿æãã
- TiDBã¯æžã蟌ãããŒã¿ããäž»ããŒãéžæãã
- TiDBã¯PDãããªãŒãžã§ã³ååžã®æ å ±ãåãåããããã«å¿ããŠãã¹ãŠã®ããŒããªãŒãžã§ã³ããšã«ã°ã«ãŒãåãã
- TiDBã¯é¢ä¿ãããã¹ãŠã®TiKVã®ããŒãã«äºåæžã蟌ã¿ãªã¯ãšã¹ããéä¿¡ããTiKVã¯ç«¶åãŸãã¯æéåãã®ããŒãžã§ã³ãããã確èªãã
- æå¹ãªããŒã¿ããã£ãå Žåã¯ããã¯ãã
- TiDBã¯äºåæžã蟌ã¿ãã§ãŒãºã§ãã¹ãŠã®ã¬ã¹ãã³ã¹ãåä¿¡ããäºåæžã蟌ã¿ã¯æåãã
- TiDBã¯PDããã³ãããããŒãžã§ã³çªå·ãåãåããcommit_tsãšããŠããŒã¯ãã
- TiDBã¯äž»ããŒãé 眮ãããŠããTiKVããŒããžã®2åç®ã®ã³ããããéå§ããTiKVã¯ããŒã¿ããã§ãã¯ããŠäºåæžã蟌ã¿ãã§ãŒãºã§æ®ã£ãŠããããã¯ãåé€ãã
- TiDBã¯2ã€ç®ã®ãã§ãŒãºãæ£åžžã«çµäºããããšãå ±åããã¡ãã»ãŒãžãåä¿¡ãã
- TiDBã¯ãã©ã³ã¶ã¯ã·ã§ã³ãæ£åžžã«ã³ããããããããšãã¯ã©ã€ã¢ã³ãã«éç¥ããã¡ãã»ãŒãžãè¿ã
- TiDBã¯ãã©ã³ã¶ã¯ã·ã§ã³ã«æ®ã£ãŠããããã¯ãéåæã«åé€ãã
é·æã»çæ
楜芳çãã©ã³ã¶ã¯ã·ã§ã³ã®é·æãšçæã¯ä»¥äžã®ããã«ãªã£ãŠããŸãã
- é·æ
- ç解ãããã
- åäžã®è¡ã«ããšã¥ãã¯ãã¹ããŒããã©ã³ã¶ã¯ã·ã§ã³ãå®è£ ããŠãã
- åæ£ããã¯ç®¡ç
- çæ
- 2ãã§ãŒãºã³ãããã«ãããã©ã³ã¶ã¯ã·ã§ã³ã®é 延
- äžå€®éæš©çãªã¿ã€ã ã¹ã¿ã³ããå²ãåœãŠããµãŒãã¹ãå¿ èŠ
- 倧éã«ããŒã¿ãæžã蟌ãŸãããšOOMïŒout of memoryïŒã«ãªã
TiDB Optimistic Transaction Model / Advantages and disadvantages
ãã©ã³ã¶ã¯ã·ã§ã³ã®ãªãã©ã€
楜芳çãã©ã³ã¶ã¯ã·ã§ã³ã¢ãã«ã§ã¯ã競åãæ¿ããã·ããªãªã§ã¯æžã蟌ã¿å士ãã³ã³ããªã¯ãããããããã©ã³ã¶ã¯ã·ã§ã³ãã³ããããããªã
å ŽåããããŸãã
MySQLã§ã¯æ²èŠ³çåæå®è¡å¶åŸ¡ãå©çšãããããæžã蟌ã¿ã®SQLå®è¡äžã«ããã¯ãè¿œå ããREPEATABLE READåé¢ã¬ãã«ã§ã¯
çŸåšã®èªã¿åããèš±å¯ãããã®ã§ã³ãããæã«äŸå€ãçºçããããšã¯ãããŸããã
TiDBã§æ¥œèŠ³çåæå®è¡å¶åŸ¡ãå©çšããŸãããã¢ããªã±ãŒã·ã§ã³ãã³ãããæã®ãšã©ãŒãã³ããªã³ã°ã®é£ããã軜æžããããã«å
éšã§ã®
ãªãã©ã€ã¡ã«ããºã ãæäŸããŸãã
TiDB Optimistic Transaction Model / Transaction retries
ãã©ã³ã¶ã¯ã·ã§ã³ã®ãªãã©ã€ã¯tidb_disable_txn_auto_retry
ãOFF
ã«ããããšã§æå¹ã«ãªããããã©ã«ãã§ã¯ç¡å¹ã«ãªã£ãŠããŸãã
ããã¯åè©Šè¡ãè¡ãããšã§æŽæ°ã倱ãããããREPEATABLE READåé¢ã¬ãã«ãæãªãå¯èœæ§ãããããã§ãã
ããã¯ãªãã©ã€ã®å¶éã§ããããã®çç±ã¯ä»¥äžã®æé ã§èª¬æã§ããŸãã
- æ°ããã¿ã€ã ã¹ã¿ã³ããå²ãåœãŠãstart_tsãšãã
- æžã蟌ã¿æäœãå«ãSQLæããªãã©ã€ãã
- 2ãã§ãŒãºã³ããããå®è£ ãã
2çªç®ã®ã¹ãããã§ã¯TiDBã¯æžã蟌ã¿æäœãå«ãSQLæã®ã¿ããªãã©ã€ããŸãããããããªãã©ã€äžã«TiDBã¯ãã©ã³ã¶ã¯ã·ã§ã³ã®éå§ã
è¡šãæ°ããããŒãžã§ã³çªå·ãåãåããŸããã€ãŸããTiDBã¯æ°ããstart_tsããŒãžã§ã³ã®ããŒã¿ã䜿çšããŠSQLæããªãã©ã€ããããã
ä»ã®ãã©ã³ã¶ã¯ã·ã§ã³ã®æŽæ°çµæã䜿çšããŠããŒã¿ãæŽæ°ãããšREPEATABLE READã«éåããçµæãççŸããå¯èœæ§ããããŸãã
ã¢ããªã±ãŒã·ã§ã³ãLost Updateã蚱容ã§ããREPEATABLE READåé¢ã¬ãã«ãå¿
èŠãšããªãå Žåã¯ãã©ã³ã¶ã¯ã·ã§ã³ã®ãªãã©ã€æ©èœã
æå¹ã«ã§ããŸãã
ãªãããªãã©ã€åæ°ã®äžéã¯tidb_retry_limit
ã§æå®ããŸãã
競åã®æ€åº
競åã®æ€åºã¯TiKVã¬ã€ã€ãŒã§è¡ãããŠãScheduler latch wait duration
ã¡ããªã¯ã¹ãåç
§ããããšã§ç¢ºèªã§ããããã§ãã
TiDB Optimistic Transaction Model / Conflict detection
Scheduler latch wait duration
ãé«ãäœéãªæžã蟌ã¿ããªãå Žåã¯ãæžã蟌ã¿ç«¶åãå€æ°çºçããŠãããšèšããããã§ãã
æ²èŠ³çãã©ã³ã¶ã¯ã·ã§ã³
æ²èŠ³çãã©ã³ã¶ã¯ã·ã§ã³ã¯ãTiDB 3.0.8以éã¯ããã©ã«ãã®ãã©ã³ã¶ã¯ã·ã§ã³ã¢ãŒãã§ããæ²èŠ³çãã©ã³ã¶ã¯ã·ã§ã³ã«ã€ããŠ
æžãããŠããããŒãžã¯ãã¡ãã
TiDB Pessimistic Transaction Mode | TiDB Docs
æ°ããéå§ãããã©ã³ã¶ã¯ã·ã§ã³ãã©ã®ã¢ãŒãã«ãªããã¯ãtidb_txn_mode
ã§èšå®ã§ããããã§ãããŸãBEGIN PESSIMISTIC
ã§
æ瀺çã«æ²èŠ³çãã©ã³ã¶ã¯ã·ã§ã³ãéå§ããããšãã§ããããã§ãã
TiDB Pessimistic Transaction Mode / Switch transaction mode
æ²èŠ³çãã©ã³ã¶ã¯ã·ã§ã³ã®æ¯ãèã
æ²èŠ³çãã©ã³ã¶ã¯ã·ã§ã³ã®æ¯ãèãã®äŸã¯ãã¡ããåãããŒã¿ãåç §ããã3ã€ã®ã»ãã·ã§ã³ãšãã©ã³ã¶ã¯ã·ã§ã³ã«ã€ããŠæžãããŠããŸãã
TiDB Pessimistic Transaction Mode / Behaviors
- ã»ãã·ã§ã³1ã¯ããŒãã«ãäœæããŠãæ²èŠ³çãã©ã³ã¶ã¯ã·ã§ã³ãéå§ããŠããŒã¿ãæŽæ°ïŒa = a + 1ïŒãã
- ã»ãã·ã§ã³1ãã³ãããããåã«ãã»ãã·ã§ã³2ãæ²èŠ³çãã©ã³ã¶ã¯ã·ã§ã³ãéå§
- ã»ãã·ã§ã³2ã¯ããã©ã³ã¶ã¯ã·ã§ã³ãéå§ããæããåã«ã³ããããããããŒã¿ãã€ãŸãã»ãã·ã§ã³1ãæŽæ°ããåã®ããŒã¿ïŒa = 1ïŒãåç §ãã
- ã»ãã·ã§ã³3ãæ²èŠ³çãã©ã³ã¶ã¯ã·ã§ã³ãéå§ããselect for updateã§åãããŒã¿ã«æ²èŠ³çããã¯ãååŸããããšããããã»ãã·ã§ã³1ã®ãã©ã³ã¶ã¯ã·ã§ã³ãããã¯ããŠããããåŸ ã¡ã«ãªã
- ã»ãã·ã§ã³1ãã³ããããã
- ã»ãã·ã§ã³2ã¯ãã©ã³ã¶ã¯ã·ã§ã³ãçµäºããŠããªãã®ã§ãå€ã1ã®ãŸãŸã®aãåç §ãç¶ãã
ãã€ã³ãã¯ãã¡ãã
- insertãupdateãdeleteã¯ã³ãããããã"ææ°ã®"ããŒã¿ãèªã¿åã
- ãã©ã³ã¶ã¯ã·ã§ã³ãã³ããããŸãã¯ããŒã«ããã¯ããããšãããã¯ã¯è§£é€ããã
- selectãè¡ããã©ã³ã¶ã¯ã·ã§ã³ã¯ãããã¯ãããªã
- ãã ãselect for updateã®å Žåã¯ãã³ãããããã"ææ°ã®"ããŒã¿ã«æ²èŠ³çããã¯ãé©çšãã
MySQLïŒInnoDBïŒãšã®éã
MySQLïŒInnoDBïŒãšã®éãã¯ãã¡ãã«æžãããŠããŸãã
TiDB Pessimistic Transaction Mode / Difference with MySQL InnoDB
ãããªããšãæžãããŠããŸãã
- ã®ã£ããããã¯ããµããŒãããŠããªã
- select lock in share modeããµããŒãããŠããªã
- MySQLã§ã¯DDLã®å®è¡ã¯ãããã¯ãããå¯èœæ§ãããããTiDBã¯ãããã¯ãããªãã®ã§æ²èŠ³çãã©ã³ã¶ã¯ã·ã§ã³ã倱æããããšããã
- start transaction with consistent snapshotãå®è¡ããéãMySQLã§ã¯ä»ã®ãã©ã³ã¶ã¯ã·ã§ã³ãäœæããããŒã¿ãèªã¿åãããšãã§ããããTiDBã§ã¯ã§ããªã
- ãã©ã³ã¶ã¯ã·ã§ã³ãèªåã³ãããã®å Žåã楜芳çããã¯ãåªå
ããã
- æ²èŠ³çã¢ãã«ã§ã¯èªåã³ãããã®ãã©ã³ã¶ã¯ã·ã§ã³ã§ã¯æåã«ãªãŒããŒããããå°ãªã楜芳çã¢ãã«ã䜿ã£ãŠã³ããããè©Šã¿ã
- æžã蟌ã¿ã競åããå Žåã¯æ²èŠ³çã¢ãã«ã䜿ã£ãŠãªãã©ã€ãã
- embedded selectã§èªã¿åãããããŒã¿ã¯ããã¯ãããªã
- TiDBã®ãã©ã³ã¶ã¯ã·ã§ã³ã¯GCããããã¯ãããããã©ã«ãã§ã¯æ²èŠ³çãã©ã³ã¶ã¯ã·ã§ã³ã®æ倧å®è¡æéã¯1æéã«å¶éããã
æ²èŠ³çãã©ã³ã¶ã¯ã·ã§ã³ã¢ãŒãã§ãµããŒããããŠãããã©ã³ã¶ã¯ã·ã§ã³åé¢ã¬ãã«ã¯ãREPEATABLE READãšREAD COMMITTEDã§ãã
TiDB Pessimistic Transaction Mode / Isolation level
æ²èŠ³çãã©ã³ã¶ã¯ã·ã§ã³ã®ã³ãããããã»ã¹
æ²èŠ³çãã©ã³ã¶ã¯ã·ã§ã³ã®ã³ãããããã»ã¹ã«ã€ããŠæžãããŠããã®ã¯ãã¡ãã2ãã§ãŒãºã³ãããã§ããããšãæžãããŠããŸãã
TiDB Pessimistic Transaction Mode / Pessimistic transaction commit process
æ²èŠ³çãã©ã³ã¶ã¯ã·ã§ã³ã¯ã2ãã§ãŒãºã³ãããã®åã«Acquire Pessimistic Lockãã§ãŒãºãè¿œå ããŸãããã®ãã§ãŒãºã«ã¯æ¬¡ã®æé ã
å«ãŸããŠããŸãã
- TiDBã¯ã¯ã©ã€ã¢ã³ããããã©ã³ã¶ã¯ã·ã§ã³ãéå§ãããªã¯ãšã¹ãã§ããbeginãåãåããšãçŸåšã®ã¿ã€ã ã¹ã¿ã³ããstart_tsãšããŠæ±ã
- ããã¯æ¥œèŠ³çãã©ã³ã¶ã¯ã·ã§ã³ã¢ãŒããšåã
- TiDBãµãŒããŒã¯ã¯ã©ã€ã¢ã³ãããæžã蟌ã¿ãªã¯ãšã¹ããåãåããšã TiKVãµãŒããŒã«æ²èŠ³çããã¯ãååŸãããªã¯ãšã¹ããéå§ããããã¯ã¯TiKVãµãŒããŒã«ä¿æããã
- ã¯ã©ã€ã¢ã³ããã³ãããããªã¯ãšã¹ããããšãTiDBã¯æ¥œèŠ³çãã©ã³ã¶ã¯ã·ã§ã³ã¢ãŒããšåæ§ã«2ãã§ãŒãºã³ããããéå§ãã
ãã€ãã©ã€ã³åãããããã¯åŠç
æ²èŠ³çããã¯ãååŸããéã®ãã€ãã©ã€ã³åã«ã€ããŠããã¡ãã«æžãããŠããŸãã
TiDB Pessimistic Transaction Mode / Pipelined locking process
ãããããã€ãã©ã€ã³åãšã¯ïŒãšããããšã§ããããã¡ããèæ¯ã«ãªã£ãŠããŸãã
- æ²èŠ³çããã¯ãè¡ããšããããšã¯TiKVã«ããŒã¿ãæžã蟌ãããšãæå³ããŠãããRaftãéããŠã³ãããããã³é©çšã§ããåŸã«TiDBã«æåãããšããã¬ã¹ãã³ã¹ãè¿ãããšãã§ãã
- ãã®ããã楜芳çãã©ã³ã¶ã¯ã·ã§ã³ãšæ¯èŒãããšã¬ã€ãã³ã·ãŒãé«ããªã
ãã®ããã¯ã®ãªãŒããŒããããåæžããããã®ãã®ããTiKVã«å®è£ ããããã€ãã©ã€ã³åãããããã¯åŠçã§ãã
ãã¡ãã®å³ã®ããã«ãããŒã¿ãããã¯ã®èŠä»¶ãæºãããšTiKVã¯ããã«TiDBã«ã¬ã¹ãã³ã¹ãè¿ããåŸç¶ã®ããã¯åŠçã¯éåæã«å®è¡ããŸãã
ãã®çµæãã¬ã€ãã³ã·ãŒãåæžããæ²èŠ³çãã©ã³ã¶ã¯ã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžããŸãããã¬ãŒããªãããããTiKVã§ãããã¯ãŒã¯
ããŒãã£ã·ã§ã³ãçºçããããTiKVããŒããããŠã³ãããšæ²èŠ³çããã¯ã®éåææžã蟌ã¿ã倱æã次ã®ãããªç¶æ³ãçãå¯èœæ§ããããŸãã
- åãããŒã¿ãå€æŽããä»ã®ãã©ã³ã¶ã¯ã·ã§ã³ããããã¯ã§ããªããªã
- ã¢ããªã±ãŒã·ã§ã³ãããã¯ãããã¯åŸ æ©ã®ä»çµã¿ã«äŸåããŠããå Žåãã¢ããªã±ãŒã·ã§ã³ããžãã¯ã®æ£ç¢ºæ§ã圱é¿ãåãã
- äœãå¯èœæ§ã§ãã©ã³ã¶ã¯ã·ã§ã³ã倱æãã
- ãã©ã³ã¶ã¯ã·ã§ã³ã®æ£ç¢ºæ§ã«ã¯åœ±é¿ããªã
ããã¯ã®ãã€ãã©ã€ã³åã¯ããã©ã«ãã§æå¹ã«ãªã£ãŠããŸãã
ã¢ããªã±ãŒã·ã§ã³ãããã¯ãŸãã¯ããã¯åŸ
æ©ã®ä»çµã¿ã«äŸåããŠããå ŽåããTiKVã¯ã©ã¹ã¿ãŒã«ç°åžžãçºçããŠãå¯èœãªéããã©ã³ã¶ã¯ã·ã§ã³ã®
ã³ããããæåããããå Žåã¯ãããã¯ã®ãã€ãã©ã€ã³åãç¡å¹ã«ããå¿
èŠããããŸãã
ãããã«
TiDBã®ã¢ãŒããã¯ãã£ãŒã®ãã¡ããã©ã³ã¶ã¯ã·ã§ã³ãŸãããèŠãŠã¿ãŸããã
ãã£ããæ°ã«ãªããšããã ã£ãã®ã§ããã楜芳çãæ²èŠ³çã®2çš®é¡ãããããšããã®åºæ¬çãªèãæ¹ãªã©ãç¥ãããšãã§ããŠè¯ãã£ãããªãš
æããŸããæ¬åœã«ãå°å
¥éšåã ãã§ãããã©ã
ãšããããã§ãTiDBã®ã¢ãŒããã¯ãã£ãŒããã£ãããšææ¡ããããšããã·ãªãŒãºã¯ä»åã§ãã£ãããããŸãã§ãã