From 1bdc9db292db1318cbf5d3853d3ff9d40ac75f23 Mon Sep 17 00:00:00 2001 From: asahi Date: Tue, 12 Aug 2025 01:41:07 +0800 Subject: [PATCH] =?UTF-8?q?doc:=20=E6=96=87=E6=A1=A3=E9=98=85=E8=AF=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mysql/mysql文档/mysql_mvcc_impl.md | 1 + mysql/mysql文档/mysql_事务.md | 9 +++++++++ 2 files changed, 10 insertions(+) create mode 100644 mysql/mysql文档/mysql_mvcc_impl.md diff --git a/mysql/mysql文档/mysql_mvcc_impl.md b/mysql/mysql文档/mysql_mvcc_impl.md new file mode 100644 index 0000000..d6e2392 --- /dev/null +++ b/mysql/mysql文档/mysql_mvcc_impl.md @@ -0,0 +1 @@ +# mysql mvcc diff --git a/mysql/mysql文档/mysql_事务.md b/mysql/mysql文档/mysql_事务.md index 987f5c1..f25c479 100644 --- a/mysql/mysql文档/mysql_事务.md +++ b/mysql/mysql文档/mysql_事务.md @@ -496,6 +496,15 @@ rollback segment的分配策略很简单,会依次尝试下一个活跃的roll #### undo for rollback 在回滚时,会按照undo record生成的时序,逆向进行回滚。回滚根据undo record的内容。 +#### undo for mvcc +mvcc中`“多版本”设计是为了读事务和写事务之间互相等待`。在传统的读写锁设计中,读写/写写之间都是互斥的,只要有事务持有读锁,则其他事务拿不到写锁;如果有事务持有写锁,则其他事务拿不到读锁和写锁。在多事务同时进行并发操作的场景下,如果采用读写锁进行相互等待,那么将会对性能造成很大的影响。 + +在采用多版本的设计后,每个读事务在对record进行读取时,`无需对record添加锁,而是查看读事务可见的历史版本即可`。 + +##### 历史版本 +在多版本设计中,“历史版本”在设计上等效于如下描述: +- 在读事务开启时,会针对整个数据库中的生成一个快照,后续该事务的读操作都从该快照中获取数据 + ### purge 表`t`中,`a`为聚簇索引,`b`为辅助索引,若执行如下sql ```sql