高性能 MySQL 学习 10 月

2021-10-29 18:36:38 +08:00
 MaoRong

服务器逻辑架构

客户端
    连接线程处理
        查询缓存
        解析器
            优化器
                存储引擎

事务

特性

1.原子(事务内所有 sql 为一个原子),一致(事务内所有 sql 一起提交),隔离,持久(永久保留在数据库中)

隔离级别

1.未提交读( READ UNCOMMITTED ),事务可以读取未提交的数据,也叫脏读。
2.提交读( READ COMMITED ),一个事务从开始到提交所做的任务修改对其他事务都是不可见的,也叫不可重复读。
3.可重复读( REPEATABLE READ ),解决脏读的问题,保证同一个事务多次读取同样的记录结果是一致的,但随之会产生幻读(当一个事务读取某范围值时,另一个事务插入了新的记录,之前的事务再次读取改范围的记录,产生的幻行)的问题,InnoDB 和 XtraDB 存储引擎通过多版本并发控制解决幻读问题( MVCC ),可重复读时 musql 默认的事务隔离级别。
4.可串行化( SERIALIZABLE ),最高隔离级别,强制事务串行执行,避免了幻读,给每一行枷锁,导致大量的超时和锁争用的问题。

死锁

1.两个事务里的 sql 的锁被对方锁定,陷入的死循环。
2.InnoDB 目前处理死锁的方法是,将只有最少行级的排他锁(写锁)的事务进行回滚。?

事务日志

1.又称预写式日志,事务日志持久化之后,内存中被修改的数据在后台慢慢刷回到磁盘,修改数据要写两次磁盘。?

多版本并发控制

1.MVCC 通过保存数据的某个时间点快照来实现
2.通过两个隐藏列,一个列是保存行的创建时间,一个是行的过期时间(或删除时间)
3.MVCC 只在 REPEATABLE READ 和 READ COMMITTED 两个隔离级别下工作

存储引擎

1.数据库可称 schema 保存在数据目录下的一个子目录,创建表时,mysql 会在数据库子目录下的创建一个和表同名的.frm 文件来保存表的定义

行的格式

1.可选值 Dynamic,Fixed 或者 Compressed,Dynamic 的行长度是可变的如 varchar 和 blob ,Fixed 的行长度是固定的,如 char 和 interger

2353 次点击
所在节点    程序员
6 条回复
freelancher
2021-10-30 15:18:05 +08:00
?发的是啥。有好几个错误的理解。。。。还好学过。不然都带偏了。。。
statumer
2021-10-31 16:27:03 +08:00
隔离级别这块儿可以再多研究研究
MaoRong
2021-11-01 09:20:53 +08:00
@freelancher 呃呃呃呃,能具体指出来嘛,多谢
@statumer 具体研究指的是
xiaotianhu
2021-11-01 10:10:27 +08:00
这是把 v2 当 CSDN 来用了?
fkdtz
2021-11-01 10:33:50 +08:00
建议打回重看
freelancher
2021-11-01 14:45:09 +08:00
但凡有认真读完资料也不会理解成这样吧。基础功还是要练一下。O 了。不多说了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/811600

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX