D25 - 乐观事务与悲观事务

前面提到TiDB支持乐观事务与悲观事务,接下来就实际透过例子来了解在这两种事务下,TiDB分别会做什麽操作。

首先在乐观事务的情境下,如下图所示,开启了两个transaction,而两边的transaction在下完更新语法之後,右边的transaction先执行commit。接着左边要执行commit的时候,会看到错误讯息write conflict。这是因为在乐观事务下,冲突会在执行commit的时候才做检查。
https://ithelp.ithome.com.tw/upload/images/20210921/20113220RklipCx0Hv.png

接着在悲观事务的情境下,一样开启了两个transaction,先在右边下了更新的语法,执行成功。接着在左边也下了更新的语法,会发现因为这笔资料被上锁了,所以左边的transaction在等待右边做commit的动作
https://ithelp.ithome.com.tw/upload/images/20210921/201132203DrYSBekV1.png
接下来在右边下commit指令,这时候可以看到左边的transaction也执行成功,执行时间22.38秒的时间就是因为在等待右边的transaction释放锁。
https://ithelp.ithome.com.tw/upload/images/20210921/20113220u205WH03r0.png

所以在乐观事务下,高并发会产生冲突错误的情况也会越频繁,这时候可以视使用情境决定是否开放自动retry,以及设定retry的次数。

SET global tidb_disable_txn_auto_retry = OFF;
SET global tidb_retry_limit = 10;

<<:  Day 21 总要接受外部的刺激

>>:  Day 19 信号

Day16 Let's ODOO: Report

Odoo提供建立report的功能,透过wkhtmltopdf来输出pdf,我们来写一个简单的范例,...

Day 07 : 操作基础篇 4 - 做好笔记备份 ,使用 iCloud 和 Google Drive 进行双重备份

前言 这是 Obsidian 使用教学 — 基础篇的第 4 篇文章。 上一篇文章 我详细介绍了「Th...

Powershell 入门之命令的输出

在命令的执行过程中,我们可能需要需要一些方式,使我们命令的输出更加友好;去除一些没有用的信息,只显示...

第二十五天:用 dokka 产生 API 文件

当我们在写函式库或框架的时候,通常表示这段逻辑很常用到,希望藉由抽取成函式库或框架来重复使用,减少重...

[Day6]-基础for回圈

基本for回圈 基本格式如下: for 变数 in sequences: 要执行的程序码 for回...