- 博客(27)
- 收藏
- 关注
原创 MYSQL 锁机制 与 MVCC多版本并发
因为在RR的隔离级别下,需要解决不可重复读和幻读的问题,如果没有通过索引加锁,那么就会遍历所有的聚簇索引时,都会添加锁,为了防止扫描过的索引被其它事务修改,或间隙(主键为整数1,3之间的间隙就是2)被其它事务插入(幻读),从而导致数据不一致,所以它是把所有的索引记录和间隙都锁上;表锁每次锁住一张表,开销小,因为在表层面直接添加锁标记,不用一条一条查找记录,锁粒度大,发生锁冲突概率高,并发度低,一般在整张表数据迁移的时候,才会用;3,事务id列表为空,则该行数据可见,也就是当前查询的数据行没有事务。
2024-04-06 14:04:47
944
原创 MYSQL日志 redo_log更新流程 bin_log以及bin_log数据恢复
MYSQL日志 redo_log更新流程 bin_log生产应用以及bin_log数据恢复
2024-03-18 22:33:55
1127
1
原创 Mysql事务+锁测试 RR行锁升级
这里在不同的数据上添加读锁,但是添加被阻塞了,是因为在RR隔离级别下,要解决幻读,不可重复读等问题,当不是通过索引加锁的话,就会进行升级为表锁;注意这里最好新开启连接查询,这种工具在执行的时候,如果使用执行SQL来执行,他会自动提交;在隔离级别RR下,添加写锁,锁住一行数据,写锁是排它锁,不允许其它的读写、查询事务表,有两个事务,一个是我们还没有提交的事务,一个是等待锁的事务。另外开启一个连接,进行写操作,发现执行没有成功,在等待锁。Mysql事务+锁测试。
2024-03-15 15:19:49
291
原创 spring-boot启动源码 servlet spring-boot 内嵌tomcat 外置tomcat
spring-boot启动源码 servlet spring-boot 内嵌tomcat 外置tomcat
2024-02-23 19:36:23
1240
1
原创 shell脚本学习
要进行运算,首先保证相加的变量都是数字(定义的时候不注释引号),计算加减乘除用expr表达式,可以判断文件的权限,是否可读,可写,可执行等,还可以判断是一个文件夹还是文件,是否存在等。环境变量的查找,首先从当前进程查询变量,当前没有则从父进程查询,一层一层向上。Echo ${name:2:3}表示name值,从第二个字符开始,向后取三位。区别:1,3方式会重新打开一个进程执行,4默认在当前进程执行脚本;Shell:c语言编写的命令解析器,通俗理解操作内核的中间工具;单引号可以由变量,双引号不解析变量。
2024-02-20 15:21:53
257
原创 记录spring_boot的日志系统学习
首先,添加lombok的依赖,然后idea如果不支持lombok还得下载插件,而且lombok是和JDK版本,它的更新速度没有那么快,添加@Slf4j注解后,可以直接使用,但是实际开发中,只要有一个人用了这个,所有的开发人员都需要配置,所以不太建议;JDK官方提供了日志门面,JCL,不提供实现日志功能,整合日志(它的原理是通过类加载器,来判定是否存在相关的日志接口的实现,如果存在,则使用,不存在,则继续查找其他的)Spring_boot日志文件归档,可以定义日志文件的最大size,和最大的文件数量等。
2024-02-20 09:55:09
1069
原创 记录一次mysql用户权限设置报错Acess denied for user ‘db_user‘@‘%‘ to database ‘db‘
全局——可以管理整个MySQL库——可以管理指定的数据库表——可以管理指定数据库的指定表字段——可以管理指定数据库的指定表的指定字段权限存储在mysql库的这几个系统表中,待MySQL实例启动后就加载到内存中。
2024-01-30 13:02:39
382
1
原创 关于Log4j的使用问题
由于用的是log4j1.x的版本,由于版本比较低,本身不提供同时满足按天生成日志,限制文件大小和生成多个文件的需求,所以查看fileAppender代码,使用RollingFileAppender可以设置文件大小和限制文件生成的个数,基于这个基础,自定义一个RollingFileAppender,重写setFile()方法,在super.setFile()前切入自定义文件名的操作,就可解决了。2.3日志文件生成了,也有文件了,但是文件中内容除了当前需求的日志,还有很多其它的日志内容。
2023-09-27 18:03:03
100
原创 日常问题总结,mybatis的typeHandler使用
Java目前在用的主流虚拟机,都是采用可达性分析法来判断对象是否可被回收的,它通过若干个根节点组成的集合(GC Roots),向下遍历搜索,遍历的过程就是一条引用链,没有在这个链条上面的对象,是不可能被再次使用的,可以判定为可回收的对象。但是容易出现线程安全问题,此时我们则可以用锁来锁住对象,或者方法或者代码段,尽量减小锁的粒度,如果锁打的粒度比较大,判断锁和等待锁释放的时间会比较长,反而降低程序运行效率。在对象中添加引用的计数器,当被引用家+1,引用失效就-1,当回收时,计数器为0则进行回收;
2023-06-29 22:12:04
235
原创 (场景)单线程处理转换成多线程
(在进行开发的时候,因为很久没有用spring 的IOC了,所以出了一个很基础问题,在写好配置文件和代码后,发现管理类的缓存中始终拿不到对应的线程,一直报空,而管理类的单例对象又存在spring的容器中,期间百度了很久,各种解释,最后发现注入管理类的对象并没有交给spring管理,当时还想,那岂不是是我这要一层一层往上的对象全部都要交给spring,因为项目架构的原因,也不方便交给容器管理,找到原因就好解决问题了,利用SpringContextHolder可以拿到)多线程处理如何保证数据的一致性。
2023-03-27 21:24:33
510
原创 sql查询总结
这里用到了一个IFNULL函数,并且因为存在学生表中有数据,而因为缺考等因数导致成绩表中没有相关学生的成绩数据,所以这种展示就需要用到外连接,(分组也要依靠主表)选择学生表为主表,再用IFNULL函数对空进行处理。注意:内连接对相连接的几张表的数据的null数据进行了删选,所以上面的方法不用处理为null的情况,而下面是先将score表进行了合并,故而存在为null的情况,所以要单独处理。常用的聚合函数有max,min, count,sum,聚合函数的执行在group by之后,having之前。
2023-03-23 23:07:21
252
原创 rank排序记录
思路: 1.从两张相同的表scores分别命名为s1,s2。2.s1中的score与s2中的score比较大小。意思是在输出s1.score的前提下,有多少个s2.score大于等于它。比如当s1.salary=3.65的时候,s2.salary中[4.00,4.00,3.85,3.65,3.65]有5个成绩大于等于他,但是利用count(distinct s2.score)去重可得s1.salary3.65的rank为3 3.group by。该表的每一行都包含了一场比赛的分数。著作权归领扣网络所有。
2023-03-23 23:07:12
61
原创 sql执行顺序以及内连接和外连接ON和WHERE的区别
如果是外连接,把第二步中主表过滤掉的数据进行保留(也就是无论如何,外连接的主表中的数据,在这一步都会是全部数据,所以我们如果想对主表进行筛选,其实这里影响的只是VT2中不满足条件的行数据中,从表的值变为null),从VT2表中把过滤掉的数据的从表的列的值赋予NULL,并生成表VT3。这里进行分组,分组的条件使得同一个组中,所有的原有数据的分组条件都是一致的,所以此时是对组中除条件外的列进行聚合函数的计算,生成虚拟表VT5。进行需要的字段的筛选,并进行字段的表达式的处理,如IF(),并产生虚拟表VT7。
2023-03-22 12:05:30
545
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人