![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySQL是怎样运行的
文章平均质量分 80
野鸭丁真
这个作者很懒,什么都没留下…
展开
-
我们都是小青蛙文章------锁
type_mode是用于区分这个锁结构到底是行锁还是表锁,如果是表锁的话是意向锁、直接 对表加锁、还是AUTO-INC锁,如果是行锁的话,具体是正经记录锁、gap锁还是next-key锁。InnoDB的行锁是与记录一一对应的。即使是对于gap锁来说,在实现 上也是为某条记录生成一个锁结构,然后该锁结构的类型是gap锁而已,并不是专门为某个 区间生成一个锁结构。该gap锁的功能就是每当有别的事务插入记录时,会检查一下待插入 记录的下一条记录上是否已经有一个gap锁的锁结构,如果有的话就进入阻塞状态。..原创 2022-02-27 13:45:27 · 302 阅读 · 0 评论 -
MySQL锁
怎么解决脏读、不可重复读、幻读这些问题呢?其实有两种可选的解决方案: 方案一:读操作利用多版本并发控制(MVCC),写操作进行加锁。 MVCC通过生成一个ReadView,然后通过ReadView找到符合条件的记录版本(历史版本是由undo日志构建的),其实就像是在生成ReadView的那个时刻做了一次时间静止(就像用相机拍了一个快照),查询语句只能读到在生成ReadView之前已提交事务所做的更改,在生成ReadView之前未提交的事务或者之后才开启的事务所做的更改是看不到的。而写操作肯定针对的原创 2022-02-26 20:54:02 · 332 阅读 · 0 评论 -
事务隔离级别和MVCC
脏写:如果一个事务修改了另一个未提交事务修改过的数据,那就意味着发生了脏写。脏读:如果一个事务读到了另一个未提交事务修改过的数据,那就意味着发生了脏读不可重复读:事务两次读同一个数据结果却不一样。 和脏读的区别在于,脏读读到的是未提交的数据,不可重复读读到的是其他事务已经提交的数据。幻读:两次查同一范围,查询到的数据数目不同(因为有另一事务操作)。给这些问题按照严重性来排一下序:脏写 > 脏读 > 不可重复读 > 幻读4个隔离级别: READ UNCOM原创 2022-02-26 13:00:02 · 984 阅读 · 0 评论 -
MySQL是怎样运行的读书笔记-------事务+redo日志+undo日志
把需要保证原子性、隔离性、一致性和持久性的一个或多个数据库操作称之为一个事务。有当事务处于提交的或者中止的状态时,一个事务的生命周期才算是结束了。对于已经提交的事务来说,该事务对数据库所做的修改将永久生效,对于处于中止状态的事务,该事务对数据库所做的所有修改都会被回滚到没执行该事务之前的状态。事务的语法开启事务BEGIN [WORK];START TRANSACTION;在START TRANSACTION语句后边跟随几个修饰符,就是它们几个:READ ONLY:标.原创 2022-02-25 13:20:54 · 649 阅读 · 0 评论 -
《MySQL是怎么样运行的》读书笔记五---InnoDB 统计数据是如何收集的
InnoDB提供了两种存储统计数据的方式: 永久性的统计数据(磁盘中) 这种统计数据存储在磁盘上,也就是服务器重启之后这些统计数据还在。 非永久性的统计数据(内存中) 这种统计数据存储在内存中,当服务器关闭时这些这些统计数据就都被清除掉了,等到服务器重启之后,在某些适当的场景下才会重新收集这些统计数据。 控制存储方式的系统变量:innodb_stats_persistent的值默认是OFF,默认是存储到内存的,之后的版本中innodb_stats_persistent的值默认是O原创 2022-02-15 17:10:51 · 408 阅读 · 0 评论 -
《MySQL是怎么样运行的》读书笔记三--单表查询和两表连接
单表访问方法查询的执行方式大致分为下边两种:使用全表扫描进行查询使用索引进行查询。唯一二级索引就是作为索引的那列值都是唯一的,没有重复的。const意思是常数级别的,代价是可以忽略不计的。不过这种const访问方法只能在主键列或者唯一二级索引列和一个常数进行等值比较时才有效ref用普通二级索引找到对应记录的id值,然后再回表到聚簇索引中查找完整的用户记录。ref_or_null有时候我们不仅想找出某个二级索引列的值等于某个常数的记录,还想把该列的值为NULL的记录原创 2022-02-11 17:18:23 · 293 阅读 · 0 评论 -
《MySQL是怎么样运行的》读书笔记二---表空间
MySQL 的数据目录本章就是要唠叨一下InnoDB和MyISAM这两个存储引擎的数据如何在文件系统中存储的。数据目录:MySQL服务器程序在启动时会到文件系统的某个目录下加载一些文件,之后在运行过程中产生的数据也都会存储到这个目录下的某些文件中,这个目录就称为数据目录,我们下边就要详细唠唠这个目录下具体都有哪些重要的东西。数据目录和安装目录的区别数据目录是用来存储MySQL在运行过程中产生的数据。数据目录的结构我们每当我们新建一个数据库时,进行的操作: 在数据目录下创建一个和原创 2022-02-11 15:54:44 · 322 阅读 · 0 评论 -
《MySQL是怎么样运行的》读书笔记一 数据页+索引
登录MySQLcmd命令行中输入:mysql -hlocalhost -uroot -p之后输入密码。对于Windows系统来说,默认的用户名是ODBC,你可以通过设置环境变量USER来添加一个默认用户名。MySQL采用TCP作为服务器和客户端之间的网络通信协议。MySQL服务器启动的时候会默认申请3306端口号,之后就在这个端口号上等待客户端进程进行连接,用书面一点的话来说,MySQL服务器会默认监听3306端口。我们在使用mysql来启动客户端程序时,在-h参数后必须跟随原创 2022-01-18 18:12:45 · 865 阅读 · 0 评论 -
《MySQL是怎么样运行的》读书笔记四--基于成本的优化
基于成本的优化MySQL中一条查询语句的执行成本是由下边这两个方面组成的:查询成本=I/O成本+CPU成本I/O成本:从磁盘到内存这个加载的过程损耗的时间称之为I/O成本。CPU成本:读取以及检测记录是否满足对应的搜索条件、对结果集进行排序等这些操作损耗的时间称之为CPU成本。成本常数:一个页面花费的成本默认是1.0,读取以及检测一条记录是否符合搜索条件的成本默认是0.2。1.0、0.2这些数字称之为成本常数。基于成本的优化步骤: 根据搜索条件,找出所有可能使用的索引(找出原创 2022-02-15 16:42:50 · 1142 阅读 · 0 评论