- 博客(66)
- 资源 (1)
- 收藏
- 关注
原创 ArrayList扩容源码解析
arraylist grow扩容源码、arraylist add源码、arraylist整数溢出、arraylist扩容bug。
2022-11-05 19:34:08
447
原创 Java堆:Shallow Size和Retained Size
java堆 Shallow和retained sizes idea的Shallow和retained
2021-06-20 18:35:30
846
转载 sysbench压测MySQL数据库
一般情况下,在企业中我们申请了一台数据库服务器,不是直接开发使用,而是先进行压测,这样就能心里有数,这台数据库服务器的负载压力如何,性能表现如何,每秒能抗住多少个请求。1、测试机器2 vCPU 4 GiB (I/O优化)2、数据库压测工具sysbench,开源项目,去github下载就行。3、建立测试库create database test_db character set utf8mb4 collate utf8mb4_bin;4、准备测试表sysbench //基于mysql的驱
2021-04-18 15:48:19
410
原创 mysql count 浅析
上次打了慢sql日志,发现有很多包含count逻辑的sql,周末抽空来梳理下mysql里的count。一. count(*)的实现与执行在mysql中,不同的存储引擎,count(*)的实现方式是不同的Myisam:Myisam会把表的行数存在磁盘上,每当执行count(*)的时候,直接返回就行了,所以速度非常快。Innodb:Innodb执行count(*)的时候,需要一条一条把数据从存储引擎里读出来,然后累计计数。既然myisam的count这么快,为什么innodb不能基于myisa
2021-04-11 22:03:49
484
原创 五百万数据 mysql count(*)优化
一、故事背景有一张 500w 左右的表做 select count(*) 速度特别慢。二、原 SQL 分析Server version: 5.7.24-log MySQL Community Server (GPL)SQL 如下,仅仅就是统计 api_runtime_log 这张表的行数,一条简单的不能再简单的 SQL:select count(*) from api_runtime_log;我们先去运行一下这条 SQL,可以看到确实运行很慢,要 40 多秒左右,确实很不正常~mysql
2021-04-11 18:46:40
11269
3
原创 openjdk 11 jmap 取消了 -heap 参数
openjdk 11 jmap工具取消了 -heap 参数,该 jmap 命令行工具打印内存相关统计运行中的VM或核心文件。对于核心文件,请使用 jhsdb jmap。$ jhsdb jmap --heap --pid 29620Attaching to process ID 29620, please wait...Debugger attached successfully.Server compiler detected.JVM version is 11.0.5+10-LTSusing
2021-01-26 21:17:56
3376
原创 feign自定义请求拦截器、编码器、解码器
feign自定义header,请求体,返回体,feign拦截器,编码器,解码器。feign返回的不是json格式。feign请求格式不是json。
2020-10-17 15:53:05
8698
原创 Idea使用eclipseCodeFormatter插件报错Invalid byte 1 of 1-byte UTF-8 sequence
在该插件 github isssus中找到了解决办法,参考以下isssus:*.java failed to format with Eclipse Code Formatter. Invalid byte 1 of 1-byte UTF-8 sequence.failed to format with Eclipse Code Formatter. Invalid byte 1 of 1-byte UTF-8 sequenceisssus 215 中给出了一个 EclipseFormatter.
2020-10-16 16:28:50
1017
转载 java 泛型 PECS准则
我们知道<?>表示:我想使用Java泛型来编写代码,而不是用原生类型;但是在当前这种情况下,我并不能确定下泛型参数的具体类型,因此用?表示任何某种类型。因此,根据我们对通配符的了解,使用无界通配符的泛型类不能够写数据,而在读取数据时,所赋值的引用也只能是 Object 类型。那么,我们究竟如何向泛型类写入、读取数据呢? 《Effective Java2》给出了答案。 PECS: producer(读取)-extends, consumer(写入)-super。换句话说,如果输入参数表示一
2020-09-19 20:27:12
483
原创 mysql count(1) count(*) count(字段) count(主键id)区别
mysql count(1) count(*) count(字段) count(主键id)区别
2020-07-15 10:07:17
1196
原创 mysql性能抖动原因
之前文章介绍了 WAL 机制。现在你知道了,InnoDB 在处理更新语句的时候,只做了写日志这一个磁盘操作。这个日志叫作 redo log(重做日志)。当内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为“脏页”。内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”。平时执行很快的更新操作,其实就是在写内存和日志,而 MySQL 偶尔“抖”一下的那个瞬间,可能就是在刷脏页(flush)。什么情况会引发数据库的 flush 过程呢?InnoDB 的 redo log 写满
2020-07-14 10:45:25
1518
原创 快照在mvcc中如何工作
讲事务隔离级别的时候提到过(mysql事物隔离级别),如果是可重复读隔离级别,事务 T 启动的时候会创建一个视图 read-view,之后事务 T 执行期间,即使有其他事务修改了数据,事务 T 看到的仍然跟在启动时看到的一样。也就是说,一个在可重复读隔离级别下执行的事务,好像与世无争,不受外界影响。和你分享行锁的时候又提到(mysql行锁),一个事务要更新一行,如果刚好有另外一个事务拥有这一行的行锁,它又不能这么超然了,会被锁住,进入等待状态。问题是,既然进入了等待状态,那么等到这个事务自己获取到行锁要更
2020-07-06 09:32:53
2106
原创 mysql全局锁,表锁,行锁
根据加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类。全局锁加全局读锁的命令是 Flush tables with read lock (FTWRL)。当你需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句。FTWRL 前有读写的话 ,FTWRL 都会等待 读写执行完毕后才执行FTWRL 执行的时候要刷脏页的数据到磁盘,因为要保持数据的一致性 ,理解的执行FT
2020-07-05 14:45:30
754
2
原创 mysql主键索引、非主键索引、联合索引、覆盖索引、最左匹配、索引下推
mysql主键索引、非主键索引、联合索引、覆盖索引、最左匹配、索引下推
2020-07-01 22:36:33
1809
1
原创 mysql基本架构及select语句执行过程(笔记)
MySQL 的基本架构示意图,从中你可以清楚地看到 SQL 语句在 MySQL 的各个功能模块中的执行过程。大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory
2020-06-28 16:12:28
814
转载 【踩坑总结】java8中stream的findAny踩坑
java8中stream的findAny踩坑需求:寻找list中符合要求的对象通过findAny去实现A a = bList().stream().filter(b -> "test".equals(b.getName())).findAny().get();结果后面发现这个方法并不是找得到就返回,找不到就不做处理,而是找不到直接抛异常了。于是后面改用了这种方式A a =bLi...
2020-05-08 15:18:49
2160
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人