Toggle navigation
Jiefang's Blog
Home
About
Archive
Jiefang's Blog
过去心不可得,现在心不可得, 未来心不可得
MySQL-17丨Redo log和Binlog
Redo log Redo log 称为重做日志,用于记录事务操作变化,记录的是数据被修改之后的值。 Redo log 由两部分组成: 内存中的重做日志缓冲(redo log buffer) 重做日志文件(redo log file) 每次数据更新会先更新 redo log buffer,然后根据 innodb_flush_log_at_trx_commit 来控制redo ...
Posted by jiefang on October 28, 2019
MySQL-16丨死锁
死锁 死锁是指两个或者多个事务在同一资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环的现象。 解决死锁 InnoDB 中解决死锁问题有两种方式: 检测到死锁的循环依赖,立即返回一个错误(这个报错内容请看下面的实验),将参数innodb_deadlock_detect 设置为 on 表示开启这个逻辑; 等查询的时间达到锁等待超时的设定后放弃锁请求。这个超时时间由 innod...
Posted by jiefang on October 28, 2019
MySQL-15丨MySQL行级锁
MySQL行级锁 MySQL 5.5 之前的默认存储引擎是 MyISAM,5.5 之后改成了 InnoDB。InnoDB 后来居上最主要的原因就是: InnoDB 支持事务:适合在并发条件下要求数据一致的场景。 InnoDB 支持行锁:有效降低由于删除或者更新导致的锁定。 两阶段锁 两阶段锁:锁操作分为两个阶段,加锁阶段和解锁阶段。 InnoDB 行锁模式 InnoDB实现了...
Posted by jiefang on October 28, 2019
MySQL-14丨MySQL全局锁和表级锁
MySQL全局锁和表级锁 全局锁 MySQL全局锁会关闭所有打开的表,并使用全局锁锁定所有的表。简称:FTWRL 1 FLUSH TABLES WITH READ LOCK; 解锁命令 1 UNLOCK TABLES; 当执行 FTWRL 后,所有的表都变成只读状态,数据更新或者字段更新将会被阻塞。 那么全局锁一般什么时候会用到呢? 全局锁一般用在整个库(包含非事务引擎表)做备份(...
Posted by jiefang on October 28, 2019
MySQL-13丨为什么MySQL选错索引
为什么MySQL选错索引 show index命令 当你需要查看某张表的索引详情时,可以使用命令: 1 show index from t13; 字段解释: Non_unique:如果是唯一索引,则值为 0,如果可以有重复值,则值为 1; Key_name:索引名字; Seq_in_index:索引中的列序号,比如联合索引 idx_a_b_c (a,b,c) ,那么三个字段...
Posted by jiefang on October 28, 2019
MySQL-12丨联合索引
联合索引 完整用到联合索引的情况 联合索引各字段作为条件,各字段位置不影响联合索引使用 1 2 select * from t11 where a=1 and b=1 and c=1; select * from t11 where c=1 and b=1 and a=1; 联合索引前面字段使用范围查询,后面字段作为条件任然可以完整使用联合索引 1 ...
Posted by jiefang on October 28, 2019
MySQL-11丨普通索引和唯一索引的区别
普通索引和唯一索引的区别 InsertBuffer 对于非聚集索引的插入时,先判断插入的非聚集索引页是否在缓冲池中。如果在,则直接插入;如果不在,则先放入 Insert Buffer 中,然后再以一定频率和情况进行 Insert Buffer 和辅助索引页子节点的 merge 操作。这时通常能将多个插入合并到一个操作中(因为在一个索引页中),就大大提高了非聚集索引的插入性能。 为什么要增加...
Posted by jiefang on October 28, 2019
JVM-10丨Tomcat类加载机制
Tomcat类加载机制 CommonClassLoader:Tomcat最基本的类加载器,加载路径中的class可以被Tomcat容器本身以及各个Webapp访问; CatalinaClassLoader:Tomcat容器私有的类加载器,加载路径中的class对于Webapp不可见; SharedClassLoader:各个Webapp共享的类加载器,加载路径中的class...
Posted by jiefang on October 28, 2019
MySQL-10丨B+树
B+树 B+树是B树的变体,定义基本与B树一致,与B树的不同点: 所有叶子节点包含全部关键字信息 各叶子节点之间用指针进行连接 非叶子节点只存储key的信息,相对B树,可以增加每一页中存储key的数量 B树是纵向扩展,变成“瘦高个”,B+树是横向扩展的,会变成“矮胖子” 在数据库中B+树的高度一般在2到4层,所以查找某一行数据最多只需要2到4次IO,没有索引情况下需要逐行...
Posted by jiefang on October 28, 2019
JVM-09丨触发 CMS GC 的条件
触发 CMS GC 的条件 CMS GC 在实现上分成 foreground collector 和 background collector。 foreground collector foreground collector 触发条件比较简单,一般是遇到对象分配但空间不够,就会直接触发 GC,来立即进行空间回收。采用的算法是 mark sweep,不压缩。 background coll...
Posted by jiefang on October 28, 2019
MySQL-09丨count(1)方法
count(1)方法 count(a)和count(*)的区别 count(a)表示统计a列,不统计null值。 count(*)无论是否包含null值,都会统计。 MyISAM引擎和InnoDB引擎count(*)的区别 对于MyISAM引擎,如果没有where子句,也没有检索其它列,那么count(*)将会非常快,因为MyISAM引擎会把表的总行数存在磁盘上。 InnoDB引擎不会保留...
Posted by jiefang on October 28, 2019
JVM-08丨对象进入老年代的四种方式
1、大对象直接进入老年代 比如很长的字符串,或者很大的数组等,参数-XX:PretenureSizeThreshold=3145728设置,超过这个参数设置的值就直接进入老年代 2、长期存活的对象进入老年代 在堆中分配内存的对象,其内存布局的对象头中(Header)包含了 GC 分代年龄标记信息。如果对象在 eden 区出生,那么它的 ...
Posted by jiefang on October 28, 2019
MySQL-08丨join语句优化
join语句优化 关联查询的算法 MySQL 使用以下两种嵌套循环算法或它们的变体在表之间执行连接: Nested-Loop Join 算法 Block Nested-Loop Join 算法 Nested-Loop Join 算法 Nested-Loop Join(NLJ)算法一次一行循环地从第一张表(称为驱动表)中读取行,在这行数据中取到关联字段,根据关联字段在另一张表(...
Posted by jiefang on October 28, 2019
JVM-07丨OOP-Klass模型
OOP-Klass模型 Klass Klass主要有两个功能: 实现语言层面的Java类 实现Java对象的分发功能 Klass是什么时候创建的呢?一般jvm在加载class文件时,会在方法区创建instanceKlass,表示其元数据,包括常量池、字段、方法等。 OOP Klass是在class文件在加载过程中创建的,OOP则是在Java程序运行过程中new对象时创建的。 一...
Posted by jiefang on October 28, 2019
MySQL-07丨分页查询优化
分页查询优化 普通分页 1 select a,b,c from t1 limit 10000,10; 从表中查询从10001行开始的记录,看似只查询了10行,实际读取了10010条记录,然后抛弃前10000行,读取最后的10行,执行效率很低。 根据自增且连续主键排序的分页查询 根据非关键字段排序的分页查询 根据自增且连续主键排序的分页查询 1 select * fro...
Posted by jiefang on October 28, 2019
JVM-06丨JVM参数
JVM参数 java启动参数共分为三类; 标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容; 非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容; 非Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用; 标准参数列表如下: -client 设置jvm使...
Posted by jiefang on October 28, 2019
MySQL-06丨order by和group by优化
order by和group by优化 order by MySQL 的排序方式 按照排序原理分,MySQL 排序方式分两种: 通过有序索引直接返回有序数据 通过 Filesort 进行的排序 Filesort 是在内存中还是在磁盘中完成排序的? MySQL 中的 Filesort 并不一定是在磁盘文件中进行排序的,也有可能在内存中排序,内存排序还是磁盘排序取决于排序的数...
Posted by jiefang on October 28, 2019
JVM-05丨Jstat(JVM统计监测工具)
Jstat(JVM统计监测工具) 语法格式如下: **jstat [ generalOption outputOptions vmid [interval[s ms] [count]] ]** 选项option代表这用户希望查询的虚拟机信息,主要分为3类:类装载、垃圾收集和运行期编译状况,具体选项及作用如下: 常见的...
Posted by jiefang on October 28, 2019
JVM-05丨JVM工具-Jstat
JVM工具-Jstat(JVM统计监测工具) 语法格式如下: **jstat [ generalOption outputOptions vmid [interval[s ms] [count]] ]** 选项option代表这用户希望查询的虚拟机信息,主要分为3类:类装载、垃圾收集和运行期编译状况,具体选项及作用如...
Posted by jiefang on October 28, 2019
MySQL-05丨如何优化数据导入
如何优化数据导入 一次插入多行的值; 关闭自动提交,多次插入数据的 SQL 一次提交; 调整参数,innodb_flush_log_at_trx_commit和 sync_binlog 都设置为0(当然这种情况可能会丢数据)。 一次插入多行的值 插入行所需的时间由以下因素决定 连接:30% 向服务器发送查询:20% 解析查询:20% 插入行:10% * 行...
Posted by jiefang on October 28, 2019
← 上一页
下一页 →
FEATURED TAGS
MySQL
Java多线程
JUC
SpringCloud
RocketMQ
Java集合
Redis
JVM
转载
项目管理
Eureka
分布式锁
事务
网络编程
Hystrix
Redisson
分布式原理
Feign
Netty
锁
Dubbo
Java基础
LeetCode
Ribbon
Zookeeper
架构设计
面试题
MQ
Spring
Zuul
ABOUT ME
过去心不可得,现在心不可得, 未来心不可得
FRIENDS