自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SQL 审核神器 SQLE 专业版全新上线,永久免费!

全新上线 | SQLE 专业版,永久免费!

2024-02-02 15:56:20 873 1

原创 MySQL 核心模块揭秘 | 17 期 | InnoDB 有哪几种行锁?

InnoDB 有哪几种行锁,其中比较特殊的插入意向锁为什么而存在?

2024-05-22 15:42:16 114

原创 MySQL 隐式转换必知必会

在生产环境中经常会有一些隐式类型转换导致SQL索引失效,性能极差,进而影响影响集群负载和业务的情况。本文总结了隐式转换常见的场景,在生产中要尽量避免 SQL 隐式转换的出现。

2024-05-21 17:13:23 190

原创 《一问一实验:AI 版》520 献给 DBA 们的 AI

🥳 社区王牌专栏《一问一实验:AI 版》全新归来,在 520 这个充满爱的特殊日子里,献上一份属于 DBA 们的爱(AI)。

2024-05-20 17:42:11 588

原创 MySQL 核心模块揭秘 | 16 期 | InnoDB 表锁

server 层。存储引擎。基于以上两层结构,MySQL 的锁也可以分为两大类。server 层的锁,就是让我们头痛不已的元数据锁(MDL)。存储引擎的锁,取决于各存储引擎的实现。InnoDB 支持表锁、行锁、谓词锁(用于空间索引,我们不会介绍)。表锁分为共享锁(S)、排他锁(X)、意向共享锁(IS)、意向排他锁(IX)、AUTO-INC 锁。行锁分共享锁(S)、排他锁(X),以及有点特殊的插入意向锁(普通记录锁(LOCK_REC_NOT_GAP)。间隙锁(LOCK_GAP)。

2024-05-17 11:22:54 845

原创 详解 MySQL 的 binlog 时间戳与 exec_time 的关系

近期,某系统进行测试时,发现主从同步存在延迟,随即通过 binlog 确认延迟原因。当使用命令解析后,发现其中的信息“似懂非懂”。/*!*/;/*!*/;/*!*/;/*!*/;*/;*/;BEGIN/*!*/;/*!*/;......### SET...### SET#240430 18:38:16 执行 begin 开启了事务 (为便于表述,将时间字段名为timestamp)#240430 18:38:16 执行了 tb3的insert 操作。

2024-05-14 15:24:06 403

原创 分析 MySQL 中的内存使用情况

了解如何可视化 MySQL 连接的内存使用情况。作者:Benjamin Dicken本文约 3000 字,预计阅读需要 10 分钟。

2024-05-13 16:43:15 585

原创 MySQL 通过 systemd 启动时 hang 住了……

systemd启动mysqld的过程中,会先根据serviceExecStart(启动mysqldmysqld启动创建pid文件ExecStartPost(自定义的一些后置脚本:调整权限、将pid写入cgroup等)在步骤 2-3的中间态,也就是pid。由于这个pid文件和pid进程确实存在(如果不存在kill命令或cat会报错),自动化的 CASE 认为kill操作已成功结束。但由于mysqld.pid这个文件是由 MySQL 自身维护的,在systemd的视角中,还需要继续等待。

2024-05-09 15:55:17 401

原创 什么情况下 MySQL 连查询都能被阻塞?

因而导致的表对象不可读写。因而导致的表对象不可读写。

2024-05-08 16:12:55 862

原创 数据库索引算法的威力:B-Tree 与 Hash 索引

数据库索引是优化任何数据库系统性能的关键组成部分。如果没有有效的索引,您的数据库查询可能会变得缓慢且低效,从而导致用户体验不佳并降低生产力。在这篇文章中,我们将探讨创建和使用数据库索引的一些最佳实践。作者:The Java Trail本文约 2700 字,预计阅读需要 9 分钟。数据库中使用多种索引算法来提高查询性能。

2024-05-07 15:49:49 331

原创 MySQL VARCHAR 最佳长度评估实践

你的 VARCHAR 长度合适么?作者:官永强,爱可生 DBA 团队成员,擅长 MySQL 运维方面的技能。热爱学习新知识,亦是个爱打游戏的宅男。作者:李富强,爱可生 DBA 团队成员,熟悉 MySQL,TiDB,OceanBase 等数据库。相信持续把对的事情做好一点,会有不一样的收获。爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。本文约 2200 字,预计阅读需要 8 分钟。

2024-05-07 15:34:41 538

原创 MySQL 社区经理:MySQL 8.4 InnoDB 参数默认值为什么要这么改?

目前,MySQL 的发布模型分为两个主要路径:LTS 版(长期支持)和创新版。所有 LTS 和创新版本都包含错误和安全修复,并被视为生产级质量。更多MySQL 版本介绍通过这个全新版本的 MySQL(第一个 LTS),我们有机会更改某些 InnoDB 变量的默认值,使它们更符合生产服务器的实际情况。有些现在可以自动调整以更好地匹配 MySQL 运行的系统。享受 MySQL 并享受新的默认设置!

2024-05-06 15:23:10 918

原创 MySQL 社区经理:MySQL 8.4 InnoDB 参数默认值为什么要这么改?

目前,MySQL 的发布模型分为两个主要路径:LTS 版(长期支持)和创新版。所有 LTS 和创新版本都包含错误和安全修复,并被视为生产级质量。更多MySQL 版本介绍通过这个全新版本的 MySQL(第一个 LTS),我们有机会更改某些 InnoDB 变量的默认值,使它们更符合生产服务器的实际情况。有些现在可以自动调整以更好地匹配 MySQL 运行的系统。享受 MySQL 并享受新的默认设置!

2024-05-06 15:20:18 636

原创 MySQL 核心模块揭秘 | 15 期 | 事务模块小结

👆 事务执行过程中产生的 binlog 日志,写入 binlog 日志文件之前,需要有个临时存放的地方。👆 事务有不同的身份,比如读事务、只读事务、读写事务。这篇文章介绍了读事务、只读事务的身份什么时候会发生变化,以及会发生什么样的变化。👆 这篇文章介绍了开启一个事务的各种 SQL 语句,并且以 BEGIN 为代表,介绍了开始一个事务的过程。👆 事务池和管理器是事务模块的基石,把它们的初始化过程作为专栏的第一篇文章,再合适不过了。👆 回滚整个事务,属于我们经常用到的功能,这篇文章介绍了回滚整个事务的过程。

2024-04-24 14:15:43 409

原创 一则 TCP 缓存超负荷导致的 MySQL 连接中断的案例分析

除了 MySQL 本身之外,如何分析定位其他因素的可能性?作者:龚唐杰,爱可生 DBA 团队成员,主要负责 MySQL 技术支持,擅长 MySQL、PG、国产数据库。爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。本文约 1200 字,预计阅读需要 3 分钟。

2024-04-24 13:56:04 975

原创 MyDumper “喜欢” 触发器么?

使用 LIKE 子句过滤特定表中的触发器或视图很常见。但是,它可能会欺骗您,特别是如果您看不到输出(即在非交互式会话中)。让我们看一个简单的例子,以及如何以更可靠的方式处理任务。还有一个指向mydumper错误的额外链接,该错误是根据本实验室的调查而修复的。是的,但现在它更喜欢它们,原因如下。

2024-04-22 14:19:08 341

原创 MySQL 创建表后神秘消失?揭秘零宽字符陷阱

零宽字符是一种特殊的 Unicode 字符,它不占用任何可见空间,因此在大多数情况下是不可见的。然而,它们可以存在于文本中,并且可能对计算机程序产生影响,包括数据库管理系统。在 Unicode 中,U+200B 代表零宽空格,常用于可能需要换行的地方。除此之外,还有其他零宽字符,这里不再赘述。那么,这像幽灵一样的字符为何会存在?所谓存在即合理,零宽字符常常被用于数据防爬、信息加密传递、防止敏感词扫描等场景。但在数据库系统里使用,有时候就会出现让人头疼的现象,本文提到的就是其中之一。

2024-04-19 11:22:17 715

原创 MySQL 核心模块揭秘 | 13 期 | 回滚到 savepoint

回滚整个事务,主要分为三大步骤。第 1 步,执行 binlog 回滚操作,其实什么也没干。第 2 步,执行 InnoDB 回滚操作,会把事务执行过程中改变(插入、更新、删除)的记录恢复原样(至少从逻辑上来看是这样的)。最后,还会提交 InnoDB 事务,让回滚操作对数据页的修改生效。第 3 步,清除事务执行过程中产生的、临时存放于 trx cache 中的 binlog 日志。本期问题:关于本期内容,如有问题,欢迎留言交流。

2024-04-18 15:50:41 1009

原创 MySQL 核心模块揭秘 | 14 期 | 回滚整个事务

回滚整个事务,主要分为三大步骤。第 1 步,执行 binlog 回滚操作,其实什么也没干。第 2 步,执行 InnoDB 回滚操作,会把事务执行过程中改变(插入、更新、删除)的记录恢复原样(至少从逻辑上来看是这样的)。最后,还会提交 InnoDB 事务,让回滚操作对数据页的修改生效。第 3 步,清除事务执行过程中产生的、临时存放于 trx cache 中的 binlog 日志。本期问题:关于本期内容,如有问题,欢迎留言交流。

2024-04-17 09:54:47 909

原创 server_id 引发的 MySQL 级联复制同步异常

MySQL 级联复制的坑,我帮你们踩了。作者:蒋士峰,爱可生 DBA 团队成员,熟悉 MySQL,Oracle 等数据库。每天的积累,时间久了,会带来不一样的收货。爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。本文约 1200 字,预计阅读需要 3 分钟。

2024-04-16 13:51:49 723

原创 OceanBase 中一个关于 NOT IN 子查询的 SQL 优化案例

通过一个案例了解 not in 对 NULL 值敏感的处理逻辑和优化方法。

2024-04-09 14:57:29 994

原创 mysqldump 备份产生大量慢查询,有办法过滤么?

MySQL 8.0.30 版本中,mysqldump逻辑备份工具引入了选项,用于设置mysqldump备份的会话级别慢查询阈值。生产环境一般设置的比较小,由于mysqldump备份时执行的是全表扫描,SQL 执行时间很容易超过,导致慢查询日志中记录大量备份产生的慢查询。通过指定选项,给mysqldump单独设定合适的会话级别慢查询阈值,可以减少慢查询日志中大量无效慢查询。

2024-04-08 15:17:47 889

原创 MySQL 核心模块揭秘 | 12 期 | 创建 savepoint

server 层会创建一个SAVEPOINT对象,用于存放 savepoint 信息。binlog 会把写入 server 层为它分配的一块 8 字节的内存里。InnoDB 会维护自己的 savepoint 链表,里面保存着对象。如果 m_savepoints 链表中存在和本次创建的 savepoint 同名的 savepoint,创建新的 savepoint 之前,server 层会从链表中删除这个同名的 savepoint。server 层创建的 SAVEPOINT 对象会放入链表的末尾。

2024-04-07 13:35:33 916

原创 一则 MySQL 从节点 hung 死问题分析

综合以上分析过程,导致此次故障的根本原因还是在于数据库的 Redo 配置参数过小,在问题时段从节点的压力下,Redo 的使用率过高,导致 InnoDB 无法完成检查点。并进一步导致从节点的 worker 线程在执行事务时,检查 Redo Log 是否存在有剩余 Log 文件时,而发生等待。当前一个 worker 线程执行事务挂起后,由于从节点采用 MTS,且,因此其它 worker 线程需要等待之前的事务提交,最终导致所有 worker 线程挂起。

2024-04-07 11:39:19 362

原创 MySQL DBA 需要了解一下 InnoDB Online DDL 算法更新

在 MySQL中,我们引入了一种新的 DDL 算法,该算法在更改表的定义时不会阻塞表。第一个即时操作是在表格末尾添加一列,这是来自腾讯游戏的贡献。然后在 MySQL中,我们添加了在表中任意位置添加(或删除)列的可能性。在这篇文章中,我想重点讨论盲目使用此功能时可能发生的一些危险。

2024-04-02 17:01:39 564

原创 Oracle 中部分不兼容对象迁移到 OceanBase 的处理方式

在进行国产化改造过程中,我们需要将 Oracle 数据库迁移到 OceanBase(Oracle 模式)数据库,虽然 OceanBase 对于 Oracle 兼容性已经足够好,但依旧还有一些特殊语法或对象需要单独处理,下面是遇到的一些不完全兼容对象的处理逻辑。以上总结分析了 3 种 Oracle 对象和 OB 对象不兼容时的处理方法和提前统计发现的操作方式,在迁移前提前发现这类问题能有效避免在迁移过程中报错的问题。

2024-03-28 11:09:08 721

原创 MySQL 核心模块揭秘 | 11 期 | InnoDB 提交事务,提交了什么?

InnoDB 提交事务,就像我们填完一个表格之后,最后盖上的那个戳,总体上来说,要干 3 件事。第 1 件,修改分配给事务的各 undo 段的状态。如果数据库发生崩溃,重新启动后,undo 段的状态是影响事务提交还是回滚的因素之一。第 2 件,修改事务对象的状态。如果数据据库一直运行,不发生崩溃,就靠事务对象的状态来标识事务是否已提交。第 3 件,把各 undo 段中的 undo 日志组加入链表。其它事务都不再需要使用这些 undo 日志时,后台 purge 线程会清理这些 undo 日志组中的日志。

2024-03-28 09:55:29 390

原创 MySQL 8.0 支持对单个数据库设置只读!

MySQL 8.0.22 支持对单个数据库设置只读,当一个实例中只需要迁移部分数据库时比较实用,避免数据库迁移过程中数据库及其对象被修改。作者:李富强,爱可生 DBA 团队成员,熟悉 MySQL,TiDB,OceanBase 等数据库。相信持续把对的事情做好一点,会有不一样的收获。爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。本文约 1600 字,预计阅读需要 5 分钟。

2024-03-27 15:30:48 1216

原创 MySQL 核心模块揭秘 | 10 期 | binlog 怎么写入日志文件?

binlog 日志文件包含两部分:内存 buffer、磁盘文件。内存 buffer 的大小固定为 8K。二阶段提交的 flush 子阶段,会从 trx_cache 中读取 binlog 日志,写入 binlog 日志文件。本期问题:如果事务执行过程中产生的 binlog 日志直接写入 binlog 日志文件,会有什么问题吗?欢迎留言交流。下期预告:MySQL 核心模块揭秘 | 11 期 | InnoDB 提交事务,提交了什么?

2024-03-21 09:58:54 403

原创 快速掌握 MySQL 授权表运维注意事项

给普通用户授予 MySQL 鉴权相关表的权限均会带来风险备注:鉴权表除了user表,还包括dbprocs_priv表。即使只对鉴权表授予只读权限,如user表,也会被获取到字段的密文串,通过其他方式做密码库匹配破解。曾经遇到过一个场景,普通用户仅有user的查询权限,其通过查询该表信息发现用户密码为空,于是直接用 root 用户访问数据库,类似于进行了提权操作。

2024-03-20 09:38:35 1138

原创 数据库只追求性能是不够的!

那些成功的数据库公司没有一家是通过性能比竞争对手更快而成功的。作者:JORDAN TIGANI,DuckDB 公司 MotherDuck 联合创始人&CEO本文约 4500 字,预计阅读需要 15 分钟。

2024-03-19 15:37:19 782

原创 MySQL 核心模块揭秘 | 09 期 | 二阶段提交 (3) flush、sync、commit 子阶段

经过上一篇文章的介绍,我们已经对 commit 阶段有了整体的认识。这篇文章,我们一起进入各子阶段,看看它们都会干点什么,以及会怎么干。为了方便理解,我们假设有 30 个事务,它们对应的用户线程编号也从 1 到 30。flush 子阶段,flush 队长会把自己和队员在 prepare 阶段及之前产生的 redo 日志都刷盘,把事务执行过程中产生的 binlog 日志写入 binlog 日志文件。sync 子阶段,如果大于等于系统变量的值,sync 队长会把 binlog 日志刷盘。

2024-03-13 16:43:20 800

原创 如何解决由触发器导致 MySQL 内存溢出?

MySQL 中不推荐使用大量的触发器以及复杂的存储过程。设置为 1 时,在高并发下会影响 SQL 的执行效率。本案例的从库并发量不高,其他场景请根据实际情况进行调整。触发器越多会导致占用的内存越大,存储过程所使用的内存也会越大。本文只是给出了解决内存溢出的一个方向,具体的底层原理请自行探索。先清空缓存再访问表,查看缓存。

2024-03-12 16:18:19 852

原创 Google 在 MySQL 中推进矢量搜索,在 LLM 支持方面超越 Oracle

谷歌已将向量搜索引入其 MySQL 数据库服务,这一步领先了 MySQL 的所属公司 Oracle,迄今为止,Oracle 尚未给 MySQL 添加任何大型语言模型(LLM)方面的功能。谷歌云数据库副总裁安迪·古特曼斯 (Andi Gutmans) 表示,在过去 12 年里,谷歌在向量方面的创新速度相当快。

2024-03-12 15:55:09 1086

原创 MySQL 核心模块揭秘 | 08 期 | 二阶段提交 (2) commit 阶段

二阶段提交的 commit 阶段分为三个子阶段:flush 子阶段、sync 子阶段、commit 子阶段。flush 子阶段会把 prepare 阶段及之前产生的 redo 日志都刷盘,把事务执行过程中产生的 binlog 日志写入 binlog 日志文件。sync 子阶段会根据系统变量 sync_binlog 的值决定是否把 binlog 日志刷盘。为了避免每个事务各自提交,触发操作系统对同一个页频繁的重复刷盘,InnoDB 引入了组提交。

2024-03-06 13:18:39 1138

原创 MySQL 添加主键可以节省磁盘空间吗?

MySQL 表定义主键不是必须的,并且直到今天(MySQL 版本 8.3.0)都是这样。不过,在 MGR 和 PXC 架构中不允许使用没有主键的表。如果数据表没有主键,会有许多众所周知的负面性能影响,其中最痛苦的是复制速度很糟糕。今天,我想快速说明一下填充 10M 测试行,需要 748M 磁盘空间。现在,假设我的测试表的a结果,该表被重新创建,其磁盘大小减少到 588M,为什么会发生这种情况?我们拥有完全相同的数据,并且在两种情况下都对两列都建立了索引!让我们检查一下更改前后该表的更多详细信息。

2024-03-04 17:02:06 1159

原创 MySQL 核心模块揭秘 | 07 期 | 二阶段提交 (1) prepare 阶段

开启 binlog 的情况下,用户事务需要使用二阶段提交来保证 binlog 和 InnoDB 表的数据一致性。binlog prepare 什么也不会干。InnoDB prepare 会把分配给事务的所有 undo 段的状态修改为 TRX_UNDO_PREPARED,把事务 Xid 写入 undo 日志组的头信息,把内存中事务对象的状态修改为 TRX_STATE_PREPARED。本期问题:二阶段提交的 prepare 阶段为什么不把 redo 日志刷盘?欢迎大家留言交流。下期预告。

2024-02-29 13:29:01 991

原创 MySQL8.3 可以给 GTID 打标签了!

MySQL 8.3 创新版于 2024 年 1 月 16 号发布,该版本扩展了 MySQL 复制和组复制中使用全局事务标识(GTID)的格式,支持给 GTID 打标签,以支持识别事务组。此增强功能可以为特定事务组的 GTID 分配唯一标识。例如:包含数据操作的事务可以很容易地与管理操作产生的事务区分开来,只需要比较他们的 GTID。通过对 GTID 打标签,可以比较容易地把包含管理操作产生的事务与数据操作的事务区分开来。功能略微简单,期待相关功能的进一步丰富。

2024-02-28 14:33:39 562

原创 MySQL 8.0.35 企业版比社区版性能高出 25%?

说实话,比较一下这两个 MySQL 发行版,并不会让我很兴奋。这是因为在我关于 MySQL 的记忆中,如果是谈代码库时,两个发行版之间没有真正的区别。据我所知,企业版的差异在于附加的插件/组件,因此除非您明确需要使用它们,否则两个版本应该是相同或接近的。那么你可能会说,为什么要写这篇文章?😉好吧,在一篇Oracle 的博客及其开场白MySQL 8.0.35 的企业版与社区版相比,性能方面是有所提高的。以下是该文章的部分结果截图:根据显示的结果来看,让我特别想进一步测试一下,但服务器的配置方式有点麻烦。

2024-02-27 14:50:09 1126

原创 MySQL 核心模块揭秘 | 06 期 | 事务提交之前,binlog 写到哪里?

trx_cache 分为两级:内存(buffer)、临时文件。事务执行过程中,产生的所有 binlog event 都要写入 trx_cache。binlog event 写入 trx_cache,通常情况下,都会先写入 buffer,写满 buffer 之后,再把 buffer 中所有内容都写入临时文件,最后清空 buffer。本期问题:如果 buffer 是空的,接下来要写入一个 86K 的 binlog event 到 trx_cache,写入流程是什么样的?欢迎大家留言交流。下期预告。

2024-02-21 17:23:34 990

ActionDB 产品技术白皮书

ActionDB是一款高性能的企业级分布式数据库产品,其底层基于OceanBase开源内核,并获得原厂授权和内核技术支持,充分发挥了爱可生多年在开源数据库领域的专业经验和技术优势。ActionDB不仅继承了OceanBase稳定可靠、高性能的优点,还增强了MySQL兼容性,提供了企业级的安全特性、易用的运维管理工具,更好地融合了爱可生的技术积累和服务优势,提供更高质量、更完整的数据库产品和服务。

2023-10-08

SQL 审核工具:SQLE v2.2308 用户手册

SQLE 是由上海爱可⽣信息技术股份有限公司 开发并开源,⽀持 SQL 审核、索引优化、事前审核、事后审核、⽀持标准化上线流程、原⽣⽀持 MySQL 审核且数据库类型可扩展的 SQL 审核⼯具。 产品特性 SQL审核规范 1. 审核规则⾃定义(700+条) 2. ⽀持审核结果分级展⽰,⽀持⽣成下载审核报告 3. ⽀持规则模版,灵活组合规则 4. 审核⽩名单,跳过特例SQL 5. ⽀持集成 IDE ⾃助审核 多场景审核 标准化上线流程 多数据库类型⽀持 1. 统⼀接⼝,可通过插件进⾏多数据库审核扩展 2. 内置MySQL审核插件,官⽅⽀持常⽤数据库类型,包括 PostgreSQL、Db2、Oracle、OceanBase 等 统⼀的SQL客⼾端入口 提供审核管控的SQL客⼾端,杜绝执⾏不合规SQL 丰富的集成能⼒ 1. 标准HTTP API接⼝可与客⼾内部流程系统对接 2.⽀持LDAP,Oauth2⽤户对接 3. ⽀持邮件、微信企业号、webhook 告警对接

2023-10-07

空空如也

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

TA关注的人

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