- 博客(10)
- 收藏
- 关注
原创 7、Mysql-主从复制原理
另一方面,由于SQL Thread也是单线程的,当主库的并发较高时,产生的DML数量超过slave的SQL Thread所能处理的速度,或者当slave中有大型query语句产生了锁等待那么延时就产生了。(3)同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致,最后I/OThread和SQLThread将进入睡眠状态,等待下一次被唤醒。
2024-12-13 13:48:56
752
原创 6、最左匹配原则
例如a = 1 and b = 2 a,b字段都可以使用索引,因为在a值确定的情况下b是相对有序的,而a>1and b=2,a字段可以匹配上索引,但b值不可以,因为a的值是一个范围,在这个范围中b是无序的。索引的底层是一颗B+树,那么联合索引当然还是一颗B+树,只不过联合索引的健值数量不是一个,而是多个。可以看到a的值是有顺序的,1,1,2,2,3,3,而b的值是没有顺序的1,2,1,4,1,2。所以b = 2这种查询条件没有办法利用索引,因为联合索引首先是按a排序的,b是无序的。
2024-12-12 16:28:55
181
原创 5、InnoDB的七种锁
临键锁,是记录锁与间隙锁的组合,既包含索引记录,又包含索引区间。更具体的,临键锁会封锁索引记录本身,以及索引记录之前的区间。插入意向锁,是间隙锁(Gap Locks)的一种(也是实施在索引上的),它是专门针对insert操作的。间隙锁,它封锁索引记录中的间隔,或者第一条索引记录之前的范围,又或者最后一条索引记录之后的范围。,MVCC解决的是普通读(快照读)的幻读,next-key locks解决的是当前读情况下的幻读。它会在id=1的索引记录上加锁,以阻止其他事务插入,更新,删除id=1的这一行。
2024-12-12 16:25:17
1055
原创 4、事务隔离级别
事务在开始时创建一个ReadView,当读一条记录时,会遍历版本链表,通过当前事务的ReadView判断可见性,找到第一个对当前事务可见的版本,读这个版本。读不加锁,只有写才加锁,读写互不阻塞,并发度相对于可串行化级别要高,但会有Write Skew异常。2)写锁的使用方式。并且事务只持有被UPDATE/DELETE记录的写锁(可重复读需要保留全部写锁直到事务结束,而读已提交只保留真正更改的)。当多个事务并发执行时可能会遇到「脏读、不可重复读、幻读」的现象,这些现象会对事务的一致性产生不同程序的影响。
2024-12-12 11:26:39
774
原创 3、MVCC多版本并发控制
事务2在快照读该行记录的时候,就会拿该行记录的DB_TRX_ID去跟min_id,next_trx_id和活跃事务ID列表(trx_list)进行比较,判断当前事务2能看到该记录的版本是哪个。Read View就是事务进行快照读操作的时候生产的读视图(Read View),在该事务执行的快照读的那一刻,会生成数据库系统当前的一个快照,记录并维护系统当前活跃事务的ID(当每个事务开启时,都会被分配一个ID, 这个ID是递增的,所以最新的事务,ID值越大)而当前读就是悲观锁的具体功能实现。
2024-12-12 11:16:28
783
原创 2、索引和锁
②、如果语句是select * from T where k=5,即普通索引查询方式,则需要先搜索k索引树,得到ID的值为500,再到ID索引树搜索一次。如果执行的语句是select ID from T where k between 3 and 5,这时只需要查ID的值,而ID的值已经在k索引树上了,因此可以直接提供查询结果,不需要回表。也就是说,在这个查询里面,索引k已经“覆盖了”我们的查询需求,称为覆盖索引。主键长度越小,普通索引的叶子节点就越小,普通索引占用的空间也就越小。
2024-12-12 10:52:24
652
原创 1、SQL语句的执行过程
2、先从表t2里面取出d=20的记录的ID值,再根据ID值关联到t1,再判断t1里面c的值是否等于10】两种方法执行结果一样,但执行的效率会不同,所以优化器会选择较优的方案。如果id字段是索引,则有点区别:第一次调用的是“取满足条件的第一行”这个接口,之后循环取“满足条件的下一行”这个接口,这些接口都是引擎中已经定义好的】key是查询的语句,value是查询的结果。2.1、执行器拿到引擎给的行数据,把这个值加上1,比如原来是N,现在就是N+1,得到新的一行数据,再调用引擎接口写入这行新数据。
2024-12-12 10:28:35
418
原创 关于linux virtual box 突然挂载不上的问题
关于linux virtual box 突然挂载不上的问题:1、检查磁盘空间root@/tmp#df -hFilesystem Size Used Avail Use% Mounted on/dev/mapper/centos-root 138G 138G 0G 100% /devtmpfs 1.2G 0 1.2G 0% /devtmpfs 1.2G 0 1.2G
2021-03-11 10:26:47
388
原创 kafka安装启动
1、安装jdk(依赖)root@/data#tar -zxvf jdk-8u141-linux-x64.tar.gzroot@/data#mv jdk1.8.0_141/ /usr/lib/jdkroot@/data#vim /etc/profile #后面加上export JAVA_HOME=/usr/lib/jdkexport JRE_HOME=${JAVA_HOME}/jre ...
2020-04-15 19:40:40
276
转载 centos虚拟机上网慢的问题
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...
2019-06-04 12:00:24
2552
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人