MySQL中大对象多版本并发控制的示例剖析
发布时间:2022-02-08 17:41:07 所属栏目:MySql教程 来源:互联网
导读:小编给大家分享一下MySQL中大对象多版本并发控制的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! MySQL 8.0:InnoDB中大对象的MVCC 在本文中,我将解释MySQL Inn
小编给大家分享一下MySQL中大对象多版本并发控制的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! MySQL 8.0:InnoDB中大对象的MVCC 在本文中,我将解释MySQL InnoDB存储引擎中大对象(LOB)设计的多版本并发控制(MVCC) 。 MySQL 8.0有一个新功能,允许用户部分更新大型对象,包括JSON文档 。 使用此部分更新功能,当LOB部分更新时,MVCC对LOB的工作方式已发生变化。 对于正常更新(完整更新),MVCC将像以前的版本一样工作。 让我们看一下MVCC在不涉及部分更新时的工作原理,然后考虑对LOB进行部分更新的用例。 MVCC 常规更新 我使用术语常规更新来指代不是部分更新的更新。 我将通过一个例子解释MVCC如何用于常规更新大对象。 我将为此目的使用以下mtr(1)测试用例: create table t1 ( f1 int primary key , f2 longblob ) engine = innodb ; insert into t1 values ( 1 , repeat ( 'a' , 65536 ) ) ; start transaction ; update t1 set f2 = repeat ( 'b' , 65536 ) where f1 = 1 ; -- echo # Connection con1: -- 对于使用MySQL客户端的用户,可能需要通过另开一个终端窗口建立新链接, 下同。 connect ( con1 , localhost , root , , ) ; -- echo # Must see the old value 'aaaaaaaaaa' select f1 , right ( f2 , 10 ) from t1 order by f1 ; -- echo # Connection default: connection default ; disconnect con1 ; commit ; drop table t1 ; 为了理解下面的解释,仔细理解上述测试用例非常重要。 测试场景如下: 最初,表t1包含单个记录(R1)。 事务trx1将记录更新为新值。 当trx1仍处于活动状态时,另一个事务trx2正在读取记录。 它将读取旧值。 表t1仅包含一个记录(R1)。 但是trx1和trx2会看到两个不同的值。 该表实际上只包含最新值(trx1所见的值),而trx2看到的值或记录是从撤消日志记录中获得的。 让我们看下面的图片来更好地理解它。 (编辑:好传媒网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |