自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 Linux 磁盘I/O是怎么工作的?

Linux 磁盘I/O是怎么工作的?VFS 内部通过目录项、索引节点、逻辑块以及超级块等数据结构,来管理文件。目录项,记录了文件的名字,以及文件与其他目录项之间的目录关系。索引节点,记录了文件的元数据。逻辑块,是由连续磁盘扇区构成的最小读写单元,用来存储文件数据。超级块,用来记录文件系统整体的状态,如索引节点和逻辑块的使用情况等。为了减小不同块设备的差异带来的影响,Linux 通过一个...

2019-05-19 13:23:27 318

原创 Redis Sentinel实现原理

Redis Sentinel实现主要包括几个方面:三个定时任务、主观下线和客观下线、Sentinel领导者选举、故障转移。三个定时任务1.每隔10秒,每个Sentinel节点会向主节点和从节点发送info命令获取最新的拓扑结构通过向主节点执行info命令,获取从节点的信息当有新的从节点加入时可以立即感知节点不可达或故障转移后,可以通过info命令实时更新节点拓扑信息2.每隔2秒,每...

2019-05-19 13:22:21 552

原创 Linux 文件系统是怎么工作的?

Linux 文件系统是怎么工作的?Linux文件系统为每个文件都分配两个数据结构,索引节点(index node)和目录项(directory entry)。索引节点,简称为inode,用来记录文件的元数据,比如inode编号、文件大小、访问权限、修改日期、数据的位置等。索引节点和文件一一对应,它跟文件内容一样,都会被持久化存储到磁盘中。所以记住,索引节点同样占用磁盘空间。目录项,简称为de...

2019-05-18 18:00:59 393

原创 Linux内存是怎么工作的?

Linux内存是怎么工作的?只有内核才可以直接访问物理内存。那么,进程要访问内存时,该怎么办呢?Linux 内核给每个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的。这样,进程就可以很方便地访问内存,更确切地说是访问虚拟内存。虚拟地址空间的内部又被分为内核空间和用户空间两部分,不同字长(也就是单个CPU指令可以处理数据的最大长度)的处理器,地址空间的范围也不同。内存中的Buf...

2019-05-18 18:00:24 183

原创 Redis之主从复制

Redis复制功能分为同步和命令传播两个操作:同步用于将从服务器的数据库状态更新至主服务器当前所处的数据库状态(类似新建)。命令传播用于当主从服务器的状态不一致时,让二者状态回到一致(类似更新)。同步是通过SYNC命令完成的,具体步骤如下:从服务器向主服务器发送SYNC命令收到SYNC的主服务器执行BGSAVE命令,在后台生成一个RDB文件,并用一个缓冲区记录当前开始执行的所有写命...

2019-05-18 15:01:28 71

原创 Linux软中断?

怎么理解Linux软中断?中断是系统用来响应硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来响应设备的请求。为了解决中断处理程序执行过长和中断丢失的问题,Linux将中断处理过程分成了两个阶段,也就是上半部和下半部:上半部用来快速处理中断,它在中断禁止模式下运行,主要处理跟硬件紧密相关的或时间敏感的工作。下半部用来延迟处理上半部未完成的工作,通常以内核...

2019-05-12 12:27:05 484

原创 Linux之CPU100%

应用的CPU使用率达到100%,怎么处理?应用的CPU使用率达到100%,怎么处理?Linux 通过 /proc 虚拟文件系统,向用户空间提供了系统内部状态的信息,而 /proc/stat 提供的就是系统的 CPU 和任务统计信息。CPU 使用率是最直观和最常用的系统性能指标,更是我们在排查性能问题时,通常会关注的第一个指标。所以我们更要熟悉它的含义,尤其要弄清楚用户(%use...

2019-05-12 12:23:38 372

原创 MySQL join 优化

join优化?回表是指,InnoDB 在普通索引 a 上查到主键 id 的值后,再根据一个个主键 id 的值到主键索引上去查整行数据的过程。回表是一行行搜索主键索引的。因为大多数的数据都是按照主键递增顺序插入得到的,所以我们可以认为,如果按照主键的递增顺序查询的话,对磁盘的读比较接近顺序读,能够提升读性能。这就是 MRR 优化的设计思路。MRR 能够提升性能的核心在于,这条查询语句在...

2019-05-12 12:22:29 329

原创 MySQL之Join

MySQL join?使用 join 有什么问题呢?1.如果可以使用 Index Nested-Loop Join 算法,也就是说可以用上被驱动表上的索引,其实是没问题的;2.如果使用 Block Nested-Loop Join 算法,扫描行数就会过多。尤其是在大表上的 join 操作,这样可能要扫描被驱动表很多次,会占用大量的系统资源。所以这种 join 尽量不要用。所以你在判...

2019-05-12 12:21:48 100

原创 MySQL读写分离有哪些坑?

读写分离有哪些坑?读写分离的主要目标就是分摊主库的压力。一种架构是客户端(client)主动做负载均衡,这种模式下一般会把数据库的连接信息放在客户端的连接层。也就是说,由客户端来选择后端数据库进行查询。一种架构是,在 MySQL 和客户端之间有一个中间代理层 proxy,客户端只连接 proxy, 由 proxy 根据请求类型和上下文决定请求的分发路由。客户端直连和带 proxy 的读写...

2019-05-11 19:05:21 1011

原创 Linux之 CPU上下文切换

经常说的 CPU 上下文切换是什么意思?每个任务运行前,CPU 都需要知道任务从哪里加载、又从哪里开始运行,也就是说,需要系统事先帮它设置好 CPU 寄存器和程序计数器(Program Counter,PC)。CPU 寄存器,是 CPU 内置的容量小、但速度极快的内存。而程序计数器,则是用来存储 CPU 正在执行的指令位置、或者即将执行的下一条指令位置。它们都是 CPU 在运行任何任务前,必...

2019-05-11 08:38:07 304

原创 Linux之怎么理解“平均负载”?

怎么理解“平均负载”?平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和CPU使用率并没有直接关系。当平均负载为2时,意味着什么呢?1.在只有2个CPU的系统上,意味着所有的CPU都刚好被完全占用。2.在4个CPU的系统上,意味着CPU有50%的空闲。3.而在只有1个CPU的系统中,则意味着有一半的进程竞争不到CPU。在 uptime ...

2019-05-10 20:28:41 151

原创 MYSQL 备库延迟问题

MYSQL 备库延迟问题一个线程负责客户端写入主库,另一线程sql_thread 执行中转日志(relay log)。在官方的 5.6 版本之前,MySQL 只支持单线程复制,由此在主库并发高、TPS 高时就会出现严重的主备延迟问题。coordinator (sql_thread)在分发的时候,需要满足以下这两个基本要求:1.不能造成更新覆盖。这就要求更新同一行的两个事务,必须被...

2019-05-10 20:27:06 466

原创 MySQL是怎么保证主备一致的?

MySQL是怎么保证主备一致的?binlog 可以用来归档,也可以用来做主备同步,但它的内容是什么样的呢?为什么备库执行了 binlog 就可以跟主库保持一致了呢主库接收到客户端的更新请求后,执行内部事务的更新逻辑,同时写 binlog。备库 B 跟主库 A 之间维持了一个长连接。主库 A 内部有一个线程,专门用于服务备库 B 的这个长连接。一个事务日志同步的完整过程是这样的:1.在...

2019-05-10 20:26:26 175

原创 哪里来的信心?

今天吹了一个非常大的牛,现在想想还是有些后怕的,也不知道哪里来的信心。 也感谢这份信任,自己会更加努力的。 也希望自己后面也越来越争气,不让别人的这份信赖落空,更不能对不起自己。 慢慢积累,逐渐强大。...

2019-05-08 20:35:37 106

原创 MySQL---一些问题

答疑:问题 1:执行一个 update 语句以后,我再去执行 hexdump 命令直接查看 ibd 文件内容,为什么没有看到数据有改变呢?回答:这可能是因为 WAL 机制的原因。update 语句执行完成后,InnoDB 只保证写完了 redo log、内存,可能还没来得及将数据写到磁盘。问题 2:为什么 binlog cache 是每个线程自己维护的,而 redo log buff...

2019-05-08 20:28:42 77

原创 MySQL---怎么保证数据不丢?

MySQL怎么保证数据不丢?redo log 的写入流程是怎么样的,如何保证 redo log 真实地写入了磁盘 ?binlog的写入逻辑:事务执行过程中,先把日志写到 binlog cache,事务提交的时候,再把 binlog cache 写到 binlog 文件中。一个事务的binlog是不能被拆开的,因此不论这个事务多大,也要确保一次性写入。系统给 binlog cache 分...

2019-05-08 20:27:58 209

原创 MySQL--- 有哪些“饮鸩止渴”提高性能的方法?

MySQL有哪些“饮鸩止渴”提高性能的方法?短连接风暴 短连接模型存在一个风险,就是一旦数据库处理得慢一些,连接数就会暴涨。max_connections 参数,用来控制一个 MySQL 实例同时存在的连接数的上限,超过这个值,系统就会拒绝接下来的连接请求,并报错提示“Too many connections”。 第一种方法:先处理掉那些占着连接但是不工作的线程。 ...

2019-05-07 20:22:26 209

原创 MySQL---为什么锁这么多?

为什么我只改一行的语句,锁这么多?加锁规则里面,包含了两个“原则”、两个“优化”和一个“bug”。1.原则 1:加锁的基本单位是 next-key lock。next-key lock 是前开后闭区间。2.原则 2:查找过程中访问到的对象才会加锁。3.优化 1:索引上的等值查询,给唯一索引加锁的时候,next-key lock 退化为行锁。4.优化 2:索引上的等值查询,向右遍历时...

2019-05-07 20:21:53 190

原创 犯错小结(一)

2019-05-06小结一下最近犯的一些错误:订了规矩,却没遵守 错误的时间贪婪 节奏没有掌握好,导致弹药有不足的风险 没有自己独立思考,盲目跟进 不够理智上面是最近犯得一些错误,形势已出,为自己的错误买单。...

2019-05-06 20:11:42 160

原创 MySQL---为什么只查一行的语句,也执行这么慢?

为什么只查一行的语句,也执行这么慢?第一类:查询长时间不返回 一般都是首先执行一下 show processlist 命令,看看当前语句处于什么状态。 ①:等 MDL 锁 使用 show processlist 命令查看State有Waiting for table metadata lock 处理方式,就是找到谁持有 MDL 写锁,然后把它 ki...

2019-05-06 19:57:33 355

原创 MySQL---为什么这些SQL语句性能差异巨大?

为什么这些SQL语句性能差异巨大?案例一:条件字段函数操作 如果对字段做了函数计算,就用不上索引了,这是 MySQL 的规定。为什么? 对索引字段做函数操作,可能会破坏索引值的有序性,因此优化器就决定放弃走树搜索功能。 函数操作,MySQL 无法再使用索引快速定位功能,而只能使用全索引扫描。案例二:隐式类型转换 数据类型转换的规则是什么? 在...

2019-05-06 19:57:01 172

原创 MySQL--- order by 是怎么工作的?

“order by”是怎么工作的?explain命令看语句的执行情况:Extra 这个字段中的“Using filesort”表示的就是需要排序,MySQL 会给每个线程分配一块内存用于排序,称为 sort_buffer。select city,name,age from t where city='杭州' order by name limit 1000 ;通常情况下,这个语句...

2019-05-05 21:34:01 268

原创 MyBatis---执行流程

执行流程:

2019-05-04 11:37:56 84

原创 MySQL---问题集锦

问题集锦:1:MySQL 怎么知道 binlog 是完整的?一个事务的 binlog 是有完整格式的:statement 格式的 binlog,最后会有 COMMIT;row 格式的 binlog,最后会有一个 XID event。在 MySQL 5.6.2 版本以后,还引入了 binlog-checksum 参数,用来验证 binlog 内容的正确性。对于 binlog 日志由于磁盘...

2019-05-04 10:33:43 96

原创 Spring---AOP

代理对象生成过程

2019-05-03 19:24:34 66

原创 Spring---IOC容器实现流程

加载、解析、注册过程Bean的创建:

2019-05-03 15:51:30 55

原创 Spring---IOC容器

IOC 容器: 加载解析Bean(BeanDefinitionReader): 加载xml文件流 转换成Document 解析注册BeanDefinition 解析 注册(BeanDefinitionRegistry) 管理Bean(BeanFactory): ...

2019-05-03 15:13:41 132

原创 MySQL---Count

不同的 count 用法在 select count(?) from t 这样的查询语句里面,count(*)、count(主键 id)、count(字段) 和 count(1) 等不同用法的性能,有哪些差别。这里详细说明一下这几种用法的性能差别。需要注意的是,下面的讨论还是基于 InnoDB 引擎的。这里,首先你要弄清楚 count() 的语义。count() 是一个聚合函数,对于返回...

2019-05-03 14:02:27 448

原创 MySQL---删除时做了什么

1.delete操作会生成插入相同记录的记录复用和page复用2.delete会产生page空洞,随机insert也会产生page空洞(页分裂),索引update分解为delete和insert也会产生空洞3.重建表可以使数据在page上更紧凑4.alter table tb_name engine=innodb 在非online ddl 时server层生成临时表且mdl写锁,阻塞其他...

2019-05-03 14:01:15 123

原创 MySQL---字段加索引

怎么给字符串字段加索引?MySQL 是支持前缀索引的,也就是说,你可以定义字符串的一部分作为索引。默认地,如果你创建索引的语句不指定前缀长度,那么索引就会包含整个字符串。索引选取的越长,占用的磁盘空间就越大,相同的数据页能放下的索引值就越少,搜索的效率也就会越低。有没有什么办法既可以占用更小的空间,也能达到相同的查询效率?第一种方式是使用倒序存储。第二种方式是使用 hash ...

2019-05-02 06:24:11 172

原创 MySQL---索引

1.mysql如何判断一个查询的扫描行数?根据统计信息来估算记录数。统计信息就是索引的“区分度”。一个索引上不同的值越多,这个索引的区分度就越好。2.索引基数如何计算?采样统计。InnoDB 默认会选择 N 个数据页,统计这些页面上的不同值,得到一个平均值,然后乘以这个索引的页面数,就得到了这个索引的基数。3.可以重新统计索引信息的命令是什么?analyze table t 命令,...

2019-05-02 06:12:25 82

原创 MySQL---索引的选择

选择普通索引还是唯一索引?对于查询过程来说:a、普通索引,查到满足条件的第一个记录后,继续查找下一个记录,直到第一个不满足条件的记录b、唯一索引,由于索引唯一性,查到第一个满足条件的记录后,停止检索但是,两者的性能差距微乎其微。因为InnoDB根据数据页来读写的。对于更新过程来说:概念:change buffer当需要更新一个数据页,如果数据页在内存中就直接更新,如果不在内存...

2019-05-02 06:09:40 90

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除