Jiefang's Blog

过去心不可得,现在心不可得, 未来心不可得

MySQL-27丨MySQL操作规范

MySQL操作规范 命名规范 表名建议使用有业务意义的英文词汇,必要时可加数字和下划线,并以英文字母开头; 库、表、字段全部采用小写; 避免用 MySQL 的保留字 命名(包括表名、列名)禁止超过 30 个字符; 临时库、表名必须以 tmp 为前缀,并以日期为后缀,如:tmp_shop_info_20190404; 备份库、表必须以 bak 为前缀,并以日期为后缀...

MySQL-26丨MySQL整体优化

MySQL整体优化 硬件相关优化 CPU 相关 关闭 CPU 节能,设定为最大性能模式。 考虑到在高并发之前没有任何连接的情况,机器可能会处于节电模式,高并发场景来临时可能导致处理不过来新的请求。 配置合理的 CPU 核数和选择合适的 CPU 主频。 ...

MySQL-25丨MySQL应用层优化方法

MySQL应用层优化方法 使用连接池 原理: 当进程启动时,创建相应的数据库连接池对象; 果程序需要请求数据库,则直接从连接池获取到一个连接; 数据库请求完成后,释放数据库连接池。 在《高性能 MySQL》第 14 章:应用层优化中就提到:当遇到连接池完全占满时,应该将连接请求进行排队,而不是扩展连接池。这样可以避免将压力都转到 MySQL 上而导致 My...

MySQL-24丨安全高效地删除大量无用数据

安全高效地删除大量无用数据 共享表空间和独立表空间 InnoDB 数据是按照表空间进行存放的,其表空间分为共享表空间和独立表空间。 共享表空间 共享表空间:表的数据放在系统共享表空间,也就是跟数据字典放一起。文件名为 ibdata1。可以通过参数 innodb_data_file_path 进行设置。在 my.cnf 中配置,如下: [mysqld] innodb_data_file...

MySQL-23丨读写分离需要注意

读写分离需要注意 什么情况下会出现主从延迟 对于读写分离场景,最大的问题就是:主从延迟 可能导致主从延迟的场景: 大表 DDL 大事务 主库 DML 并发大 从库配置差 表上无主键 等等 读写分离怎样应对主从延迟 判断主从是否延迟 判断 Seconds_Behind_Master 是否等于 0 Seconds_Behind_Ma...

MySQL-22丨主从复制原理

主从复制原理 MySQL异步复制 主库开启binlog的情况下; 如果主库有增删改的语句会记录到binlog中; 主库通过IO线程把binlog里的内容传给从库的中继日志(relay log); 主库给客户端返回commit成功(不会管从库是否已经收到事务的binlog); 从库的SQL线程负责读取它的relay log 里的信息并应用到从库数据库; 在主库上并行...

MySQL-21丨是否需要开启查询缓存

是否需要开启查询缓存 从 MySQL 4.1 开始,增加了查询缓存(Query Cache,简称 QC)的功能,它会存储 select 语句的文本以及发送到客户端的结果。如果下一次收到一个相同的查询,就会从查询缓存中获得查询结果。 从MySQL 5.7.20开始,查询缓存已被弃用,并在MySQL 8.0中被删除。 认识 QC QC 需要缓存最新数据结果,因此表数据发生任何变化(insert...

MySQL-20丨主键为什么设置成自增

主键为什么设置成自增 主键和聚集索引 在 InnoDB 中,聚集索引不一定是主键,但是主键一定是聚集索引:原因是如果没有定义主键,聚集索引可能是第一个不允许为 null 的唯一索引,如果也没有这样的唯一索引,InnoDB 会选择内置 6 字节长的 ROWID 作为隐含的聚集索引。 InnoDB 的数据是按照主键顺序存放的,而聚集索引就是按照每张表的主键构造一颗 B+ 树,它的叶子...

MQ-01丨消息队列入门

01丨为什么需要消息队列? 异步处理 流量控制 服务解耦 异步处理 消息队列被用于实现服务的异步处理。这样做的好处是: 可以更快地返回结果; 减少等待,自然实现了步骤之间的并发,提升系统总体的性能。 流量控制 这种设计的优点是:能根据下游的处理能力自动调节流量,达到“削峰填谷”的作用。但这样做同样是有代价的: 增加了系统调用链环节,导致总体的响应时延变长...

Java多线程-06丨线程状态

线程状态 初始:New 创建一个Thread对象,但还未调用start()启动线程时,线程处于初始态。 运行:Runable 就绪 该状态下的线程已经获得执行所需的所有资源,只要CPU分配执行权就能运行。 所有就绪态的线程存放在就绪队列中。 ...

Java多线程-05丨内存屏障

内存屏障 内存屏障(Memory Barrier)与内存栅栏(Memory Fence)是同一个概念,不同的叫法。 内存栅栏 X86平台来说,有几种主要的内存屏障: lfence,是一种Load Barrier 读屏障。在读指令前插入读屏障,可以让高速缓存中的数据失效,重新从主内存加载数据 sfence, 是一种Store Barrier 写屏障。在写指令之后插入写屏障,...

Java多线程-04丨Java 内存模型(JMM)

Java 内存模型(JMM) 原子性 可见性 有序性 原子性 原子性:即一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。 1 2 3 4 i = 0; // <1> j = i ; // <2> i++; // <3> i = j + 1; // <4> ...

Redis-04丨Redis主从架构的核心原理

Redis主从架构的核心原理 主从架构的核心原理 当启动一个slave node的时候,它会发送一个PSYNC命令给master node; 如果这是slave node重新连接master node,那么master node仅仅会复制给slave部分缺少的数据; 否则如果是slave node第一次连接master node,那么会触发一次full...

Redis-03丨Redis的RDB和AOF两种持久化机制

Redis的RDB和AOF两种持久化机制 企业级redis集群架构:海量数据、高并发、高可用 1、RDB和AOF两种持久化机制的介绍 2、RDB持久化机制的优点 3、RDB持久化机制的缺点 4、AOF持久化机制的优点 5、AOF持久化机制的缺点 6、RDB和AOF到底该如何选择 1、RDB和AOF两种持久化机制的介绍 RDB持久化机制,对redis中的数据执行周...

Java多线程-03丨Object.wait和Object.notify实现

Object.wait和Object.notify实现 Object.wait和Object.notify实现 ObjectMonitor ObjectWaiter wait方法实现 notify方法实现 notifyAll方法实现 ...

Redis-02丨Redis的AOF持久化

Redis的AOF持久化 AOF(append only file)持久化:以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的。AOF的主要作用是解决了数据持久化的实时性,目前已经是Redis持久化的主流方式。 使用AOF 开启AOF功能需要设置配置:appendonly yes,默认不开启。AOF文件名通过appendfilename配置设置,默认文件名...

Java多线程-02丨锁优化

锁优化 锁优化 自旋锁 适应自旋锁 锁消除 锁粗化 锁的升级 偏向锁 轻量级锁 重量级锁 在 JVM 中 monitorente...

Java多线程-02丨JDK锁优化

JDK锁优化 锁优化 自旋锁 适应自旋锁 锁消除 锁粗化 锁的升级 偏向锁 轻量级锁 重量级锁 在 JVM 中 monitore...

MySQL-19丨事务的隔离级别

事务的隔离级别 四中隔离级别 MySQL 有四种隔离级别,我们来看一下这四种隔离级别的基本定义: Read uncommitted(读未提交,简称:RU):在该隔离级别,所有事务都可以看到其它未提交的事务的执行结果。可能会出现脏读。 Read Committed(读已提交,简称:RC):一个事务只能看见已经提交事务所做的改变。因为同一事务的其它实例在该实例处理期间可能会有新的com...

MySQL-18丨MVCC

MVCC 什么是 MVCC 呢? MVCC, 即多版本并发控制。MVCC的实现,是通过保存数据在某个时间点的快照来实现的,也就是说,不管需要执行多长时间,每个事务看到的数据都是一致的。根据事务开始的时间不同,每个事务对同一张表,同一时刻看到的数据可能是不一样的。 MVCC实现原理 InnoDB每一行数据都有一个隐藏的回滚指针,用于指向改行修改前的最后一个历史版本(存放在UNDO LOG中...