自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【group by 之后去重,某个字段展示最后一次的值】sql怎么写

实现效果:group by 之后去重,多条条件相同数据变为一条,判断多条数据的某些字段,只要有为1的就为1。

2024-07-21 21:46:18 136

原创 IDEA 源码阅读技巧

平时,我们阅读源码的时候,经常需要查看类的层次结构。就比如我们遇到抽象类或者接口的时候,经常需要查看其被哪些类实现。拿 Spring 源码为例,CacheAspectSupport是一个关于 Bean 属性/定义的接口。如果我们需要查看 CacheAspectSupport被哪些类实现的话,只需要把鼠标移动到 CacheAspectSupport类名上,然后使用快捷键 Ctrl + H 即可。

2024-07-21 21:08:48 684

原创 Mysql之Using index for skip scan

Skip Scan 是一种针对索引的优化技术,当查询条件无法完全匹配索引的前缀部分时,它仍然可以利用索引的某些部分来提高查询效率。这种技术尤其适用于多列索引。假设我们有一个包含两列的复合索引 (col1, col2),如果查询条件只涉及 col2 而不包括 col1,传统的索引扫描可能无法有效利用这个索引。然而,通过 Skip Scan,MySQL 可以跳过不必要的索引前缀部分,直接扫描后续部分,从而提高查询性能。

2024-07-08 22:11:41 453

原创 Innodb Buffer Pool缓存机制(四)预读与Mysql改进的LRU策略

InnoDB提供了预读(read ahead)。所谓预读,就是InnoDB认为执行当前的请求可能之后会读取某些页面,就预先把它们加载到Buffer Pool中。

2024-06-06 00:08:03 899

原创 Innodb Buffer Pool缓存机制(三)Innodb Buffer Pool内部组成

其内部结构如下,buffer pool 的前一部分存储【控制块】,后一部分存储【缓冲页】,如果中间有未被利用的空间,就叫他【内存碎片】吧。buffer pool 的初始化:数据库会在启动的时候,安装配置中的 buffer pool 的大小,去向操作系统申请一块内存,作为 buffer pool 的内存区域,然后会按照默认的缓存页的大小【16KB】以及对应的【800字节左右】的【控制块】的大小,在buffer pool 中划分出一个一个的缓存页和一个一个与其对应的描述数据(控制块)。

2024-06-04 23:26:50 1022

原创 记一次linux获取截取pid截取不全的问题

awk是一种强大的文本处理工具,这里用它来提取进程ID(PID)。'{print $2}'表示打印每行的第2个字段,也就是PID。

2024-05-31 00:28:22 364

原创 Innodb Buffer Pool缓存机制(二)innodb_buffer_pool_size等参数篇

在MySQL5.5之前,广泛使用的和默认的存储引擎是MyISAM。MyISAM使用操作系统缓存来缓存数据。InnoDB需要innodb buffer pool中处理缓存。所以非常需要有足够的InnoDB buffer pool空间。

2024-05-22 01:09:22 1595

原创 Innodb Buffer Pool缓存机制(一)一条sql的执行过程

一条sql的执行过程

2024-05-22 01:08:04 556

原创 联合索引与索引下推

索引下推是把本应该在 server 层进行筛选的条件,下推到存储引擎层来进行筛选判断,这样能有效减少回表

2024-05-03 23:04:34 1008

原创 算法新手(一)——位运算、算法是什么、介绍位运算和简单排序

i >= 0;// 32位//////////print(-1);print(a);////

2024-04-21 20:52:49 1030

原创 SQL的in、exists和join哪个性能好?结果你可能不敢信

SQL界一直以来都流传这样一种说法,不要用in,要用exists代替in,in的性能很低。甚至在程序中使用了in还会被同行嫌弃,认为在任何时候exists的性能都比in高。小数据量这几个用起来肯定没有太多区别,而要造几百万的数据进行测试,毕竟稍显麻烦。既然所有的大神都这么说,那么就这么信吧。现在主流的观点认为,外表比内表(子查询表)结果集大,用in效率比exists高;内表(子查询表)比外表结果集大,用exists效率比in高。但实际如何,还是看最后的测试结果吧。

2024-04-21 14:13:51 1376

原创 浅谈Mysql(四)——Mysql知识补充

MySQL中的查询语句通常不会锁表,因为查询操作只读取数据而不修改数据。然而,当执行某些特定的查询语句或者在特定情况下,MySQL可能会对表进行锁定以保证数据的一致性和完整性。需要注意的是,MySQL的锁定机制是为了保证数据的一致性和隔离性,但过多的锁定可能会导致性能下降和并发性降低。因此,在设计数据库和查询时,应该合理选择锁定的粒度,并优化查询语句,以减少锁定的需求,并提高系统的性能和并发能力。

2024-04-08 00:06:51 1087 1

原创 浅谈Mysql(三)——MySQL/InnoDB 事务隔离级别分享

• 原子性(Atomicity• 一致性(Consistency)• 隔离性(Isolation)• 持久性(Durability。

2024-03-29 00:20:11 908

原创 浅谈Mysql(二)——慢sql、mysql锁、大事务的影响

如上图,如果事务1是超大事务,最后一行是查询id=1的数据,事务二…事务N,都在更新id=1的数据,那么事务1中的select * from …而是上undo 日志从后往前推,一直推到t1事务的视图,所以 是可能产生慢sql的。每个事务开始的时候,都会维护一个视图。这个视图记录了每一行的变化点,假设事务1是从t1时间开始记的,有变化就记。说mysql的时候,一定要区分是在service层,还是引擎层;通常认为5%的时间是定位数据,95%的时间是用来取数据。那事务1查找id=1的值的过程是怎样的?

2024-03-29 00:19:57 947

原创 浅谈Mysql(一)——索引、隔离级别、死锁等

少了一次数据复制,这层复制就是innodb引擎向service层复制数据的过程,即使复制了一个小的字段,也是有io上的消耗的的。而后者,mysql执行前会进行分析,最终可能只走了A索引,也可能只B索引,也可能两个索引都走了,最后取交接。也有可能是这样的:mysql的索引是一种数据结构,一开始是在磁盘里的,访问一次,会加载到内存当中的,这样就少了一次查询b+数的过程;——就是为了存各种各样的buffer,有查询的缓存,有更新的缓存,有binlog刷日志的缓存,等等;会有一些cpu的性能上的问题;

2024-03-13 02:02:00 970

原创 fastjson序列化MessageExt对象问题(1.2.78之前版本)

fastjson 序列化需注意问题,不能序列化RocketMq工具类中MessageExt对象,会报错;原因:MessageExt包含ByteBuffer类型的nio包对象,而低版本fastjson没有该类型序列化器(JavaBeanSerializer),使用默认的序列化器;ByteBuffer中getLong方法,getLong方法的position偏移8个字节,而MessageExt中,构建的ByteBuffer存储的时4个字节,所以会BufferUnderflowException异常。

2024-02-28 01:15:39 973

原创 left join+group by语句性能优化

需求:求【昨日触达】、【本周拜访】、【本月活动数】。背景:三个维度的数据都按日统计在一张表里。首先想到的就是left join +group by。

2024-02-27 01:09:52 374

原创 @Valid常用的用法

除了@Null,@ NotNull,@ NotBlank,@NotEmpty 这四个外,其他所有的注解,传 null 时都会被当作有效处理。

2024-02-06 00:27:22 382

原创 “SET key value [EX seconds] [PX milliseconds] [NX|XX]“和redis分布式锁

在 Java 中,Redisson提供了一个RedissonLock类,它有类似于SET key value [EX seconds] [PX milliseconds] [NX]的 API 。

2024-02-06 00:24:58 1313

原创 Json打印MQ对象问题

图中红色方框当中,用的序列化方式为 fastjson,此行代码会抛出异常,导致消费失败,进入重试队列,且没有任何业务日志输出。结论:无论是kafka,还是RocketMq,消费者方法参数中的MessageExt对象不能被 fastjson默认的方式序列化。至此:问题显而易见,fastjson在1.2.31及之前,没有提供ByteBuffer 序列化器,所以用了默认的。fastjson序列化的过程源码这里就不分析了,有兴趣自己看一下,总之是要获取对应的序列化器;

2024-02-05 01:02:14 537

原创 内存问题(三)——生成内存问题案例

由于条件问题,一个查询语句把一个表里所有的记录都查询出来了,数据量很大,把内存打爆,造成现场验收卡,卡,卡…在写完递归方法后,自测一定要认真测试到递归方法层的输入与返回,功能通过不能代表代码没有问题。在使用ArrayList的时候,如果可以预知数组的大小范围,尽量对其进行容量大小的初始化,避免其频繁扩容。将服务器监控预警做到位,此次疏于预警,导致服务器异常,没有及时发现,而是由业务方通知发现的,以后应避免此类事情再次发生。

2024-01-11 00:26:02 999

原创 mysql 条件位运算实现多值存储

mysql 条件位运算位运算实现多值存储,方法适合数据范围有限,且不会变更在业务上往往会出现多选的情况,例:选择 周一 至 周日 随意组合;数据在设计时就会如何去储存?七个二进制分别代表 周一至周日,0-未选 1-选中,例: 选择了周日、周一、 周二。对应二进制位:11000001,数据库储存十进制:67注意:mysql位运算,一个字段表示多选值;这种方式可以提高查询效率,减少like语句的应用;这种方式,。比如张三,第一次勾选了周一,第二次想新增周三、周四,那么前端传值:1,8,16;

2024-01-03 01:22:41 1135

原创 内存问题(二)——内存问题模拟

慢sql的累计,最先会导致数据库服务器cpu飙高。如果超过20%,一般来说,肯定是有慢sql了,监控慢sql,最方便的就是配一个慢sql日志,每天查一下;——因为栈没有执行完的时候,栈上所有方法不能释放。如果不释放,恰巧来了请求,内存达到一定阈值,会出发gc。除了mat分析工具,还有jprofile工具,只不过是收费的。疑惑:生成的dump.hprof文件,与课上的不一样;一般情况下,内存溢出,只是异常,不会使jvm进程死掉。t线程1代码抛出异常了,线程2还会运行;——这里的栈溢出,只是一个栈帧装不下;

2023-12-21 00:43:02 838

原创 内存问题(一)——内存概述

是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

2023-12-15 00:00:52 918

原创 cpu飙高问题,案例分析(三)——非标导入引发CPU彪高,与RateLimiter限流

非标导入使用easyexcel组件进行导入处理,10几万的数据量引发CPU彪高。

2023-11-30 23:41:15 481

原创 Redis使用increment方法返回null的原因以及解决方案

开启了redis的事务支持,使用spring的事务注解@Transactional在执行increment 方法时会返回 null。

2023-11-27 23:30:52 1065

原创 cpu飙高问题,案例分析(二)——批处理数据过大引起的应用服务CPU飙高

并行流如果使用,最好使用自定义的线程池,避免使用默认的线程池即线程池隔离思想,造成阻塞或者资源竞争等问题;parallelStream 适用的场景是CPU密集型的,假如本身电脑CPU的负载很大,那还到处用并行流,那并不能起到作用,切记不要再paralelSreram操作是中使用IO流;不要在多线程中使用parallelStream,如本次案例,大家都抢着CPU是没有提升效果,反而还会加大线程切换开销;

2023-11-27 23:20:56 1177

原创 cpu飙高问题,案例分析(一)——序列化问题引起的应用服务CPU飙高

CPU性能指标:load average:负载,linux查看的时候,通常显示如下:load average后面有三段数字:代表了系统1分钟,5分钟,15分钟平均负载。形象的类别可以参考:了解 Linux CPU 负载 - 什么时候应该担心?(网址可翻译中文)另一个形象的比喻:CPU的load和使用率傻傻分不清(非常重要,建议详细阅读)当load average高,%Cpu(s)低,表示:负载高,利用率低。查看cpu信息:仅显示将使用的处理器名称:2.1 定位CPU标高1.执行完 jav

2023-11-21 00:57:41 286

原创 自动还款业务事故案例,与金融场景幂等性思考

事故发生原因:1.自动还款的防重有问题,当出现并发进行消费MQ时,通过读库的防重是不起作用的。

2023-11-08 00:05:51 444

原创 幂等性设计,及案例分析

将数据从磁盘读入内存涉及随机IO的访问,是数据库里面成本最高的操作之一。change buffer因为减少了随机磁盘访问, 所以对更新性能的提升是会很明显的。因此,对于写多读少的业务来说,页面在写完以后马上被访问到的概率比较小,此时change buffer的使用效果最好。这种 业务模型常见的就是账单类、日志类的系统。反过来,假设一个业务的更新模式是写入之后马上会做查询,那么即使满足了条件,将更新先记录在change buffer,但之 后由于马上要访问这个数据页,会立即触发merge过程。

2023-11-02 00:29:35 180

原创 IDEA 断点高阶

返回断点处:设置debug配置:1.勾选Attach memory agent2.计算对象大小(但是大小有限制,对象太大,计算不出来)3.对象太大,可能会报错:4.成功计算对象大小:相当于没打断点,但起到了断点的作用:1.Trace Current Stream Chain,调试lambda表达式:2.有两种模式:3.Flat Mode模式截图:4.Split Mode模式截图:5. 总体来说用处比较局限,因为一般通过流处理的对象都比较大,太大了idea就不支持了。断点处点击

2023-10-27 01:43:49 1889

原创 MapStruct使用方法

Mapper在上述示例中,我们定义了一个mapToLocalDate方法,该方法将接收一个String类型的参数dateStr并返回一个LocalDate类型的结果。在toUser方法中,我们使用@Mapping注解指定将dto.age映射到User对象的age属性。MapStruct会自动调用mapToLocalDate方法进行数据类型转换。

2023-10-20 00:30:59 595

原创 MetaObjectHandler的使用

MetaObjectHandler是MyBatis-Plus提供的一个接口,用于自动填充实体对象中的公共字段(例如创建时间、修改时间、逻辑删除标志等)

2023-10-19 00:12:20 771 2

原创 解决GET请求入参@NotNull验证不生效问题

get请求@NotNull验证不生效。

2023-10-18 23:29:55 988

原创 Memory Analyzer分析内存溢出

下载适用于你操作系统的最新版本的MAT,并进行安装。

2023-10-18 00:59:01 702

原创 MySQL架构,以及redo log、undo log和binlog的区别

WAL(Write Ahead Log)预写日志,指的是 MySQL 的写操作并不是立刻更新到磁盘上,而是先记录在日志上,然后在合适的时间再更新到磁盘上。也是数据库系统中常见的一种手段,用于保证数据操作的原子性和持久性。相信大家如上的解释和介绍都知道 redo log 的作用和它的刷盘时机、存储形式。现在我们来思考一个问题:只要每次把修改后的数据页直接刷盘不就好了,还有 redo log 什么事?它们不都是刷盘么?差别在哪里?

2023-01-11 23:42:17 395 1

原创 Mysql调优(五)—— 服务器参数设置、mysql集群(后续更新)

mysql服务器参数设置;

2022-12-12 23:22:51 284

原创 Mysql调优(四)——分区表

分区表;考虑到索引在空间和维护上的消耗,也不希望使用索引,即使使用索引,会发现会产生大量的碎片,还会产生大量的随机IO,但是当数据量超大的时候,索引也就无法起作用了,此时可以考虑使用分区来进行解决。如果数据有明显的热点,而且除了这部分数据,其他数据很少被访问到,那么可以将这部分热点数据单独放在一个分区中,让这个分区的数据能够有机会都缓存在内存中,这样查询就可以只访问一个很小的分区表,能够使用索引,也能够有效的使用缓存。分区的主要目的是将数据安好一个较粗的力度分在不同的表中,这样可以将相关的数据存放在一起。

2022-12-12 22:52:10 394

原创 Mysql调优(三)——通过索引进行优化、 查询优化

通过索引进行优化;查询优化;哈希索引;聚簇索引与非聚簇索引;组合索引;执行过程的优化

2022-12-12 22:48:50 387

原创 Mysql调优(二)——schema与数据类型优化、执行计划

schema与数据类型优化、执行计划

2022-12-07 23:43:23 128

空空如也

空空如也

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

TA关注的人

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