- 博客(56)
- 资源 (1)
- 收藏
- 关注
原创 MySQL高可用集群
1 什么是MySQL高可用集群MySQL高可用集群MySQLInnoDBClusterInnoDBCluster是MySQL官方实现高可用读写分离的架构方案包含以下组件MySQLGroupReplication简称MGR是MySQL的主从同步高可用方案包括数据同步和角色选举MySQLShell是InnoDBCluster的管理工具用来创建和管理集群MySQLRouter是业务。
2025-05-30 17:38:50
156
原创 MySQL8.4组复制
2.2.2 复制MySQL实例10001。2.2.3 复制MySQL实例10002。2.2.1 准备MySQL实例。2.2.4 组复制数据同步测试。2.2.5 组复制主库宕机测试。10001,10002开启。2.2 单主模式部署示例。3.2 多主模式部署示例。2.1 什么是单主模式。2.2.3 配置组复制。3.1 什么是多主模式。
2025-05-29 20:34:34
368
原创 MySQL8.4主从复制
1 什么是复制MySQL Replication是官方提供的主从同步方案,是使用最广的同步方案;Replication使来自于一个MySQL数据库服务器(源Source)的数据能够复制到一个或者多个MySQL服务器(副本);默认情况下,复制是异步的;副本不需要永久连接即可从源接收更新可以指定库,指定表进行复制根据主从复制的特点,可以实现MySQL读写分离2 复制的优势&缺点2.1 复制的优势高可用:通过复制机制,MySQL实现跨主机的数据复制,从而获得一定的高可用能力。
2025-05-28 17:55:24
758
原创 MySQL8新特性
函数索引基于虚拟列功能实现,相当于增加了一个新列,这个列会根据函数计算结果存储,使用函数索引时就会使用该虚拟列作为索引。innodb_buffer_pool_size,innodb_log_file_size等参数,增加配置innodb_deadlock_detect,用于控制系统是否执行InnoDB死锁检测。mysql8之前,如果在查询列上加入函数操作,将导致索引失效。增加参数binlog_expire_logs_seconds。隐藏索引只是不可以见,在查询时不能使用该索引。
2025-05-16 15:26:04
942
原创 MySQL全局优化
设置为2时,表示每次提交事务时都只是将redo日志写到操作系统缓存(page cache)中,这种情况数据库宕机不会丢失数据,操作系统宕机的话,如果page cache中的数据没来的及写入磁盘文件的话就会丢失数据。设置为1时(默认值),表示每次事务时都会将redo日志持久化到磁盘,数据最安全,不会因为数据库或者系统宕机导致数据丢失,但是性能差一点。当>1时,表示每次提交事务都写入到os缓存page cache中,当积累N个事务后调用fsync写入磁盘,服务其宕机时最多丢失N个事务。禁用 atime 更新。
2025-05-13 19:46:54
957
原创 MySQL日志详解
1 redo日志1.1 redo日志相关参数innodb_log_buffer_size:redo日志缓冲区大小。默认16MBinnodb_log_group_home_dir:redo日志文件目录,默认在data目录下innodb_log_files_in_group:redo日志文件个数innodb_log_file_size:单个redo日志文件大小,默认48MBredo日志预写块大小用于优化redo日志写入效率默认为文件系统块大小建议值最小为文件系统块大小或者其整数倍。
2025-04-29 19:45:37
868
原创 MVCC详解
在可重复读隔离级别下,开启事务后,执行任何查询sql是会生成当前事务的一致性视图。说明在生成一致性视图时,该事务。read view一致性视图。的min_id<=trx。的min_id<=trx。在读已提交隔离级别下。(max_id)组成。
2025-04-24 20:29:21
795
原创 MySQL事务详解
一个事务内两次读取数据,由于两次读取期间数据其他事务新插入了数据,导致第二次读读取结果比第一次多的现象,产生了幻读。一个事务内两次读取数据,由于两次读取期间数据被其他事务修改,导致两次数据读取结果不一致的现象,导致了不可重复读。多个事务对同一行数据某个字段更新时,覆盖了其他事务更新的数据。事务A正在对数据进行修改,在事务提交前,数据处于不一致性状态。事务B读取数据,如果读到了事务A未提交的数据,则为脏读。一致性由原子性,隔离性,持久性共同保证。事务完成后,对于数据的修改是持久性的。
2025-04-18 19:27:13
825
原创 MySQL表关联优化
2 基于块的嵌套循环连接Block Nested-Loop Join(BNL)算法。如果一次性不能将驱动数据加载进join_buffer中,则进行多次。1 嵌套循环连接Nested-Loop Join(NLJ)算法。那么此时如果采用NLJ算法进行关联查询呢?1采取全表扫描,将扫描a行数据。3 关联表SQL的优化。
2025-04-01 08:49:14
752
原创 MySQL排序详解
MySQL支持两种方式排序filesort和indexindex是指扫描索引本身完成排序index效率高filesort是指通过内存或者排序文件完成排序filesort效率低orderby满足两种情况时会使用index排序orderby语句使用索引最左列where条件字段和orderby字段组合满足索引最左列配置给每个回话分配排序操作的缓冲区大小当需要排序的数据。
2025-03-29 17:31:31
434
原创 MySQL索引优化最佳实践
,<>,not in ,not exists,is null ,is not null查询,否则会走全表扫描。尽量避免使用in或者or查询,MySQl会进行成本计算决定是否使用索引。使用<,>,<=,>=时MySQL会进行成本计算评估是否使用索引。中做任何操作(计算,函数,类型转换)like查询时遵循最左前缀查询。范围查询优化,大范围拆分小范围。减少select * 语句,
2025-03-25 19:29:23
256
原创 MySQL Explain执行结果详解
1 idselect的序号列通常有几个select就有几个id(除非产生衍生表合并优化)id的顺序是按select出现的顺序增长的id列数字越大执行优先级越高id相同则从上往下执行id为NULL最后执行MySQL中的子查询select子查询select与from之前的子查询语句在主from之后执行from子查询from和where之间的子查询在where子查询之后执行from子查询执行后通常会产生临时表,也称派生表。
2025-03-25 08:29:08
741
原创 MySQL索引数据结构
平衡树虽然解决了数据单调递增或者递减时导致退化为链表的问题,但是在插入时,需要频繁的旋转来保持二叉树的平衡,对于插入修改的性能影响极大。产生的原因是3节点的右子节点多了一个左子节点,此时将5节点右旋后再将3节点左旋解决。右旋的流程为(当前节点为3节点,右旋就是让自己变成右子节点)每个节点的值比左子树所有节点的值大,比右子树所有节点的值小。每个节点比左子树所有节点的值大,比右子树所有节点的值小。每个节点到叶子节点的每个路径黑色节点的个数都相等。每个节点的左子树的高度与右子树的高度差不超过1。
2025-03-08 19:04:41
1070
原创 MySQL执行更新SQL流程
当有一条记录需要更新时,InnoDB引擎就会先把记录写在redo log日志中,然后在后面系统比较空闲的时候,将这个操作记录更新到磁盘里面。max_binlog_size:设置单个binlog日志文件的最大大小,当达到该值时,会生成一个新的日志文件。2:每次提交立即将redo日志缓冲区内容写入到文件系统缓存,不立即同步到磁盘,由操作系统决定何时同步到磁盘。expire_logs_day:设置binlog日志文件的保留天数,默认0,表示不删除旧的日志文件。
2025-03-04 19:28:31
1009
原创 MySQL整体架构
InnoDB有自己的日志系统,redo log(重做日志)和undo log(撤销日志)binlog记录了所有的DML(INSERT,UPDATE,DELETE)语句。MySQL支持多种存储引擎,比如InnoDB,MyISAM,Memory等等。客户端为连接MySQL服务端的工具或者驱动,比如JDCB,ODBC等等。InnoDB是MySQL默认的存储引擎,支持事务,行级锁以及外键约束。Server层有自己的日志系统,binlog日志。生成执行计划:基于以上分析,生成SQL执行计划,2.1 Server层。
2025-03-02 11:25:09
993
原创 基于JDK17的GC调优策略
参考资料:JDK工具官网文档JDK17 java指令官网文档JDK8java指令官网文档1 JVM有哪些参数可以调1.1 标准参数以开头所有HotSpot都支持使用javahelp或者java查看常用的标准参数listmodules查看当前Java进程中的模块showmoduleresolution查看当前Java进程中各个模块的依赖关系verboseclass显示类加载信息。
2025-02-23 19:57:32
365
原创 jdk17新特性
2.4.4 exports和open声明对外的API。2.3 密封类 Sealed Class。2.4 模块化Module System。2.2 隐藏类Hidden Class。module-info.java⽂件。module-info.java⽂件。module-info.java⽂件。不需要依赖jdk也可以执行的可执行。2.4.5 uses服务开放机制。1.2 switch表达式增强。2.4.6 构建模块化jar包。1.4 var局部变量推导。2.1 记录类record。2.4.1 什么是模块化。
2025-02-22 15:44:32
1067
原创 jdk8新特性
1 lambda表达式lambda本质上是一段匿名内部类也可以是一段可传递的代码完整的lambda由三部分组成:参数列表,箭头,声明语句完整语法大部分场景下,参数类型可以根据上下文环境推断出来,因此参数类型可以省略当只有一个参数时小括号可以省略当执行语句只有一行代码时,可以省略花括号,return和语句结尾的分号1.1 类型推断根据上下文信息推断出参数类型,而不需要显式声明1.2 局部变量限制lambda表达式执行代码块中可以直接使用外部变量。
2025-02-09 19:28:45
913
原创 java常量池
方法时,在字符串常量池分配内存,内存值指向str对象。方法返回字符串常量池引用,与str引用不同。3.1 为什么要设计字符串常量池。方法返回引用和str是同一个引用。方法返回的引用与str引用一致。因为test通过形参传入,会。3.2 创建字符串对象的。3.4 字符串的不可变性。3.3 字符串的+操作。1 Class常量池。
2025-01-23 18:21:54
556
原创 JVM对象内存分配
大小占比幸存区超过50%之后。young gc之后,当。内某一批(gc年龄1~n。,将gc年龄>=n的对象。4 老年代空间担保机制。或者标量替换任何一个。
2025-01-01 18:18:58
1075
原创 JVM对象内存结构
jvm中数组长度存储为4字节,则数组最大长度为Integer的最大值。对于不同状态(无锁态,轻量级锁,重量级锁,GC标记,偏向锁)的对象。哈希码(HashCode)、GC分代年龄、锁状态标志。64位操作系统中占8字节,开启指针压缩时占4字节。分析自定义类App对象大小。32位操作系统中占4字节。分析Object对象大小。通过jol计算对象大小。分析int[]对象大小。jvm对象中属性为基础。表明对象属于哪个类型。
2025-01-01 12:24:46
431
原创 JVM对象创建过程
划分内存通常有两种方式,指针碰撞和空闲列表。以及每个属性什么类型的数据已经。如何解决内存分配时的并发问题?空间(也是从伊甸区分配),首先通过指令参数从常量池。5 执行init()方法。,有一个指针指向分界线。
2024-12-31 21:20:50
591
原创 关于sql优化思路方案
6、对于大数据量表考虑采用分区表,定期归档(归档表采用truncate清理原表),采用不同纬度表。7、对于mysql的innodb引擎,考虑调整page size大小。3)是否使用了合适的字段类型,是否占用无效存储问题。8、考虑更换适合大数据量查询的数据库产品(列式储存)。2、了解查询目的,看sql是否可以去除多余关联查询。3、explain查看执行计划,添加必要的索引。4)分析是否使用合适的存储引擎。1、分析sql,查看语句编写是否存在问题。以下是整体的优化思路方案,不做具体的细节描述。
2023-09-11 21:56:11
105
原创 优化Mysql导入sql文件慢问题
1、调整参数innodb_flush_log_at_trx_commit,默认值1此参数用于控制redo日志写入log file以及落盘时机。0:log buffer每秒一次写入log file中,并且让数据落盘。1:每次提交事务都会把log buffer的数据写入log file中,并且让数据落盘。2:每次提交事务都会把log buffer的数据写入log file中,每秒让数据落盘。2、关闭binlog,避免生成二进制日志文件3、在开启binlog的情况下,优化方案。
2023-08-14 15:18:16
1835
原创 类加载机制
类加载机制1 双亲委派机制机制核心是向上委派加载一个类时,首先会通过类的全限定名判断类是否已经被加载,被加载时,直接返回,未被加载时,委托给父类加载器去加载,重复相同的流程直至启动类加载器,如果父类加载器所负责的加载路径中加载不到该类,则当前类加载器在自己的加载路径找该类。局限性无法做到不委派,或者向下委派打破双亲委派不委派向下委派(SPI机制中的一部分)实现打破双亲委派的方式1)自定义类加载器重写sun.applet.AppletClassLoad
2020-12-25 21:14:25
192
原创 类加载器
类加载器1 启动类加载器(BootStrapClassLoader)没有实体,将c++写的一段逻辑定义为启动类加载器加载路径启动类加载器加载路径为:JAVA_HOME\jre\lib*.jar;JAVA_HOME\jre\class*;查看启动类加载器加载路径:#系统属性System.getProperty("sun.boot.class.path");#apiLauncher.getBootstrapClassPath().getURLs();
2020-12-25 21:12:37
148
原创 类的生命周期
类的生命周期1 加载加载阶段做的三件事1)通过类的全限定名获取类class文件的二进制流2)解析成运行时数据,即InstanceKlass实例,存放在方法区3)在堆区生成该类的Class对象,即InstanceMirrorKlass实例类的二进制流从哪获取1)classpath参数指定的路径中2)压缩包3)网络jvm加载类时懒加载模式,使用的时候才会加载常用的类会采用预加载模式。预加载的类:包装类、String、Thread2 验证1)文件格式验证验证字节流是否符合Class文件格
2020-12-18 21:10:19
289
1
原创 spring aop应用
spring官网关于aop的介绍在以下两个章节:https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#aophttps://docs.spring.io/spring-framework/docs/current/spring-framework-reference/c...
2020-04-01 20:54:01
234
原创 Spring的循环依赖
场景分析public class AService { @Autowired private BService BService; public AService(){ System.out.println("init aService"); }}public class BService { @Autowired priv...
2020-03-22 21:06:26
204
原创 Spring BeanDefinition
1 是什么Spring中用来描述Bean的类,作用相当于模具,批量生产每一样东西时可以先制造模具,模具记录着尺寸,形状等详细信息,可以加快生产效率,BeanDefinition的作用也是类似的,记录着Bean的scope,lazy,class等信息,需要Bean对象时可以根据BeanDefinition记录的属性信息可以创建并初始化该Bean对象。Spring的生命周期就是根据xml元数据配...
2020-03-13 17:17:45
223
原创 Spring Bean工厂后置处理器
1 是什么是一种干预Bean工厂(DefaultListableBeanFactory)初始化过程的处理器,Bean工厂的初始化包括Bean工厂的属性设置,以及每一个Bean对应的BeanDefinition对象的实例化和初始化,代理的完成等等。2 两个顶级接口2.1 BeanFactoryPostProcessor只有一个方法:void postProcessBeanFactory(C...
2020-03-13 17:15:42
668
原创 JAVA8新特性
JAVA8新特性1 函数式接口用@FunctionalInterface修饰的接口叫做函数式接口 ,或者,函数式接口就是一个只具有一个抽象方法的普通接口,@FunctionalInterface可以起到校验的作用,如果加了**@FunctionalInterface**注解的接口有两个或者两个以上的抽象方法,编译时报错。在JDK7中其实就已经有一些函数式接口了,比如Runnable、Call...
2020-03-13 16:56:51
344
原创 如何将一个对象或者类注册到Spring容器
1 将类注册到到Spring容器该类的实例化和初始化过程由spring控制。方法一:xml注册Beanxml注册Bean,如果spring配置元数据的方式是xml时,可以手动在xml注册第三方jar包中的类。常用来配置本项目中的Bean。<bean id="service1" class="stu.spring.services.Service1"></bean>...
2020-02-05 18:53:10
5074
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人