Tag

#性能优化

包含这个标签的文章。

开发 134 阅读

Go 配置热更新偶发数据竞争:用不可变快照与 atomic.Pointer 安全切换

配置热更新看起来只是“重新读一次文件”,但在高并发服务里,它实际上是一次共享状态切换。如果更新协程直接修改正在被请求协程读取的 map、切片或结构体字段,轻则读到新旧配置拼接出的混合状态,重则触发 concurrent map read and map write,让整个进程退出。 本文以一个会动态调整上游地址和超时时

阅读全文
Python 197 阅读

Python 服务内存持续增长:用 tracemalloc 快照差分定位无界缓存

适用场景 一个常驻的 Python API、消费者或定时任务进程,刚启动时只占用几百 MB,运行数小时后内存持续上涨。请求结束后内存没有明显回落,重启可以暂时恢复,但过一段时间又出现同样问题。监控最终触发容器 OOMKilled,或节点开始频繁交换内存。 本文针对“对象仍被 Python 引用”的增长场景,演示如何用标

阅读全文
数据库 199 阅读

MySQL 查询突然变慢:从统计信息失真到执行计划稳定的排查实践

适用场景 本文适用于 MySQL 8.0 使用 InnoDB 的生产环境。典型场景是 SQL 和索引近期都没有修改,但一次批量导入、归档删除或数据分布变化后,原本几十毫秒的查询突然变成数秒;EXPLAIN 显示优化器改走了低选择性索引、错误的连接顺序,甚至全表扫描。 这类问题容易被误判为“数据库负载太高”。真正需要回答

阅读全文
数据库 272 阅读

PostgreSQL 表越删越大且查询变慢:从死元组取证到 autovacuum 治理

适用场景 本文适用于更新、删除频繁的订单、任务、消息、审计记录等 PostgreSQL 表。典型现象是:业务已经清理大量历史数据,但表文件没有缩小;索引扫描和备份越来越慢;监控中的磁盘使用持续上涨;执行 VACUUM 后空间仍未归还操作系统。 本文重点解决三个问题:如何确认膨胀来自死元组,为什么 autovacuum

阅读全文
数据库 332 阅读

MySQL 深分页越来越慢:从 OFFSET 扫描到游标分页的改造实践

适用场景 本文适用于按时间倒序展示订单、流水、审计日志或消息列表的接口。典型特征是:第一页很快,翻到几千页后响应时间明显上升;数据库 CPU 和磁盘读取随页码增长;接口仍使用 LIMIT offset, size。 示例使用 MySQL 8.0,表结构如下: CREATE TABLE orders ( id BIGIN

阅读全文
数据库 351 阅读

PostgreSQL 连接池耗尽:从 idle in transaction 到事务边界治理

适用场景 应用运行一段时间后,新请求开始等待数据库连接,接口 P99 持续升高,最终出现连接池获取超时或 PostgreSQL too many connections。数据库 CPU、磁盘 I/O 和慢 SQL 指标却不高,重启应用后又能短暂恢复。 这类现象经常不是“连接池太小”,而是业务代码开启事务后没有及时提交或

阅读全文
Python 402 阅读

FastAPI 接口并发升高后全站变慢:阻塞调用卡住事件循环的定位与治理

适用场景 FastAPI 服务平时响应正常,但只要某个文件处理、旧版 SDK 调用或报表计算接口并发升高,健康检查、登录和其他无关接口也一起变慢。CPU、内存和数据库连接数未必异常,扩容 Uvicorn worker 后只能暂时缓解。 这类问题常见于 async def 路由中直接调用同步阻塞函数。本文给出一个可复现的

阅读全文
系统运维 380 阅读

MySQL 主从复制延迟持续扩大:从现场取证到并行复制治理的排查实践

适用场景 本文适用于 MySQL 8.0 或已启用 GTID 的 MySQL 5.7 主从/主备架构:监控显示 Seconds_Behind_Source 持续增长,报表、读库或故障切换的恢复点开始不可接受。目标是先确认延迟真实原因,再在不破坏复制一致性的前提下恢复追平。 现象描述 一次订单促销后,主库写入从平时每秒数

阅读全文
系统运维 457 阅读

Redis 延迟偶发飙升:从 Hot Key 与 Big Key 定位到分阶段治理实践

适用场景 业务使用 Redis 承载登录态、商品详情、计数器或排行榜。平时接口稳定,但在促销、定时任务或某些请求集中到来时,应用开始出现 Redis 超时;监控中 instantaneous_ops_per_sec 并不一定很高,CPU 也可能没有持续满载。 本文以单实例或主从架构为例,说明如何区分 Hot Key(极

阅读全文