自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2024-05-20 17:42:11 637

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

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

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

原创 一文弄懂如何发现 MySQL 死锁?

死锁检查线程是否会检查并解决死锁,由系统变量决定。如果需要检查并解决死锁,死锁检查线程会以锁等待数组中每个数组单元作为一条锁等待路径的起点,根据每个数组单元描述的等待关系,看看这条路径是否形成了环。如果发现某条锁等待路径开成了环,还需要二次确认,以确定这个环依然存在。

2024-07-24 11:26:49 492

原创 满足多场景需求的 MySQL 物理备份实践

在现场允许配置机器远程免密访问或者对端机器操作系统用户密码的场景下,推荐使用跨机备份,总体耗费时间会更少。进行备份时模式下备份文件大小和备份耗费时长两者都用得到较好的兼顾,较为推荐。如果磁盘空间极为紧张且能容忍备份耗费时间较长,可选择gzip命令组合的压缩备份方式。

2024-07-22 13:35:01 513

原创 细说 MySQL 死锁(1)准备工作

构造锁等待快照,并按照快照对象中的锁等待事务对象的内存地址从小到大进行排序。基于排序之后的快照数组,构造锁等待图。基于锁等待图得到权重数组。根据锁等待关系,进一步提升阻塞事务的权重。把事务权重更新到各事务对象中。

2024-07-17 15:51:54 662

原创 MySQL 报错 ERROR 1709: Index column size too large 引发的思考

MySQL 5.6 升级遇到 1709 报错该怎么办?作者:王田田,DBA,擅长发呆,偶尔热爱分享。爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。本文约 1500 字,预计阅读需要 5 分钟。

2024-07-16 16:11:05 342

原创 MySQL 的锁等待超时到底是怎么回事?

锁等待超时有两类参与者,主动者是超时检查线程,被动者是锁等待事务。遍历 waiting_threads 和 last_slot 之间的 slot。对于已被使用的 slot,判断锁等待是否超时。如果超时,处理这个 slot 对应的锁等待超时逻辑。通知锁等待超时的事务。锁等待事务收到通知之后,也有一些事情要干,完事之后,这个事务的锁等待过程也就结束了。

2024-07-15 16:24:11 781

原创 MySQL 中 GRANT 操作会引起复制中断吗?

GRANT 操作并不是一个原子性操作,不管执行成功与否,都会触发一个隐式重载授权表的行为。在生产环境中需要规范用户创建及授权的操作,不推荐使用 DML 语句去直接变更mysql.user表,可能会引发其他的问题,若使用了 DML 语句进行变更,需要手工执行。

2024-07-15 16:07:57 783

原创 ClickHouse 更新操作导致不可写,应该选择哪种表引擎?

及时监控,分析 mutations 的原因并根据业务需求进行分析和处理。如果业务存在频繁的 UPDATE 或 DELETE 操作产生大量 mutations,建议更换表引擎。如果 mutations 是由于增加字段或列等操作产生的,可忽略第 2 条。设计数据更新和删除策略时,应考虑系统的承载能力和潜在的风险。优化业务逻辑来减少不必要的数据更新和删除操作,并在操作失败时采取更合理的重试策略,如果是少量或者偶尔的删除可以使用 ClickHouse轻量级删除(Lightweight Deletes)。

2024-07-09 15:28:33 570

原创 MySQL 生产环境 GROUP BY 优化实践

首先,我们看一个生产环境上GROUP BY 语句的优化案例。对于GROUP BY可以使用索引进行优化,Loose Index Scan 相对于 Tight Index Scan 在一些情况下可以大大减少扫描的行数,使用 Loose Index Scan 时,Extra: Using index for group-by。

2024-07-08 16:14:56 584

原创 一则 MySQL 子查询改写 SQL 优化小案例

在原始查询中,表被多次引用,一次在主查询中,另一次在嵌套的 EXISTS 子查询中。这种结构可能导致数据库引擎多次扫描相同的表,即使是在同一个查询中。优化思路:减少不必要的 JOIN 和子查询引用子查询中的表与外部查询中的a表是同一张表,可以尝试将子查询条件提到外面和驱动表进行 JOIN,就可以避免 EXISTS 子查询表的重复扫描。

2024-07-05 16:28:45 343

原创 一则 MySQL 子查询改写 SQL 优化小案例

在原始查询中,表被多次引用,一次在主查询中,另一次在嵌套的 EXISTS 子查询中。这种结构可能导致数据库引擎多次扫描相同的表,即使是在同一个查询中。优化思路:减少不必要的 JOIN 和子查询引用子查询中的表与外部查询中的a表是同一张表,可以尝试将子查询条件提到外面和驱动表进行 JOIN,就可以避免 EXISTS 子查询表的重复扫描。

2024-07-05 16:20:53 364

原创 什么是 MySQL 锁等待?

申请一个锁结构,加入链表,开始排队。找到一个空闲的 slot,把加锁的相关信息记录到这个 slot 的对象中,完成登记工作。如果加的是行锁,还需要记录锁等待的开始时间。坐等通知。

2024-07-03 15:37:12 283

原创 第55期:MySQL 频繁 Crash 怎么办?

针对该问题 MySQL Crush,其实问题原因有很多。ChatDBA 能够罗列出decimal字段可能导致该问题也是因为 ChatDBA 底层的知识库足够丰富,后续我们也将持续补充数据库领域更多的专业知识。回到该问题,是由于两个字段没有获取到有效值,而且他们的数据类型为decimal类型,当进行数值转换的时候触发了 MySQL 的 bug 导致崩溃。最后配合业务方针对该情况提前做数据判断,防止异常值直接入库来避免该问题的出现。

2024-07-01 17:09:56 872

原创 MySQL 5.7升级8.0后,排序规则问题解决方案汇总

比较三种解决方案,每种解决方案适用场景不同,请根据实际情况选择解决方案。修改参数适用于数据库是从 5.7 或更低版本升级到 8.0,并且表数量较多、数据量加大。不适用于批量修改所有表、列字符集和排序规则。修改表 COLLATE适用于修改过程会锁表,数据量越大时间越长,使用于数据量小的场景,建议将所有表、列字符集和排序规则改成 8.0 默认值,后续新增表时不指定字符集和排序规则。修改 SQL 语句适用于临时查询,改SQL影响最小。

2024-06-27 16:32:16 921

原创 OceanBase 4.X-2F1A 仲裁高可用方案初探

作者:郑增权,爱可生 DBA 团队成员,OceanBase 和 MySQL 数据库技术爱好者。爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。本文约 1500 字,预计阅读需要 5 分钟。

2024-06-26 18:40:12 685

原创 OceanBase 4.X-2F1A 仲裁高可用方案初探

作者:郑增权,爱可生 DBA 团队成员,OceanBase 和 MySQL 数据库技术爱好者。爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。本文约 1500 字,预计阅读需要 5 分钟。

2024-06-26 18:38:34 450

原创 BenchmarkSQL 对 MySQL 测试时请注意隔离级别!

由此我们可以得出结论,因为 MySQL 配置的隔离级别是 REPEATABLE-READ,导致 BenchmarkSQL 出现了死循环的问题,将其修改为 READ-COMMITTED 级别后,问题得以解决。

2024-06-26 18:31:31 974

原创 MySQL 核心模块揭秘 | 21 期 | 行锁 (1) 快速加锁

快速条件的主要流程如下:获取加锁记录所属数据页对应的第一个行锁结构(不管这个行锁结构是当前事务创建的,还是其它事务创建的)。如果上一步没有获取到行锁结构,可以走第一种快速加锁逻辑。首先,需要申请一个新的行锁结构,并初始化行锁结构的各属性、bitmap 内存区域。然后,把行锁结构加入 rec_hash 中某个数组下标对应的行锁结构链表、当前事务对象的 trx_locks 链表。如果上一步获取到了行锁结构,并且没有命中任何一个慢速加锁条件,可以走第二种快速加锁逻辑。

2024-06-21 15:25:07 898

原创 关于 MySQL 5.7 升级 8.0 时 INT 显示问题分析

本案例中的客户是从 MySQL 5.7.36 升级到 MySQL 8.0.35,升级完成后业务反馈表结构有变化,升级前某个表的字段数据类型为 INT(10),升级后变成了 INT,客户咨询有什么影响没有?作者:张昊,DBA,主要负责 MySQL 故障处理、DMP 产品支持,擅长 MySQL,喜欢打球爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。本文约 1200 字,预计阅读需要 3 分钟。

2024-06-18 16:58:05 355

原创 第 54 期:MySQL Too many open files 报错

这个案例比较有趣,一般情况下报错和文件描述符配置不当有关。但是该案例中,是由于数据表没有有效的利用到索引导致,后续观察表结构发现,JOIN 关联条件中等号左右两个字段的数据类型不同,一个是 VARCHAR 类型一个是 INT 类型,所以导致该条 SQL 语句没法用到索引,进而创建了非常多的临时文件,所以导致了报错。

2024-06-18 15:29:44 479

原创 MySQL 核心模块揭秘 | 20 期 | MySQL 怎么加表锁?

事务(T1)对某个表(A)加表锁的主要流程如下。第 1 步,判断事务 T1 是否已经对表 A 加了相同或者更高级别的表锁,如果是,本次加锁流程结束。第 2 步,获得表锁互斥量。如果有其它事务持有这个表锁互斥量,事务 T1 需要等待,直到获得这个表锁互斥量。第 3 步,判断是否有其它事务持有的表锁阻塞本次加锁操作。如果是,事务 T1 进入锁等待状态,直到没有其它事务持有的表锁阻塞本次加锁操作。第 4 步。

2024-06-13 13:56:18 605

原创 一个 Clickhouse 集群磁盘损坏恢复数据的案例

数据冗余备份:确保每个分片有多个副本,防止单点故障导致数据丢失。掌握 ClickHouse 和 Zookeeper 同步机制:了解如何通过 Zookeeper 获取其他副本的 parts 路径,并使用端口9009进行数据传输恢复。清理 Zookeeper 元数据:在磁盘损坏后,需清理 Zookeeper 中的元数据,以避免重建表时发生元数据冲突。详细的恢复操作步骤:导出表结构并创建数据库。使用create_table_query重建表并确认数据同步。

2024-06-11 16:11:25 735

原创 原来 pt-osc 改表是这样实现的!原理详解【附场景案例】

经过上面的梳理分析,我们知道pt-osc在改表过程中做了很多事情,现在我们做个简单的总结,主要是想梳理一下这个工具的缺点,毕竟使用这个工具的朋友应该都知道这工具很优秀,很好用。但是往往缺点容易被忽视,希望能帮大家提供一些思路以及规避一些问题。可能出现死锁,这个问题上面也分析了,这里就不过多介绍了。触发器会导致业务的dml流量翻倍放大,对负载比较大或者并发比较高的环境可能存在很大的风险,这点需要提前跟业务沟通好,做好风险评估。支持暂停,但是功能有限。

2024-06-06 08:22:05 1099

原创 MySQL 核心模块揭秘 | 19 期 | 锁模块里有什么?什么样?

锁模块结构的 rec_hash 属性是个哈希表,分为很多小格子,每个格子管理一个行锁结构链表。latches 属性用于保证同一时刻只有一个线程读写 rec_hash 属性的同一个格子对应的行锁结构链表,以及同一时刻只有一个线程读写同一个表对象的 locks 链表。waiting_threads 属性指向一片分为 102400 个 slot 的内存区域,每个等待获得锁的事务会占用其中一个 slot。last_slot 属性用于减少检查锁等待超时需要遍历的 slot 数量,提升效率。

2024-06-06 08:01:45 915

原创 第 53 期:MySQL 创建了用户却无法登陆

针对该问题,ChatDBA 上述的排查步骤虽然解决了问题,但是并没有解释问题出现的根本原因。| user |针对这个情况我们也问了一下 ChatDBA。使用sky1@%用户通过 socket 登录,host 被识别为localhost。在mysql.user表中,有两个匿名用户(和根据 MySQL 5.6 的匹配规则,虽然有一个sky1@%的用户存在,但由于存在一个的匿名用户,MySQL 优先匹配这个匿名用户。由于匿名用户没有密码,当你输入sky1@%

2024-06-03 16:08:28 899

原创 MySQL 核心模块揭秘 | 18 期 | 锁在内存里长什么样?

InnoDB 的表锁结构和行锁结构,有一部分属性是相同的,也有一部分属性是专用的,所以,代码里定义了三个结构体来描述表锁结构和行锁结构。一个事务对每个表加表锁,都会产生一个表锁结构。一个事务对多条记录加行锁,满足条件时,多条记录的行锁可以共用一个行锁结构,以节省内存。处于等待状态的行锁结构,不能共用。获得行锁或者锁等待超时之后,这个锁结构会变为非等待状态,之后满足条件时,这个锁结构可以被共用。插入意向锁的锁结构不能共用。

2024-05-31 09:49:40 432

原创 一文讲透 OceanBase 单机版:架构介绍、部署流程、性能测试、MySQL对比、资源配置等等

OceanBase 单机集中式集群(即单机版,后文不再称“单机集中式集群”)是OceanBase 推出的极简数据库架构,区别于分布式集群架构,单机版无多副本和扩缩容能力,适用于开发测试环境及数据安全性要求不高的业务系统。OceanBase 社区版和企业版都支持单机版部署,相关区别如下。OceanBase v4.1.0 之前,物理备库的产品形态为集群级主备。集群有两种角色:主集群和备集群。主集群下面所有用户租户都是主租户;备集群下面所有用户租户都是备租户,备集群会自动同步主集群的租户变更操作。

2024-05-30 16:27:02 933

原创 一文讲透 OceanBase 单机版:架构介绍、部署流程、性能测试、MySQL对比、资源配置等等

OceanBase 单机集中式集群(即单机版,后文不再称“单机集中式集群”)是OceanBase 推出的极简数据库架构,区别于分布式集群架构,单机版无多副本和扩缩容能力,适用于开发测试环境及数据安全性要求不高的业务系统。OceanBase v4.1.0 之后,物理备库的产品形态变更为租户级主备,即主或备的角色信息属于租户,分为主租户和备租户,集群不再有主备角色的概念,而只是承载租户的容器。本节适用于集群做 Sysbench 测试前,对单机版集群的资源规格和集群配置等做一轮巡检,已提供更好的性能表现。

2024-05-30 15:40:36 1078

原创 MySQL 重启之后无法写入数据了?

数据库交接后因 persist_only 级别的参数设置引发的故障分析。作者:不吃芫荽,爱可生华东交付服务部 DBA 成员,主要负责 MySQL 故障处理及相关技术支持。爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。本文约 1800 字,预计阅读需要 6 分钟。

2024-05-28 16:33:23 1076

原创 第 52 期:MySQL 半同步复制频繁报错

配置问题原因:MySQL 的半同步复制配置不当,导致超时设置过短。解决方法:检查半同步复制相关的配置参数,例如 rpl_semi_sync_master_timeout,适当增加超时时间。网络延迟或不稳定原因:主从服务器之间的网络不稳定会导致 binlog 传输延迟或丢失。解决方法:检查和优化网络连接,确保主从服务器之间的网络稳定性。从服务器负载过高原因:从服务器的负载过高,无法及时处理主服务器发送的 binlog。解决方法:检查从服务器的性能,可能需要增加资源或优化查询。

2024-05-27 17:37:49 1077

原创 基于日志或 gv$sql_audit 分析 OB 异常重试 SQL

我们在 OCP 云平台 Top SQL 界面看到一些异常 SQL,但并未提示具体报错原因或提示了原因但不够详细。本文以 SQL 异常重试场景为例,使用基于日志文件和 gv$sql_aduit视图这两种方式,找出具体的报错原因。本文更推荐 PC 端浏览~当执行 SQL更新操作加锁失败,达到当前租户变量设置的值(10s)触发6212报错(语句超时)回滚语句。业务使用了较大的超时时间,且存在一个会话中的未知长事务持有锁,阻塞了其他事务的执行。开发人员并发更新同一行数据,并发处理逻辑存在错误。

2024-05-23 15:36:42 641

原创 企业如何做好 SQL 质量管理?

对于研发人员来说,在日常工作中,大部分都需要使用数据库。项目中的很多业务都需要进行增删改查等常见数据库操作,这些数据库操作对应的 SQL 语句主要都是由开发人员编写的。对于 DBA 来说,作为数据库管理和运维人员,DBA 负责数据库的日常运维工作。当出现问题 SQL 时,DBA 通常首当其冲负责问题诊断。那么,什么是 SQL 问题或者说问题 SQL 呢?从一个更广泛的定义来看,SQL 问题指影响业务正常运行的各种 SQL 相关问题。比如图上举例的案例,它们都可以被归类为 SQL 问题。

2024-05-23 13:36:05 886

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

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

2024-05-22 15:42:16 286

原创 MySQL 隐式转换必知必会

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

2024-05-21 17:13:23 346

原创 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 881

原创 详解 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 485

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

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

2024-05-13 16:43:15 718

原创 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 478

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

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

2024-05-08 16:12:55 903

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关注的人

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