- 博客(16)
- 资源 (1)
- 收藏
- 关注
原创 Mysql存储引擎文件
本文介绍以下引擎文件表空间文件重做日志文件1.表空间文件InnoDB将存储的数据按表空间进行存放。默认配置下会有一个初始大小为10MB,名为ibdata1的文件。该文件就是默认的表空间文件。用户也可以通过多个文件组成一个表空间。文件的大小可以自动增长。如果用户设置innodb_data_file_path参数后,所有基于InnoDB存储引擎的表的数据都会记录到该共享空间中。如果设置了参数innodb_file_per_table,则用户可以将每个基于InnoDB存储引擎的表产生一个独立表空间
2021-06-10 23:11:39
241
1
原创 InnoDB插入缓冲InsertBuffer/change Buffer
关键特性插入缓冲两次写自适应哈希索引异步IO刷新邻接页插入缓冲1.Insert BufferInsertBuffer在缓冲池存在,同时也是物理页的组成部分。插入缓冲是为了解决非聚集索引且非唯一索引插入的离散性,不同于聚集索引,聚集索引插入一般是顺序的,不需要磁盘的随机读取,不需要读取另一个页中的记录,因此这种插入是非常快的。而非聚集索引不同,需要离散的访问非聚集索引页,由于随机的读取导致了插入操作性能下降。Insert Buffer如何解决这个问题?对于非聚集索引的插入或者更新操作,不
2021-06-02 22:02:40
466
原创 ThreadPoolExecutor线程池源码解析
execute方法getTask方法processExistWorker方法shutdown方法shutdownNow方法源码解析
2021-06-01 15:53:58
86
原创 Mysql后台线程
Master Thread非常核心的线程,主要负责将缓存池中的数据异步刷新到磁盘,保证数据一致性。IO Thread使用大量的异步IO来处理读写请求,提高数据库性能。IO Thread主要负责这些IO的请求回调(callback)Purge Thread主要回收已经使用并分配的undo页。purge操作在InnoDB1.1版本后,可以独立到单独的线程中进行,来减轻MasterThread的工作Page Cleaner Thread作用是将之前的脏页的刷新都放入到单独的线程中运行,减轻Maste
2021-05-30 14:08:06
100
原创 Mysql Master Thread线程工作原理
InnoDB1.0.x版本之前Master Thread具有最高的线程优先级别,内部由多个循环组成主循环(loop)后台循环(backgroud)刷新循环(flush)暂停循环(suspend),Master Thread会根据数据库运行的状态在这几个循环中切换。loop主循环大多数的操作是在这个循环中进行的,其中有两大部分的操作——每秒钟和每十秒的操作。每秒钟和每十秒的操作是不精确的,在负载很大的情况下可能会有延迟,只能说大概在这个频率下。每秒一次的操作包括:日志缓冲刷新到磁盘,即使这个事务还
2021-05-30 14:06:43
455
1
原创 Mysql Checkpoint技术
Checkpoint技术主要作用:脏页的刷盘机制。Checkpoint缩短数据库恢复时间缓冲池不够时,将脏页刷到磁盘当重做日志不可用时,刷新脏页checkpoint有两种,sharp checkpoint和fuzzy checkpointSharp/Fuzzy CheckpointSharp发生在数据库关闭时,将所有脏页刷到磁盘。Fuzzy在数据库运行期间,刷新一部分脏页到磁盘,避免sharp刷盘造成运行时性能问题。Fuzzy Checkpoint类型Master Thread Che
2021-05-30 14:03:39
145
原创 Mysql缓冲池
缓冲池InnoDB引擎在读取页操作的时候,首先将从磁盘读取到的页放在缓冲池中,这个过程叫做“将页FIX到缓冲池中”,下一次在读取这个页,首先判断该页是否在缓冲池中,如果在,称该页面在缓冲池中命中,直接读取该页。否则,读取磁盘上的页。对于数据库的修改操作,首先修改在缓冲池中的页,然后再以一定的频率刷新到磁盘上。刷新磁盘的操作并不是实时触发,而是通过CheckPoint机制刷新回磁盘。从InnoDB1.0.X版本开始,允许有多个缓冲池实例,每个页根据哈希值平均分配到不同缓冲池实例中,减少数据库内部的资源竞
2021-05-30 13:58:46
95
原创 Future源码解析
标题Future可以获取线程的运行结果,get方法进行阻塞获取,那么到底是如何获取的呢?又如何阻塞的呢?又是如何唤醒的呢?取消任务是怎么取消的呢?简单示例先看下如何应用future和callable,简单的例子如下:public static void main(String[] args) { FutureTask<Integer> future = new FutureTask(new Callable() { @Override public
2021-05-30 13:35:08
466
原创 ThreadLocal原理解析
源码解析ThreadLocal的内部主要通过ThreadLocalMap来实现的,我们先看这个MapThreadLocalMapThreadLocalMap并没有实现Map接口,也没有集成AbstractMap等类,而是纯纯的一个内部实现。基本的内部字段如下: /** * The initial capacity -- MUST be a power of two...
2020-03-23 16:12:03
156
原创 HashMap墨迹详解-由浅入深
HashMap集合HashMap为Key-Value键值对存储的集合,本文不会说出HashMap所有的原理,尤其是红黑树的原理,我没去看,太麻烦了,其他的我觉得也够用了!一起来看!墨迹起来。。。关键字段及含义//Map默认的开发的容量大小16static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16/...
2020-03-11 22:43:27
318
原创 Spring事务传播机制Propagation.REQUIRES_NEW详解及测试
REQUIRES_NEW官方文档解释:Create a new transaction, and suspend the current transaction if one exists.意思是,创建一个新事务,如果当前存在事务,将这个事务挂起。也就是说如果当前存在事务,那么将当前的事务挂起,并开启一个新事务去执行REQUIRES_NEW标志的方法。先来总结一下结果:1.标志REQUIR...
2018-10-30 15:40:16
93970
14
原创 EffectiveJava阅读感想一
1. 遇到多个构造器考虑建造器多个构造器,只有参数列表不同,应用起来会很不方便,容易混淆,参数过多,调用的时候可能并不知道如此多的参数具体代表什么含义。比如我们可能会有以下的代码片段:public class Test { public Test(String a, int b, boolean c, long d){} public Test(int a, int b,...
2018-10-22 23:39:01
811
原创 SpringIoC源码分析一之从ClassPathXmlApplicationContext进入
引言我们在构建WEB项目的时候,会在web.xml中配置Spring的监听器,然后监听器完成了我们容器的初始化,这个我们以后再说。今天我们来学习一下ClassPathXmlApplicationContext这个类。这里只进行简单的解析,重点方法Refresh会抽出几章的内容来讲解,可能大家在看源码的时候会东张西望,也就是看这当前的类,然后看着看着由点击到另一个类,反复如此,你就会蒙圈,所以不建议...
2018-05-16 15:39:27
482
原创 Spring整体架构及源码项目搭建
首先,我们谈谈关于Spring,我相信大家对于Spring都有过了解或者深入的探究过这个极其优秀的J2EE框架,但是目前本人对这个框架还是处于使用的阶段并没有细致的探索原理,也许这就是初级、中级、高级工程师的区别,我想在以后的日子通过源码的解读会对自己有很大的提升,也希望能持之以恒。1.Spring的整体架构图可能这样看来确实有些抽象,我做一下简单的介绍,因为我也是初学者,具体的目前我也不是很了解...
2016-05-22 17:05:41
638
spring-cglib-repack.jar、spring-objenesis-repack.jar
2016-05-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人