抽象资源同步器框架AQS原理(二)——共享模式 发表于 2020-11-19 | 分类于 多线程 | 0 | 阅读次数 879 前面我们了解了AbstractQueuedSynchronizer框架独占模式的流程,今天我们借助Semaphore的源码来学习下共享模式的原理。 共享模式 共享模式和独占模式的关系就好比共享锁和独占锁,共享模式在获取资源或者是释放资源时,都可能会唤醒后面所有非独占的节点,共享模式它交给子类实现的方 阅读全文 »
抽象资源同步器框架AQS原理(一)——独占模式 发表于 2020-10-15 | 分类于 多线程 | 0 | 阅读次数 991 AQS 是什么 AbstractQueuedSynchronizer(简称AQS)是一个多线程访问共享资源的抽象同步器框架,说简单点就是主要由 一个状态(state) + 双向无锁队列(CLH) 组成的工具,它主要提供了同步状态原子性管理、线程的阻塞和解除阻塞、队列的管理的方法,是Java并发包的基 阅读全文 »
MySQL学习篇(9)——MySQL对LRU的优化 发表于 2020-03-30 | 分类于 MySQL | 0 | 阅读次数 1782 基于冷热数据分离的思想设计LRU链表 为了解决上一讲我们说的简单的LRU链表的问题,真正MySQL在设计LRU链表的时候,采取的实际上是冷热数据分离的思想。 之前一系列的问题,就是因为所有缓存页都混在一个LRU链表里,才导致的。 所以真正的LRU链表,会被拆分为两个部分,一部分是热数据,一部分是冷数 阅读全文 »
MySQL学习篇(8)——flush链表是什么,Buffer Pool满了怎么办 发表于 2020-03-25 | 分类于 MySQL | 0 | 阅读次数 1763 问题背景 在执行增删改的时候,如果发现数据页没缓存,那么必然会基于free链表找到一个空闲的缓存页,然后读取到缓存页里去,但是如果已经缓存了,那么下一次就必然会直接使用缓存页。 需要更新的数据页都会在Buffer Pool的缓存页里,供你在内存中直接执行增删改的操作。 接着去更新Buffer Poo 阅读全文 »
MySQL学习篇(7)——free链表是什么,和Buffer Pool有什么关系 发表于 2020-03-22 | 分类于 MySQL | 0 | 阅读次数 1664 当数据库启动之后,buffer pool也分配好了,只不过这个时候,Buffer Pool中的一个一个的缓存页都是空的,里面什么都没有,要等数据库运行起来之后,当我们要对数据执行增删改查的操作的时候,才会把数据对应的页从磁盘文件里读取出来,放入Buffer Pool中的缓存页中。 我们怎么知道哪些缓 阅读全文 »
MySQL学习篇(6)——Buffer Pool内存结构 发表于 2020-03-14 | 分类于 MySQL | 0 | 阅读次数 1652 buffer pool 配置 Buffer Pool本质其实就是数据库的一个内存组件,可以理解为他就是一片内存数据结构,所以这个内存数据结构肯定是有一定的大小的,不可能是无限大的 这个Buffer Pool默认情况下是128MB,还是有一点偏小了,我们实际生产环境下完全可以对Buffer Pool进 阅读全文 »
MySQL学习篇(5)——巩固Buffer Pool是什么 发表于 2020-03-07 | 分类于 MySQL | 0 | 阅读次数 1614 在MySQL进行增删改查时,实际上是不会直接操作硬盘数据的,因为如果对磁盘进行随机读写操作,那速度是相当的慢,随便一个大磁盘文件的随机读写操作,可能都要几百毫秒。 当然,其实还有一个问题:就是你在数据库的内存里执行了一堆增删改的操作,内存数据是更新了,但是这个时候如果数据库突然崩溃了,那么内存里更 阅读全文 »
MySQL学习篇(4)——什么是binlog 发表于 2020-02-24 | 分类于 数据库 | 0 | 阅读次数 2507 MySQL binlog到底是什么东西? 实际上我们之前说的redo log,他是一种偏向物理性质的重做日志,因为他里面记录的是类似这样的东西,“对哪个数据页中的什么记录,做了个什么修改”。 而且redo log本身是属于InnoDB存储引擎特有的一个东西。 而binlog叫做归档日志,他里面记录的 阅读全文 »
MySQL学习篇(3)——InnoDB存储引擎的架构设计 发表于 2020-02-22 | 分类于 MySQL | 0 | 阅读次数 1810 今天我们就来探索一下这个,存储引擎里的架构设计,以及如何基于存储引擎完成一条更新语句的执行。 InnoDB的重要内存结构:缓冲池 InnoDB存储引擎中有一个非常重要的放在内存里的组件,就是缓冲池(Buffer Pool),这里面会缓存很多的数据,以便于以后在查询的时候,万一你要是内存缓冲池里有数据 阅读全文 »
MySQL学习篇(1)——连接池 发表于 2020-02-15 | 分类于 MySQL | 0 | 阅读次数 1610 程序员眼中的数据库 平时在我们写Java系统时,一般会连接到一个MySQL数据库上,执行各种增删改查。在实际使用过程中,遇到一些死锁、SQL性能太差、异常错误等,就只会网上博客,尝试着捣鼓一下,最后可能解决了问题,但是也没有最终搞明白原理。 这里我现在就系统的学习MySQL底层技术原理,如何基于My 阅读全文 »