数据库连接池参数怎么定:不是越大越好
连接池配小了报「获取连接超时」,配大了数据库 CPU 打满。这两个极端我都遇到过,最后发现参数得按公式算,不能凭感觉。 先理解连接数不是免费的 每个 MySQL 连接在服务端对应一个线程,占内存(默认约 256KB 起,…
连接池配小了报「获取连接超时」,配大了数据库 CPU 打满。这两个极端我都遇到过,最后发现参数得按公式算,不能凭感觉。 先理解连接数不是免费的 每个 MySQL 连接在服务端对应一个线程,占内存(默认约 256KB 起,…
用 ES 做搜索,最常见的两个问题是「搜不到」和「搜出一堆不相关的」。这两个问题的根源往往都在分词和索引设计上。 倒排索引是什么 普通数据库是「文档 → 包含哪些词」,倒排索引反过来:「词 → 出现在哪些文档」…
MySQL 5.7 也有 JSON 类型,但 PostgreSQL 的 JSONB 更成熟:支持索引、有丰富的操作符、能部分更新。这篇记一下实际用法和边界。 JSON vs JSONB json 保存原始文本,保留空格和键顺序;jsonb 保存解析后的二进制,…
接口被人刷的时候,第一道防线通常是 Nginx 限流。配置只有几行,但参数理解错了,要么没挡住,要么把自己的正常用户挡了。 基本配置 limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s; server { …
“先更新数据库还是先删缓存”这个问题,面试常问,实际项目里也真的会出错。这篇把几种方案摊开说,重点是各自的失败场景。 方案一:先更新 DB,再删缓存 最常用的 Cache Aside。 def update(id, data): db.upda…
日志打得不好,出问题时只能靠 grep 在一堆文本里拼时间线。花半天时间把日志格式统一一次,之后每次排障都能省下几倍时间。 一、别再打纯文本 这样的日志机器读不了: 用户 1024 下单失败,余额不够,订单 o8891 …
“数据量大了要分库分表”这句话害了不少项目。分片带来的复杂度是长期的:跨库 join 没了、事务要改成最终一致、扩容要迁移数据、运维要管更多实例。动手之前先算几个数。 第一步:现在到底多大 SELECT table_name, …
限流不是为了拒绝用户,而是为了让系统在超载时仍然能服务一部分请求。三种常见算法适用场景差别很大,选错了要么挡不住峰值,要么误伤正常流量。 一、固定窗口计数器 最简单的做法:每分钟一个 key,INCR 后判断值…
Kafka 的并发模型就两条规则:一个分区只能被同组的一个消费者消费;不同组之间互不影响。把这两条吃透,很多问题就解释得通了。 分区是并行的单位 一个 topic 分成多个 partition,每个 partition 内部有序,parti…
读写分离之后最常见的抱怨是“刚提交的数据查不到”。多数情况就是主从延迟。 先确认是不是延迟 SHOW SLAVE STATUS\G 关注三行: Slave_IO_Running: Yes Slave_SQL_Running: Yes Seconds_Behind_Master: 12 前两个…
线上某个列表接口偶尔超时,监控上看到 P99 突然从 80ms 涨到 3s,但数据库慢查询日志里什么都没有。这类问题通常不在 SQL 本身,而在请求排队。记录一下当时的排查路径。 一、先分清时间花在哪 给一次请求打上分段…
“消息丢了”是消息队列最常见的投诉。丢可能发生在四个环节,每一个都要单独兜住,少一环就可能出问题。 第一关:生产者到交换机 网络抖动、交换机不存在、Broker 挂了,消息都可能没送到。开启 publisher confirm:…