作者
digoal
日期
2021-12-22
标签
PostgreSQL , 热门问题
- 问题说明(现象、环境)
- 分析原因
- 结论和解决办法
15、为什么业务开启多会话并行后反而变慢了?
https://www.bilibili.com/video/BV13b4y1i7WH/
为什么业务开启多会话并行后反而慢? (资源耗尽, cpu调度, 死锁, 热点行、热点页锁竞争, 等待, 业务逻辑处理有问题等原因)
1、增加并发前, 资源是不是就已经用光了, 再增加并发只会增加CPU调度的额外开销, 性能下降.
《每天5分钟,PG聊通透 - 系列1 - 热门问题 - 链接、驱动、SQL - 第4期 - 为什么增加连接不能无限提高TPS或QPS? 配置多少个链接合适?》
2、增加并发后, 是不是由于并行会话之间的锁等待冲突概率增加(甚至可能由于业务逻辑问题出现死锁), 从而导致性能下降.
例如最极端的情况是秒杀, 并发越高冲突越大.
postgres=# create table u (id int primary key , info text);
CREATE TABLE
postgres=# insert into u values (1,'test');
INSERT 0 1
vi test.sql
update test set info='test' where id=1;
IT-C02YW2EFLVDL:~ digoal$ pgbench -M prepared -n -r -P 1 -f ./test.sql -c 1 -j 1 -T 120
progress: 1.0 s, 25702.4 tps, lat 0.039 ms stddev 0.200
progress: 2.0 s, 27192.4 tps, lat 0.037 ms stddev 0.011
progress: 3.0 s, 26541.0 tps, lat 0.038 ms stddev 0.014
progress: 4.0 s, 25591.0 tps, lat 0.039 ms stddev 0.013
progress: 5.0 s, 26932.0 tps, lat 0.037 ms stddev 0.011
progress: 6.0 s, 26717.0 tps, lat 0.037 ms stddev 0.013
progress: 7.0 s, 27160.0 tps, lat 0.037 ms stddev 0.011
progress: 8.0 s, 26665.1 tps, lat 0.037 ms stddev 0.013
progress: 9.0 s, 27517.9 tps, lat 0.036 ms stddev 0.010
progress: 10.0 s, 27792.1 tps, lat 0.036 ms stddev 0.012
progress: 11.0 s, 24930.0 tps, lat 0.040 ms stddev 0.161
progress: 12.0 s, 26340.9 tps, lat 0.038 ms stddev 0.012
progress: 13.0 s, 25478.1 tps, lat 0.039 ms stddev 0.209
IT-C02YW2EFLVDL:~ digoal$ pgbench -M prepared -n -r -P 1 -f ./test.sql -c 10 -j 10 -T 120
progress: 1.0 s, 22942.6 tps, lat 0.429 ms stddev 0.372
progress: 2.0 s, 22185.8 tps, lat 0.450 ms stddev 0.398
progress: 3.0 s, 20962.0 tps, lat 0.477 ms stddev 0.405
progress: 4.0 s, 20583.1 tps, lat 0.485 ms stddev 0.410
progress: 5.0 s, 20463.2 tps, lat 0.488 ms stddev 0.407
progress: 6.0 s, 19248.0 tps, lat 0.519 ms stddev 0.443
progress: 7.0 s, 20184.1 tps, lat 0.495 ms stddev 0.411
IT-C02YW2EFLVDL:~ digoal$ pgbench -M prepared -n -r -P 1 -f ./test.sql -c 100 -j 100 -T 120
progress: 1.0 s, 6915.6 tps, lat 12.414 ms stddev 16.900
progress: 2.0 s, 6312.9 tps, lat 15.789 ms stddev 17.871
progress: 3.0 s, 6130.7 tps, lat 16.392 ms stddev 19.069
progress: 4.0 s, 4820.6 tps, lat 20.478 ms stddev 22.436
progress: 5.0 s, 4540.8 tps, lat 22.062 ms stddev 24.495
progress: 6.0 s, 4365.9 tps, lat 22.779 ms stddev 23.605
progress: 7.0 s, 4459.6 tps, lat 22.454 ms stddev 23.197
progress: 8.0 s, 4268.0 tps, lat 23.581 ms stddev 26.621
progress: 9.0 s, 3343.8 tps, lat 29.346 ms stddev 31.763
progress: 10.0 s, 3704.4 tps, lat 27.198 ms stddev 28.932
progress: 11.0 s, 3927.5 tps, lat 25.645 ms stddev 27.353
progress: 12.0 s, 4821.6 tps, lat 20.807 ms stddev 22.768
progress: 13.0 s, 4978.9 tps, lat 20.016 ms stddev 21.327
《PostgreSQL 谁堵塞了谁(锁等待检测)- pg_blocking_pids》
《PostgreSQL 谁堵塞了谁(锁等待检测)- pg_blocking_pids, pg_safe_snapshot_blocking_pids》
期望 PostgreSQL 增加什么功能?
PolarDB for PostgreSQL云原生分布式开源数据库
PostgreSQL 解决方案集合
德哥 / digoal's github - 公益是一辈子的事.

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




