java
文章平均质量分 71
XJL_IT
这个作者很懒,什么都没留下…
展开
-
Mysql事务隔离MVCC机制
MVCC是Mysql保证可重复读和读已提交两个级别的隔离性用到的一套机制,串行化执行是通过加锁来实现的,而MVCC机制下在对同一行数据进行读和写时,不会直接加锁互斥。MVCC主要由undo日志版本链和read-view机制来完成,undo日志版本链是只一行数据被多个事务修改时,会保留修改前的数据undo回滚日志,并且用trx_id(日志id)和roll_pointer把执行undo日志串联起来形成一个历史记录版本链。在可重复读隔离级别下,当事务开启,执行任何查询sql时,会生成当前事务的一致性试图(原创 2022-05-26 22:35:45 · 511 阅读 · 0 评论 -
MYSQL并发锁
Mysql数据库一般会并发的执行多个事务,同时对一批数据读或写,就可能导致通常说的脏读、脏写、不可重复读、幻读等问题。为了解决这些问题,mysql提供了事务隔离,锁,MVCC等一套机制解决事务并发问题。事务及其ACID特性:事务是由一组sql组成的执行单元,事务具有以下特性,简称为ACID:原子性(Atomicity):事务是一个原子操作单元,要么都执行成功,要么都不成功。一致性(Consistent): 在事务开始和结束,数据必须保证一致性隔离性(Isolation):事务的执行不受外原创 2022-05-24 16:14:44 · 487 阅读 · 0 评论 -
MySQL优化实战
1.联合索引第一个字段用范围查询不会走索引,MySQL判断第一个字段就用范围查询,结果集可能太大,回表的效率不高还不如全表扫描,即使force index 强制使用索引,效率可能也不高。2.n和or在表数据量比较大的情况会走索引,在表记录不多的情况下会选择全表扫描3.索引下推:使用联合索引扫描时,where字句第一个字段检索条件是like 'cc%'时,因最左前缀原则导致只用到了联合索引的第一个字段,where子句的其它条件需要回表返回结果之后再进行过滤,索引下推则是在扫描联合索引的同时根据索引内其原创 2022-05-23 15:37:17 · 334 阅读 · 0 评论 -
一条sql的执行过程
MySQL的内部组件结构:Server层:主要包含连接器,查询缓存,分析器,优化器,执行器等,涵盖了MySQL大多数的核心服务功能,以及内置函数,所有跨存储引擎的功能都在这一层实现,比如存储过程、视图、触发器等。连接器:负责处理客户端跟服务端建立请求的工作,在通过握手建立TCP连接后进行权限校验,长时间为发送请求后自动断开链接等功能。查询缓存:MySQL拿到一个查询请求后,会先到查询缓存里看看,这条sql是否执行过,之前执行过的sql及结果会以key-value的形式保存在内存中,key原创 2022-05-05 20:33:31 · 146 阅读 · 0 评论 -
Mysql索引
索引的本质是为了提高检索数据效率的排好序的数据结构。B-tree:叶节点具有相同高度所有叶节点的指针为null节点中的数据从左到右递增排列B+tree(B-tree的变种):非叶子节点不存储数据,只存储索引冗余(为了能够放下更多索引数据)叶子节点包含所有索引字段叶子节点用指针连接(为了提高区间查询的效率)Hash对索引进行一次hash运算就能找到索引,定位到数据存储的位置很多情况下Hash索引查询效率要高于B+tree索引,但不支持范围查询,仅能满足=,in,并且原创 2022-05-03 22:11:40 · 671 阅读 · 0 评论 -
Tomcat整体架构
Tomcat处理请求的过程Tomcat通过EndPoint组件来接收socket请求,在接收到一个socket请求后会执行以下步骤1.第一次冲socket获取数据到InputBuffer中,BIO是InternalInputBuffer,父类是AbstractInputBuffer.2.基于InputBuffer解析数据3.解析请求行,将请求方法,请求uri,请求协议等封装到org.apache.coyote.Request对象中。4.解析请求头,和请求行类型5.基于请求头初始化一些原创 2022-04-28 16:40:08 · 492 阅读 · 0 评论 -
JVM整体结构
堆堆内存分为年轻代,老年代,年轻代又分为Eden区,S1区,S2区。内存分配的方法:指针碰撞:在内存绝对规整的情况下适用,所有用过的内存放一边,空闲的内存放另一边,中间放一个指针作为分界点的指示器,分配内存只需向空闲方向挪动相同大小的距离。空闲列表:内存不规则的情况下适用分配过程中并发问题的处理,CAS,本地线程分配缓冲(预先给每个线程分配一小块内存,分配内存时在各自线程所属内存区域分配,-XX:+/-UserTLAB控制是否开启,JVM默...原创 2022-04-26 21:07:10 · 196 阅读 · 0 评论 -
类加载的全过程
1.加载主类启动main函数时,通过类加载器将主类到jvm。类加载的主要过程:加载:通过IO从文件系统中将二进制字节码文件读取到内存中,使用到类时才会加载,例如new对象,调用对象的main方法等,在加载阶段会生成一个java.lang.Class对象,作为方法区这个类的各种数据的访问入口。验证:校验字节码文件的正确性准备:给类的静态变量分配内存,设置默认值解析:将符号引用替换为直接引用,该阶段会把静态方法等符号引用替换为数据所存的内存的地址或句柄(直接引用),这就是静态链接(类加载原创 2022-04-25 21:48:13 · 800 阅读 · 0 评论