知其然,知其所以然
常见报错实测 2026-11-03

Redis LOADING Redis is loading the dataset in memory:端口 0.02 秒就通、400 万 key 加载约 3 秒,PING 型健康检查会误杀,loading_eta_seconds 开头不准

实测 Redis LOADING Redis is loading the dataset in memory:400 万 key、141.8 MB 的 RDB 启动加载约 3 秒,端口 0.02 秒就通;加载期间 PING、GET、SET、DBSIZE、KEYS 被拒而 INFO、CONFIG GET、PUBLISH 可用;loading_eta_seconds 开头不准;从库全量同步同样 LOADING,swapdb 在本机没有观察到 async_loading。

Redis LOADING loading the dataset in memory RDB loading_eta_seconds 健康检查 repl-diskless-load swapdb 报错 真实验证 动画演示
常见报错实测 2026-11-03

Redis CROSSSLOT Keys in request don't hash to the same slot:同节点不同槽位也报,19 个多 key 命令全部受限,固定 hash tag 让 3000 个 key 全进一个节点

实测 Redis CROSSSLOT Keys in request don't hash to the same slot:同节点不同槽位也报;19 个多 key 命令全部 CROSSSLOT;hash tag 的规则(空花括号、多对花括号);MULTI/EXEC 到 EXEC 才报,Lua 偷用其它节点的 key 是另一种错误;固定 tag 让 3000 个 key 全进一个节点。

Redis CROSSSLOT Redis Cluster hash tag MGET MSET CLUSTER KEYSLOT Lua 报错 真实验证 动画演示
常见报错实测 2026-11-03

SQLite database is locked:读后写的延迟事务升级锁时 timeout=10 也 0.0 ms 立刻失败,WAL 模式 8 线程读后写失败 1372/1600、BEGIN IMMEDIATE 为 0

实测 SQLite database is locked:timeout 0、1、5 秒的等待行为;DELETE 与 WAL 下谁挡谁(WAL 解决不了写挡写);读锁升级写锁时 timeout 10 秒也 0.1 ms 立刻失败;Python 默认事务忘了 commit 会一直握着写锁;8 线程读后写 WAL + BEGIN 失败 1372/1600,BEGIN IMMEDIATE 为 0。

SQLite database is locked sqlite3 WAL BEGIN IMMEDIATE busy_timeout Python journal_mode 报错 真实验证 动画演示
常见报错实测 2026-11-03

Python RecursionError: maximum recursion depth exceeded:默认第 999 层失败,setrecursionlimit 设到一千万纯 Python 递归 500 万层照常跑(约 607 MiB),json/repr 的深递归仍报 Stack overflow (used 16352 kB)

实测 Python RecursionError: maximum recursion depth exceeded:默认上限 1000、第 999 层失败;经过 C 的 json/repr/比较改报 Stack overflow (used 16352 kB);setrecursionlimit 设 1000 万后纯 Python 递归 500 万层照常运行(约 607 MiB,没有段错误);线程栈大小无关;尾递归与 lru_cache 无效,迭代才是修法。

Python RecursionError maximum recursion depth exceeded sys.setrecursionlimit Stack overflow 递归 报错 真实验证 动画演示
常见报错实测 2026-11-03

RabbitMQ PRECONDITION_FAILED - inequivalent arg:整数 5000 和字符串 "5000" 报 received '5000' but current is '5000',只关闭 channel,改成 quorum 只能删除重建(5 条消息丢失)

实测 RabbitMQ PRECONDITION_FAILED - inequivalent arg:TTL、durable、x-queue-type、交换机 type 等改动的 406 原文;整数 5000 与字符串 "5000" 报 received '5000' but current is '5000';只关闭 channel、未 ack 的消息回队列;passive 声明不比较参数;policy 管参数可随时改;改队列类型只能删除重建(5 条消息丢失)。

RabbitMQ PRECONDITION_FAILED inequivalent arg 406 x-message-ttl x-queue-type policy channel 报错 真实验证 动画演示
常见报错实测 2026-11-03

MySQL ERROR 1213 Deadlock found when trying to get lock:反向更新 2 ms 检测并整个事务回滚,RR 下先 SELECT FOR UPDATE 再 INSERT 也死锁,统一加锁顺序让 1213 从 1034 次降到 0

实测 MySQL ERROR 1213 Deadlock found:反向更新两行 2 ms 检测、整个事务回滚;改得少的事务被选为牺牲品;RR 下先 SELECT FOR UPDATE 再 INSERT 的间隙锁死锁,RC 下变成 1062;INNODB STATUS 怎么读,innodb_print_all_deadlocks 需要 log_error_verbosity=3;随机顺序 1034 次 1213,升序为 0;关闭 innodb_deadlock_detect 后两边都等满 3 秒失败。

MySQL 1213 Deadlock found when trying to get lock InnoDB 间隙锁 innodb_print_all_deadlocks innodb_deadlock_detect 报错 真实验证 动画演示
常见报错实测 2026-11-03

curl 常见错误码 (6)(7)(28)(35)(52)(56)(60) 实测:404 不加 -f 退出码是 0,-k 只是跳过验证,--retry 默认不重试 52、56、7

实测 curl 常见错误码 6、7、28、1、3、18、22、23、35、47、52、56、60:每个用本机小服务复现原文;28 的三种说法;404 不加 -f 退出码是 0;-k 只是跳过验证;--retry 默认只重试超时与 HTTP 500/503,52、56、7 默认不重试,--retry-all-errors 才会。

curl curl 错误码 curl (6) curl (7) curl (28) curl (35) curl (52) curl (56) curl (60) --retry 报错 真实验证 动画演示
常见报错实测 2026-11-03

MongoDB Sort exceeded memory limit (code 292):9.0.4 默认落盘所以 130 MB 排序不再报,显式 allowDiskUse(false) 才报,$sort 与 $group 措辞不同,加 limit(10) 只要 0.09 s

实测 MongoDB Sort exceeded memory limit(code 292):9.0.4 上 allowDiskUseByDefault 默认为真,无索引排序 130 MB 默认成功(usedDisk=True);显式 allowDiskUse(false) 才报,$sort 与 $group 措辞不同;索引、limit、缩小投影、调大上限四种修法的耗时;关掉默认落盘后不写 allowDiskUse 也报。

MongoDB Sort exceeded memory limit QueryExceededMemoryLimitNoDiskUseAllowed allowDiskUse allowDiskUseByDefault $group 排序 报错 真实验证 动画演示
常见报错实测 2026-10-29

MySQL ERROR 1040 Too many connections:SET GLOBAL wait_timeout 回收不了已经连着的闲置连接,先看是谁占着名额

实测 MySQL ERROR 1040:max_connections=5 时第 6 个普通连接报 (1040, Too many connections),root 多一个名额;空闲的 Sleep 连接照样占名额;SET GLOBAL max_connections 立即生效,SET GLOBAL wait_timeout 只对新连接生效,老连接 5 秒后仍全部活着;20 个线程各自连失败 16 个,4 个连接的连接池全部成功。

MySQL ERROR 1040 Too many connections max_connections wait_timeout 连接池 报错 真实验证 动画演示
常见报错实测 2026-10-29

MySQL ERROR 1205 Lock wait timeout exceeded:默认只回滚超时那一条语句,改别的行也可能被堵

实测 MySQL ERROR 1205:默认只回滚超时的那一条语句、事务还开着(innodb_rollback_on_timeout=ON 才整个回滚);用 sys.innodb_lock_waits 找到 Sleep 状态没提交的堵人事务,KILL 后等的人 1.52 s 成功;WHERE 没有索引时 6 个记录锁锁住全表,有索引只有 3 个;死锁 1213 约 1.1 ms 就报,和 1205 的 2.01 s 不同。

MySQL ERROR 1205 Lock wait timeout exceeded innodb_lock_wait_timeout 行锁 死锁 报错 真实验证 动画演示
常见报错实测 2026-10-29

MySQL ERROR 1062 Duplicate entry:Abc 和 abc 也算重复,REPLACE 会让 id 变,失败的 INSERT 还会吃掉自增 id

实测 MySQL ERROR 1062 Duplicate entry:报错文本里 for key 是 表名.索引名;默认排序规则下 Abc/abc、e/é 算重复而末尾空格不算,utf8mb4_bin 反过来;多行 INSERT 一行冲突整条失败,INSERT IGNORE 悄悄丢新值;REPLACE 让 id 从 1 变成 5;失败的 INSERT 也消耗自增 id;8 线程先查后插表里 400 行,有唯一索引则 1062 出现 350 次、只留 50 行。

MySQL ERROR 1062 Duplicate entry 唯一索引 INSERT IGNORE ON DUPLICATE KEY UPDATE REPLACE 自增id 报错 真实验证 动画演示
常见报错实测 2026-10-29

MySQL ERROR 1406 Data too long for column:长度按字符算,关掉严格模式就变成悄悄截断,加宽列跨过 255 字节要重建表

实测 MySQL ERROR 1406:varchar 长度按字符算,5 个 emoji(20 字节)放得进 varchar(5);严格模式下超长整条语句失败,sql_mode 为空时变成 Warning 1265 悄悄截断;相邻的 1264、1074(varchar 最大 16383)、TEXT 65535 字节;缩列报 1265;20 万行表加宽 varchar,不跨 255 字节 1 ms,跨过就要 COPY 271 ms。

MySQL ERROR 1406 Data too long for column sql_mode STRICT_TRANS_TABLES varchar ALTER TABLE 报错 真实验证 动画演示
京ICP备2026067502号-1京公网安备11010502063487号