ããã¯ããªã«ãããããŠæžãããã®ïŒ
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ã®ã¢ãŒããã¯ãã£ãŒããã£ãããšææ¡ããããšããã·ãªãŒãºã¯ä»åã§ãã£ãããããŸãã§ãã