数据库是大型架构核心,下面我详解MySQL高性能@mikechen
MySQL QPS 到10000
随着业务规模增长,MySQL 每秒查询数(QPS)达到 10000 时,数据库系统常会遭遇多个性能瓶颈。
主要,包括:硬件资源、并发控制、存储与 IO、锁竞争、查询效率与架构设计等方面。

比如:
典型:QPS 上万时 CPU 利用率飙升到 90%+,但实际吞吐不增反降。
如果数据不全在内存(Buffer Pool 命中率低),随机 IO 成为瓶颈。
MySQL 的 max_connections 默认值较低,高并发下连接池耗尽,新请求被拒绝。
大量并发写入或复杂事务会导致行锁、表锁或间隙锁争用,降低并发能力。
如何来解决?

第一层:内部优化(压榨单机性能)
索引优化: 确保所有高频 SQL 都能命中覆盖索引(Covering Index),减少回表。
参数调优:
加大 innodb_buffer_pool_size(通常设为内存的 70%-80%),尽量将数据留在内存里。
调整 innodb_flush_log_at_trx_commit = 2(牺牲极小的一致性,换取巨大的写入性能提升)。
2. 第二层:缓存拦截(减少数据库访问)
原理: 遵循“二八法则”,80% 的请求往往集中在 20% 的热点数据上。

方案: 在 MySQL 前层加入 Redis 或 Memcached。
旁路缓存: 查询先读 Redis,不中再读 MySQL。
QPS 提升效果: Redis 单机可达 10w+ QPS,能抵挡 90% 的查询压力。
3. 第三层:读写分离(垂直拆分负载)
原理: 互联网应用通常“写少读多”,将读请求分散到多个从库(Slave)。

实现: 1. 部署主从复制(Master-Slave)。 2. 使用插件或中间件(如 ShardingSphere-Proxy 或 Atlas)实现读写分离。
收益: 通过增加从库,可以将读 QPS 理论上提升到数万甚至数十万。
4. 第四层:水平拆分(分库分表)
原理: 当单表数据量过大(如超过 2000 万行)或单机写入压力过大时,必须进行水平切分。
实现: 将数据按某个维度(如 user_id)分布到多个数据库实例中,分散 I/O 和 CPU 压力。
mikechen睿哥
10年+一线大厂架构实战经验,就职于阿里、淘宝等一线大厂,操盘多个亿级大厂核心项目。