Kon4tsu's Blog
  • 首页
  • 归档
  • 分类
  • 标签
  • 关于

MVCC导致索引覆盖失效场景

MVCC导致索引覆盖失效场景MVCC(多版本并发控制)确实会导致索引覆盖失效,从而触发回表。 很多开发者认为只要 SQL 的字段都在联合索引里,就一定能走“索引覆盖(Using index)”,但在高并发写场景下,这并不绝对。 其根本原因在于 MySQL InnoDB 存储引擎的二级索引(Secondary Index)结构设计。 核心原因:二级索引“不完整”在 InnoDB 中,MVCC 的实
2025-12-12
MySQL

MySQL日志

MySQL日志1. undo log1.1 undo log的实现在事务提交之前,每当InnoDB引擎对一条记录进行增、删、改操作时,要把操作之前的信息记录到undo log中。如果事务还没提交就发生了崩溃,那么就可以通过undo log回滚到之前的数据。 一条记录的每一次更新操作产生的undo log格式都有一个roll pointer指针和trx_id事务id: 通过trx_id可以知道是那
2025-12-11
MySQL

MySQL是怎么加行级锁的?

MySQL是怎么加行级锁的?假设有一张表 user,只有三个字段 id (主键索引) 、 age(非唯一索引)和name(无索引)。 表中现有数据: id: 10, age: 10_v1, name: aaa id: 11, age: 10_v2, name: bbb id: 20, age: 20, name: ccc id: 30, age: 30, name: ddd 1. 唯一索引等值
2025-12-11
MySQL

单例模式的double check与volatile

单例模式为什么需要使用单例模式节省内存、节省计算。 12345678910111213141516171819public class Singleton { private static volatile Singleton singleton; private Singleton() { } public static Singleto
2025-12-08
JUC

AQS

AQS 引用:JavaGuide 1. 什么是AQS?AQS,全称AbstractQueuedSynchronizer,是Java中的一个抽象类,是Java并发包中提供的构建锁和同步器的基本框架。像ReentrantLock,CountDownLatch,Semaphore等类都使用到AQS完成线程间同步 2. CLH锁AQS是基于CLH锁进一步优化实现的,那什么是CLH锁呢? CLH 锁对自旋
2025-05-24
JUC

线程池

线程池 引用: javaguide https://javabetter.cn/sidebar/sanfene/javathread.html 1. 线程池优点 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到达时,任务可以不需要等待线程创建就能立即执行。 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定
2025-05-23
JUC

synchronized3

synchronized3 引用: https://www.cnblogs.com/duanxz/p/4458342.html https://www.cnblogs.com/vipstone/p/15121109.html 1. 自旋锁线程的阻塞和唤醒需要CPU从用户态转为核心态,频繁的阻塞和唤醒对CPU来说是一件负担很重的工作,势必会给系统的并发性能带来很大的压力。同时我们发现在许多应用
2025-05-23
JUC

synchronized2

synchronized21. Java的对象头在JVM中,对象是分成三部分存在的:对象头、实例数据、对齐填充 对象头是我们需要关注的重点,它是synchronized实现锁的基础,因为synchronized申请锁、上锁、释放锁都与对象头有关。对象头主要结构是由Mark Word 和 Class Metadata Address组成: Mark Word:存储对象的hashCode、锁信息或
2025-05-23
JUC

sleep()和wait()、start()和run()

sleep()和wait()、start()和run()1. sleep()、wait()1.1 相同点两者都可以暂停线程执行 1.2 区别 wait()方法释放了锁;sleep()方法没有释放锁 wait()方法通常被用于线程间的通信;sleep()方法通常被用于暂停执行 wait()方法调用后,需要别的线程使用notify()或notifyAll()方法唤醒当前线程,或者使用wait(long
2025-05-22
JUC

synchronized1

synchronized11. synchronized的用法1.1 修饰实例方法给当前对象实例加锁,进入同步代码前要获取当前对象实例的锁 123synchronized void method() { //业务代码} 1.2 修饰静态方法给当前类加锁,进入同步代码之前要获取当前class的锁 123synchronized static void method()
2025-05-22
JUC
1234

搜索

Hexo Fluid