![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Mysql
mysql学习
肖肖肖肖小小
咿呀~
展开
-
MYSQL专题(十二):锁机制
多个事务更新同一行数据时,通过加锁避免脏写依靠锁机制让多个事务更新一行数据的时候串行化,避免同时更新一行数据。在MySQL里,假设有一行数据,此时有一个事务来更新这行数据,它会先判断有没有人加锁,如果没有人加锁,这个事务就会创建一个锁,里面包含了自己的trx_id和等待状态,然后把锁跟这行数据关联在一起。这行数据和关联的锁数据结构都是在内存里的。此时这行数据已经被加锁了,此时B过来想要修改这行数据,就会检查一下,当前这行数据有没有别人加锁,如果有,就等的排队,此时事务B也会生成一个锁数据结构,里面原创 2020-05-11 09:05:54 · 188 阅读 · 0 评论 -
MYSQL专题(十一):MVCC
MVCC前奏:undo log版本链我们每条数据都有2个隐藏字段,一个是trx_id,一个是roll_pointetrx_id:最近一次更新这条数据的事务idroll_pointer:指向你更新这个事务之前生成的undo log如果先新增一条数据,roll_pointer指向一个空的undo log,因为之前这条数据是没有的接着其他事务对这条数据进行操作,会形成一条...原创 2020-05-08 11:21:41 · 430 阅读 · 0 评论 -
MYSQL专题(十):多事务并发访问
多事务访问数据库对于我们的业务去访问数据库,往往都是多个线程并发执行多个事务的,对于数据库而言,他会有多个事务同时执行,可能这多个事务同时更新和查询同一条数据,所以这里会有一些问题需要数据库来解决多事务要是对缓存页里的同一条数据同时进行更新或者查询,此时会产生:脏读,脏写,不可重复读,幻读的问题脏写两个事务,事务A和事务B同时更新一条数据,事务A先把它更新为A值,事务B紧接着就把他...原创 2020-05-08 10:10:43 · 1038 阅读 · 0 评论 -
MYSQL专题(九):undo log
undo log:回滚日志在执行事务的时候,必须引入另一种日志,用于回滚,undo log回滚日志这个回滚日志记录的东西很简单,你要是在缓存页里执行了一个insert语句,那么在undo log日志里,这个操作记录的回滚日志就必须是有一个主键和一个对应的delete操作,要能让你把这次insert操作给回退了;如果执行的是delete语句,那么回滚的话,就应该执行一个insert操作;如果是...原创 2020-05-07 17:52:02 · 253 阅读 · 0 评论 -
MYSQL专题(八):redo log
mysql更新数据的过程图(如果没有redo log)这个机制最大的缺点在于万一一个事务里有增删改更新了缓存页,事务提交了,万一还没来得及让IO线程把缓存页刷新到磁盘文件里,此时MYSQL宕机了,然后内存数据丢失,你事务更新的数据就丢失了。但是也不能每一次事务提交,就把你的事务更新的缓存页刷新回磁盘文件中去,因为是随机读写,性能很差。因此引入redo log机制,提交事务的时候,绝对是保证...原创 2020-05-07 17:16:28 · 222 阅读 · 0 评论 -
MYSQL专题(七):Too Many Connections的原因和解决方案
ERROR 1040(HY000):Too many connections数据库的整体架构,数据库自己也有一个连接池,你的每个系统部署在一台机器上的时候,你那台机器上部署的系统实例/服务自己也是一个连接池的,你的系统每个连接Socket 都会对应着数据库连接池里的一个连接socket。当数据库报错Too many connections的时候,就是说他的连接池的连接已经满了,你的业务不能跟...原创 2020-05-06 16:27:24 · 5919 阅读 · 0 评论 -
MYSQL专题(六):MYSQL的日志顺序读写,数据文件随机读写以及linux底层原理
对于redo log,binlog这种日志进行的磁盘顺序读写在写redo log日志的时候,其实是不停的在一个日志文件末尾追加日志的,这就是磁盘顺序写。磁盘顺序写的性能其实是很高的,某种程度上来说,几乎可以跟内存随机读写的性能差不多,尤其是在数据库里其实也用了os cache机制,就是redo log顺序写磁盘之前,先进入os cache,就是操作系统管理的内存缓存里。对于表空间磁盘文...原创 2020-05-06 16:01:37 · 3010 阅读 · 0 评论 -
MYSQL专题(五):MYSQL物理数据模型
初涉mysql物理数据格式:一行数据在磁盘上是如何存储的行格式:对一个表指定他的行存储的格式是什么样的,在建表的时候,就可以指定行存储的格式,后面也可以修改行存储格式create table table_name(columns) row_format = compactalter table table_name row_format = compact# 大概格式类似边长字段的...原创 2020-05-06 08:19:52 · 1579 阅读 · 0 评论 -
MYSQL专题(四):buffer pool
Buffer Pool我们对数据库执行增删改操作的时候,不可能直接更新磁盘上的数据,如果直接对磁盘进行随机读写操作,那速度是相当慢,随便一个大磁盘文件的随机读写操作,都有可能要几百毫秒。我们在对数据库执行增删改操作的时候,实际上主要都是针对内存里的Buffer Pool的数据进行的,也就是你实际上主要是对数据库的内存里的数据结构进行增删改操作。Buffer Pool的大小Buffe...原创 2020-04-28 20:15:53 · 478 阅读 · 0 评论 -
MYSQL专题(二):初步了解一下InnoDB存储引擎,binlog日志
执行一条语句的大概流程InnoDB的重要内存结构:缓冲池InnoDB存储引擎中有一个非常重要的放在内存里的组件,就是缓冲池,这里会缓存很多的数据,以便以后查询的时候,不用去查磁盘。引擎要执行更新语句的时候,eg更新"id=10"这一行数据,其实会先看"id=10"这一行数据看看是否在缓冲池中,如果不在的话,那么会直接从磁盘里加载到缓冲池,而且接着会对这条数据加一个独占锁。(不允许同时更新...原创 2020-04-28 16:07:32 · 532 阅读 · 0 评论 -
MYSQL专题(一):先了解一下mysql有哪些组件,并且大概流程
MySql驱动如果我们要在一个系统中访问数据库,必须在系统的依赖中加入一个MYSQL驱动,有了这个驱动,才能跟MYSQL数据库建立连接,然后执行各种各样的SQL语句。MYSQL驱动跟底层数据库建立网络连接,接着才能去发送请求给数据库服务器。系统的数据库连接池我们先来看第一种情况,如果只有一个网络连接,每个用户要对数据库进行操作,必须获得这个数据库连接,那么效率肯定底下还有,就...原创 2020-04-28 15:05:41 · 1347 阅读 · 0 评论 -
MYSQL专题(三):压测、一些性能指标
论上,通过增加线程数,内存读写,抗几千并发,甚至上万并发都是可以的。 但是,线程数越来越多之后,切换上下文很费CPU,QPS会下降,CPU负载也会变高,当请求源源不断进来的时候会导致挤压,进一步拖垮系统。接下来 测压本机是 双核8Gsysbench --db-driver=mysql --time=15 --threads=10 --report-interval=1 --...原创 2020-04-28 18:16:30 · 1944 阅读 · 0 评论