Go语言技术文章
-
数据库 · MySQL | 1星期前 | MySQL · DDL · 元数据锁 · 性能排查 · performance_schema · MySQL 元数据锁 metadata_locks performance_schema DDL阻塞 Waiting for table metadata lock
MySQL 的 ALTER TABLE 卡住时,不要只盯着 Waiting for table metadata lock。本文用 performance_schema.metadata_locks 和 threads 关联锁对象、等待会话与持有会话,并给出安全终止和发布前检查方法。297 收藏 -
数据库 · MySQL | 6天前 | MySQL · 回滚 · 数据库运维 · 配置变更 · 系统变量 · MySQL 8.4 SET PERSIST SET PERSIST_ONLY RESET PERSIST mysqld-auto.cnf persisted_variables
MySQL 8.4 的 SET PERSIST 可以把全局系统变量同时写入运行时和 mysqld-auto.cnf,SET PERSIST_ONLY 则只为下一次启动准备配置。本文用连接数调整场景拆开两者的作用域、权限、复查与 RESET PERSIST 回退边界,避免把临时改动误当成永久配置。296 收藏 -
用一组可复现的 MySQL 8.4 示例,讲清 INTERSECT 与 EXCEPT 的 DISTINCT/ALL、列数和类型边界,以及 NULL、优先级、ORDER BY 的验收方法。287 收藏 -
Redis 的写入回复成功,不等于数据已经落到 AOF 或副本磁盘。本文用 WAITAOF 拆开本地 fsync、副本 fsync 和超时返回值,给出订单确认、幂等重试和生产验收的边界。284 收藏 -
数据库 · MySQL | 1星期前 | MySQL · 索引 · 执行计划 · sql优化 · 性能排查 · 执行计划 MySQL 8.4 EXPLAIN FORMAT=JSON cost_info query_cost
MySQL 查询慢时,EXPLAIN 的 rows 只是行数估算,真正影响优化器取舍的还包括 cost_info。本文用订单列表场景拆解 query_cost、read_cost、条件评估成本、prefix_cost 的关系,再用 EXPLAIN ANALYZE 复核估算偏差,避免把 cost 数字直接当成毫秒。284 收藏 -
最可靠的做法是跳过预查直接INSERT并捕获1062错误,在应用层处理冲突;ON DUPLICATE KEY UPDATE和ON CONFLICT需依赖唯一索引,否则无效。MySQL 直接 INSERT + 捕获 1062 错误最可靠 查再插(SELECT THEN INSERT)在高并发的情况反赌281 收藏 -
数据库 · MySQL | 2小时前 | MySQL · 事务 · 死锁 · InnoDB · 锁等待 · mysql innodb 锁等待 SHOW ENGINE INNODB STATUS 事务死锁
MySQL InnoDB 事务死锁发生后,不能只看一条报错就改重试。本文用订单与库存更新场景还原锁等待环路,演示如何读取 SHOW ENGINE INNODB STATUS、关联 performance_schema、判断受害事务并验证修复是否真正降低死锁风险。275 收藏 -
清理 MySQL 大表历史数据时,直接 DELETE 大范围记录容易造成锁等待和事务膨胀。本文用主键游标、固定批次、执行计划和可暂停的回滚窗口,搭出一套可观察的分批清理方案。273 收藏 -
在检测序列断档方面,LAG()无疑是最为可靠的,它仅仅依赖于相邻行ID的差值,而不预设数据是连续的,也不假定起始值。LEAD()则更适合用于定位缺口区间。ROW_NUMBER()可就不适合用于真实断档的检测了,因为它生成的是序号,而不是真实的ID。此外,对于空表、NULL以及边界值,都需要进行显式的271 收藏 -
Redis 8.4 为 XREADGROUP 增加 CLAIM 选项,可在一次读取中优先接管达到空闲阈值的 Pending 消息,再读取新消息。本文用订单通知流说明 COUNT、BLOCK、重试计数和 XACK 的生产边界。266 收藏 -
MySQL UPDATE JOIN 不是写上 JOIN 就只会改一行,关联表存在重复键时,同一目标记录可能被多条源记录命中。本文用订单与客户标签的修复场景,演示先用 SELECT 验证关联唯一性,再在事务和影响行数检查下执行更新。262 收藏 -
数据库 · Redis | 2星期前 | Redis · 查询优化 · 性能边界 · Sorted Set · 集合运算 · redis limit Sorted Set ZINTERCARD 集合交集 基数统计
Redis ZINTERCARD 只返回多个 Sorted Set 的交集数量,适合在推荐、活动资格和筛选接口中先做交集基数判断。本文用 redis-cli 拆开 ZINTERCARD 与 ZINTER、LIMIT 的差别,说明空 key、集群同槽和“大于阈值”判断的边界。254 收藏 -
MySQL 8.4 的 CTE 不一定会生成临时结果集。本文用 EXPLAIN 和 optimizer_switch 判断 CTE 是被合并还是物化,并说明 derived_merge、NO_MERGE 与多次引用的边界。253 收藏 -
Redis Cluster 中,多键操作需要落在同一 slot,而把所有订单都塞进一个哈希标签又可能制造热点。本文用订单明细与库存扣减场景说明如何拆分 Key、验证 slot 分布,并在多键事务与分片均衡之间做取舍。249 收藏 -
Redis ZMSCORE 可以一次查询 Sorted Set 中多个成员的分数,但返回顺序、缺失成员的 nil 和空集合结果经常被业务代码误判。本文用排行榜示例说明批量查询、结果映射与命中验收边界。247 收藏