两个线程各往账户里加 10 块钱。加起来应该是 120。跑完是 110——少了 10 块,而且没有任何报错。 一、先看它是怎么少的 初始余额 100,两个线程都做同一件事:读余额、加 10、写回。 A. 不加任何锁 T1 读到 balance=100 T2 读到 balance=100 T2 写入 ...
本机没装 MySQL,所以这篇用的是 Python 自带的 SQLite。它是个真数据库,有真优化器,能看到真的查询计划。两者优化器不同,但 JOIN 的底层是同一件事,后面会说清楚哪部分是 SQLite 特有的。 一、JOIN 的本质 不管哪种连法,骨架都是同一个: 对左表的每一行: 去右表里找到 ...
数据库课讲索引必提 B+ 树,理由通常是"矮"和"适合范围查询"。我自己写了一棵 B+ 树,再写一棵普通二叉搜索树,用同一个指标比:一次查询要读几个页。 一、先把参数定死 比之前得先说清楚假设,不然后面的数没意义。 InnoDB 一个页是 16KB。主键是 bigint,占 8 字节;页内指向子节点 ...
本文深入剖析 MySQL InnoDB 引擎在 RR 隔离级别下,非唯一索引引发的 Gap Lock 与 Next-Key Lock 锁冲突导致的线上死锁问题。结合 SHOW ENGINE INNODB STATUS 死锁日志,手把手还原并发场景下的锁升级链路,并给出从数据库隔离级别调整到 Jav... ...
为什么数据库的索引几乎都是 B 树 在一张 1000 万行的表里按主键查一条记录,MySQL 通常在几毫秒内返回。我一开始以为这中间有什么取巧的缓存,后来才知道并没有:它只是没有傻到去扫全表,而是走了一条索引,而那条索引十有八九是一棵 B 树。 MySQL、PostgreSQL、SQLite、Mon ...
这个是几天前遇到的一个案例,MySQL Router的6446端口突然连接不上. 检查的时候,发现telnet 6446端口不通,而且MySQL Router服务正常,但是端口6446不见了.当时的现象如下所示: # netstat -ntlp | grep mysqlrouter tcp 0 0 ...
软删除(逻辑删除)和唯一索引放在同一张表上,几乎是每个后端项目都会遇到的冲突:用户注销了账号,过两天想用同一个邮箱重新注册,结果插入报 Duplicate entry。因为那条"已删除"的记录还在表里,唯一索引可不管它删没删。 网上最常见的解法是"把 deleted_at 加进唯一索引"。这个解法有 ...
案例描述 测试环境,一套版本为MySQL 8.4.8的InnoDB Cluster集群,由于一些操作,导致MySQL InnoDB Cluster中备节点出现错误.解决问题后,发现集群的从节点虽然状态联机(ONLINE)了,但是报实例错误:"WARNING: Instance has 'offlin ...
案例描述 一套MySQL 8.0.39数据库的错误日志突然出现大量下面错误,导致短时间内收到大量告警 2026-09-14T03:53:17.269079Z 336775 [Warning] [MY-013360] [Server] Plugin sha256_password reported: ...
导语 不少制造企业斥资千万上线堆垛机、RGV、AGV 立体库设备,最后却陷入新痛点: 设备各自独立、数据互不互通,WCS 调度和业务单据脱节,人工还要二次录入;产线、原料仓、成品仓信息割裂,领料、入库全靠人工核对;设备空转、巷道拥堵、错存取货频发,重金投入的自动化硬件,只发挥不到一半效能。自动化立体 ...
大家可以先看本文的结论【即 4. 总结】,如有兴趣再顺读。 1. Online DDL Support for Column Operations OperationIn PlaceRebuilds TablePermits Concurrent DMLOnly Modifies Metadata ...
概述 在实际生产环境中,我们要定期针对数据库做备份,避免误操作导致数据丢失没办法恢复。 mysql备份按照原理分为两种,分别是逻辑备份和物理备份。 逻辑备份: 将数据导出为 SQL 语句 优点:跨版本、跨平台、可编辑、可单库单表,所有版本通用 缺点:大数据量慢,因为是将语句导出为一条条sql 工具: ...
InnoDB通过精心设计的内存缓冲、异步后台线程、多层日志和灵活刷盘策略 你是否想过:MySQL的InnoDB引擎为什么能扛住高并发?它用什么魔法把数据“缓存”在内存?万一数据库崩溃,它又怎么保证数据不丢?今天,我们用图文并茂的方式,把InnoDB的里里外外拆给你看。 一、先看全景:一张图认识Inn ...
mysqldump工具在灾备恢复、DB间数据同步(含Server实例间同步)、主从搭建等场景下都拥有一席之地。可以说,它是DBA常用工具之一,所以就要求我们对其参数真正的了解掌握,特别是一些常用容易搞混、忽略的参数。因而,对mysqldump 那些被忽略的“摆渡”指令,要常常“淘”出来,Review ...
Hi,数据分析圈的朋友们! 你是不是也经历过这样的场景: 老板问:"上周的复购率是多少?" 你查了A表,算出来是18%; 同事查了B表,说是23%; 运营同学从后台导出,又是20.5%…… 三个人,三个数,谁都没错,但就是对不上。 别慌,这不是你一个人的问题。今天咱们聊聊一个很多数据团队都 ...
SEATA的AT模式和XA模式一样,也是2阶段提交,但是AT模式没有利用数据库的XA协议,如下所示: 从上面的图可以看到,seata AT 模式分为以下5个步骤: ①、TM(事务管理器) 开启全局事务; ②、RM 向 TC(事务协调者) 注册分支事务; ③、RM(资源管理器,也就是要访问数据库的进程 ...
前言 MyBatis-Plus是MyBatis的增强工具,在MyBatis基础上只做增强不做改变,简化CRUD操作。本文总结10个实用技巧,帮你快速掌握MP的核心用法。 技巧1:快速入门 // 依赖 <dependency> <groupId>com.baomidou</groupId> <arti ...
一、传统分布式XA事务的2PC 2PC 即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段(Prepare phase)、提交阶段(commit phase),2 是指两个阶段,P 是指准备阶段,C 是指提交阶段。常见的关系型数据库如 Oracle、MySQL 都支持两阶段提交协议,如下图: ...
一、事务的实现 1.1、事务的执行流程 根据上图,事务的执行流程如下: ①查询操作先从Buffer Pool中查询数据,若存在则直接输出,不存在则读取磁盘中的数据并放入Buffer Pool; ②在操作任何数据之前,会先将数据的旧值写入undo log日志文件中,以便执行事务过程中出现异常后好回滚到 ...
SQL优化一般步骤 慢日志定位 通过慢查日志等定位那些执行效率较低的SQL语句 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的 ...