MySQL技术文章
-
用 MySQL 8.0 的 SKIP LOCKED 做并发任务抢占,关键不在于把锁语句拼出来,而在于限定索引范围、保持短事务、正确处理空队列,并用状态更新和幂等键验收重复消费。228 收藏 -
围绕一条真实列表查询,拆分过滤、排序和返回字段,给出 MySQL 复合覆盖索引的布局方法、EXPLAIN 检查项,以及范围条件和写入成本的上线边界。228 收藏 -
讲清 MySQL 函数索引与生成列索引的选择、JSON 表达式类型边界,以及用 EXPLAIN 检查表达式结果是否真正匹配。228 收藏 -
MySQL DDL 出现 Waiting for table metadata lock 时,可用 sys.schema_table_lock_waits 与 performance_schema.metadata_locks 找到等待和阻塞会话,再核对事务后安全处理。228 收藏 -
MySQL 的 ROLLBACK TO SAVEPOINT 会撤销保存点后的数据修改,但不会等同于释放锁。本文区分记录锁、间隙锁和事务结束边界,并用两个会话说明如何排查回滚后的阻塞。226 收藏 -
MySQL 不可见索引适合用来评估索引替代方案:先核对候选索引和基线计划,再让优化器暂时忽略它,结合 EXPLAIN、慢查询与工作负载判断是否仍有依赖,最后决定恢复、替换还是删除。226 收藏 -
给生产中的 InnoDB 大表新增二级索引时,先确认 ALGORITHM=INPLACE 与 LOCK=NONE 的适用边界,再用 metadata_locks、SHOW FULL PROCESSLIST 和索引状态检查锁窗口、失败回退与上线结果。224 收藏 -
针对日期分区查询中 DATE、YEAR 等函数包裹分区键的场景,给出半开区间改写、EXPLAIN 验证、时区边界与不适用条件。224 收藏 -
Retrieved_Gtid_Set 代表副本已经收到的 GTID 集,不等于已经执行。本文用 GTID_SUBTRACT 区分接收缺口与应用积压,给出可复核的复制状态排查方法。221 收藏 -
MySQL 8.4 InnoDB 表空间加密不能只看建表语句:先核对密钥环组件和 ENCRYPTION 状态,再检查 INFORMATION_SCHEMA.INNODB_TABLESPACES,最后用一次受控重启确认恢复链路可用。216 收藏 -
MySQL 备份恢复不能只看备份文件是否存在,还要保存并复核二进制日志文件、起始位置和停止位置。本文给出一套不依赖猜测的检查方法。216 收藏 -
数据库 · MySQL | 1个月前 | MySQL · 错误处理 · 事务 · 存储过程 · 数据库运维 · MySQL存储过程 MySQL GET DIAGNOSTICS SQLSTATE MYSQL_ERRNO 事务异常处理
MySQL 存储过程中的异常处理不能只靠一个通用错误提示。GET DIAGNOSTICS 可以读取 SQLSTATE、MYSQL_ERRNO、MESSAGE_TEXT、NUMBER 和 ROW_COUNT,再把可审计的结果写入日志表;本文用订单入库事务说明诊断区读取、回滚与 RESIGNAL 的边界。215 收藏 -
MySQL 9.4 新增 server_memory 后,默认内存变量会怎样计算?本文用 SHOW VARIABLES 和启动参数拆开它与 temptable_max_ram、innodb_buffer_pool_size 的关系,并说明它为什么不是运行时内存上限。215 收藏 -
MySQL 多消费者队列可在短事务中使用 FOR UPDATE SKIP LOCKED 领取互不重叠的任务,再通过租约令牌、超时回收和幂等约束降低重复执行风险。210 收藏 -
MySQL 连接池复用 TCP 连接时,SESSION 变量会随连接一起保留。本文用 time_zone、sql_mode 和 init SQL 说明旧状态从哪里来,给出借出前初始化、归还后清理与复用校验的方法。209 收藏