- 博客(19)
- 资源 (1)
- 收藏
- 关注
原创 如何定位 Druid & HikariCP 连接池的连接泄漏问题?
在数据库连接池的使用中,连接泄漏是一个常见且严重的问题。本文通过分析一个实际的案例,探讨了连接泄漏的危害、产生原因以及如何在 Druid 和 HikariCP 这两种常见的连接池中定位和解决连接泄漏问题。
2025-03-31 09:32:20
985
原创 深入解析 Druid 连接池:连接有效性检测与 Keep-Alive 机制
应用出现“Communications link failure The last packet successfully received from the server was xxx milliseconds ago.”错误,你的 Druid 连接池配置对了吗?
2025-03-17 11:17:15
947
原创 Redis 大 Key 分析利器:支持 TOP N、批量分析与从节点优先
推荐一个比 redis-cli 更强大的 Redis 大 Key 分析工具
2025-02-24 07:37:25
947
原创 基于源码分析 SHOW GLOBAL STATUS 的实现原理
Server 层面的状态变量:这些状态变量主要在(mysqld.cc)中定义。在 MySQL 8.4 中,共有 321 个状态变量。其中包括了 com_status_vars 中定义的 167 个 Com 相关的变量。插件中的状态变量:InnoDB:在(ha_innodb.cc)中定义 ,共 76 个。半同步复制:在(semisync_source_plugin.cc)中定义,共 14 个,从库只有 1 个。组复制:在(plugin.cc)中定义,共 22 个。
2025-01-06 08:14:57
641
原创 MySQL 优化利器 SHOW PROFILE 的实现原理
通过可传输表空间的方式导入一个 4GB 大小的表,为什么大部分耗时是在System lock阶段?
2024-12-23 08:53:58
576
原创 基于案例分析 MySQL 权限认证中的具体优先原则
哈哈,双十一来了,顺便安利下我的书-《MySQL实战》!目前收到的反馈都还不错,值得 DBA 拥有~
2024-10-28 11:06:45
967
原创 Redis 内存突增时,如何定量分析其内存使用情况
在这些内存开销中,used_memory_startup 基本不变,mem_replication_backlog 受 repl-backlog-size 的限制,used_memory_scripts 开销一般不大,而字典的内存开销则与数据量的大小成正比。需要注意的是,used_memory_dataset 并不是根据 Key 的数量及 Key 使用的内存计算出来的,而是通过 used_memory 减去 used_memory_overhead 得到的。接下来,我们看看如何系统地分析这类问题。
2024-09-23 09:17:10
1308
原创 如何让 MGR 不从 Primary 节点克隆数据?
MGR 选择 Donor 是随机的。MGR 在执行克隆操作之前,会将 clone_valid_donor_list 设置为 Donor 的 endpoint,所以,在启动组复制之前,在 mysql 客户端中显式设置 clone_valid_donor_list 是没有效果的。MGR 执行克隆操作,实际上调用的就是命令。
2024-07-22 07:49:08
998
原创 升级到 MySQL 8.4,MySQL 启动报错:io_setup() failed with EAGAIN
最近碰到一个 case,一台主机上,部署了多个实例。之前使用的是 MySQL 8.0,启动时没有任何问题。但升级到 MySQL 8.4 后,部分实例在启动时出现了以下错误。下面我们来分析下这个报错的具体原因及解决方法。
2024-07-01 14:37:29
1149
原创 SHOW PROCESSLIST 最多能显示多长的 SQL?
在 MySQL 中,如果我们想查看实例当前正在执行的 SQL,常用的命令是。但如果 SQL 过长的话,就会被截断。这时,我们一般会用来查看完整的 SQL。最近碰到一个 case,发现无论是使用,还是 performance_schema.processlist 都无法获取完整的 SQL,反倒 information_schema.processlist 可以。最后发现,无法查看完整的 SQL 竟然与 performance_schema_show_processlist 参数有关。
2024-06-17 11:18:46
526
1
原创 没想到,JDBC 驱动会偷偷修改 sql_mode 的会话值
同一个SQL,在 mysql 客户端中执行提示 warning,但在 java 程序中执行却又报错。
2024-03-04 09:23:16
1312
1
原创 从源码分析 MySQL 身份验证插件的实现细节
mysql.user 中的 authentication_string 字段存储的是。服务端对客户端进行身份验证的流程图如下:服务端在对客户端进行身份验证时,会首先发送一个 20 字节的盐值,客户端接受到这个盐值后,会返回一个通过以下公式计算的加密密码。
2024-01-08 12:52:05
1226
原创 什么是 MySQL JDBC 连接池中最高效的连接检测语句?
isValid 方法是在 JDBC4 中引入的。JDBC 是 Java 用于与关系型数据库通信的标准API。JDBC4 指的是 Java Database Connectivity (JDBC) 的第 4 版本,该版本是在 Java 6(也被称为Java 1.6)中引入的。所以只要程序使用的是 Java 1.6 及以上的版本,都支持 isValid 方法。下面,我们看看这个方法的实现原理。@Override。
2023-12-26 12:31:49
701
1
原创 如何将 performance_schema 中的 TIMER 字段转换为日期时间
最近有好几个朋友问,如何将 performance_schema.events_statements_xxx 中的 TIMER 字段(主要是TIMER_START和TIMER_END)转换为日期时间。因为 TIMER 字段的单位是皮秒(picosecond),所以很多童鞋会尝试直接转换,但转换后的结果并不对,看下面这个示例。下面会从源码角度分析 TIMER 字段的生成逻辑。对源码分析不感兴趣的童鞋,可直接跳到后面的案例部分看结论。
2023-12-12 15:10:52
1305
原创 基于案例分析 MySQL Group Replication 的故障检测流程
故障检测(Failure Detection)是 Group Replication 的一个核心功能模块,通过它可以及时识别集群中的故障节点,并将故障节点从集群中剔除掉。如果不将故障节点及时剔除的话,一方面会影响集群的性能,另一方面还会阻止集群拓扑的变更。下面结合一个具体的案例,分析 Group Replication 的故障检测流程。
2022-11-07 10:04:22
670
原创 从源码分析 MySQL Group Replication 的新主选举算法
结合代码和上面四个案例的分析,最后我们总结下 MGR 的新主选举算法:如果集群中存在 MySQL 5.7 的节点,则会将 MySQL 5.7 的节点作为候选节点。如果最小版本小于 MySQL 8.0.17,则所有的节点都可作为候选节点。如果最小版本大于等于 MySQL 8.0.17,则只有最小版本的节点会作为候选节点。在候选节点的基础上,会进一步根据候选节点的权重和 server_uuid 选择 Primary 节点。具体来说,
2022-10-14 10:48:56
618
1
原创 Binlog分析利器-binlog_summary.py
Binlog中,除了具体的SQL,其实,还包含了很多有价值的信息,如,事务的开始时间。事务的结束时间。事务的开始位置点。事务的结束位置点。操作的开始时间(一个事务通常会包含多个操作)。表的操作信息,如哪些表执行了哪些操作。拿到上面这些信息,我们可以做哪些事情呢?基于事务的开始位置点和结束位置点,我们可以得到事务的大小。知道了事务的大小,可用来判断它是否为大事务,是否是导致主从延迟的原因。基于事务的开始时间和结束时间,我们可以得到事务的持续时间。通过分析表的操作信息,可间接定位出线上
2021-08-08 14:14:36
1950
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人