PostgreSQL码农集散地

每天5分钟PG聊通透第15期,为什么增加连接后反而变慢了?

参考文档点击文末阅读原文打开; 推荐《最好的PostgreSQL学习镜像》;


每天5分钟PG聊通透第15期,为什么业务开启多会话并行后反而变慢了?

背景

  • 问题说明(现象、环境)
  • 分析原因
  • 结论和解决办法

链接、驱动、SQL

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 锁等待排查实践 - 珍藏级 - process xxx1 acquired RowExclusiveLock on relation xxx2 of database xxx3 after xxx4 ms at xxx》

本期彩蛋 - 数据库生态工具&信创开源数据库

用好周边工具, 数据库管理水平战胜90%老司机

1、管控软件

云猿生开源的kubeblocks, 如果你要管理很多套并且种类很多的数据库产品, 推荐选择.

  • https://github.com/apecloud/kubeblocks

乘数开源的clup, 专门用来管理PostgreSQL和PolarDB的集群管理软件, 如果你要管理很多套数据库, 推荐选择. 并且clup还提供了企业版、自研的连接池、分布式存储、一体机、备份平台等, 企业可以关注一下.

  • https://www.csudata.com/

若航开源的pigsty, 集成了300多个PG插件的PG集群和PolarDB集群管理软件, 如果你要管理很多套数据库, 并且对插件有特别多的需求, 推荐选择.

  • https://pigsty.cc/zh/

2、审计监控诊断优化

海信聚好看的 DBdoctor, 采用ebpf技术, 在对数据库几乎没有影响的情况下实时监控数据库和服务器的各项指标, 发现和诊断问题根因非常方便.

  • https://www.dbdoctor.cn/

Bytebase 的目标非常远大, 是位于您和数据库之间的中间件。它是数据库 DevOps 的 GitLab/GitHub,专为开发人员、DBA 和平台工程师打造。

  • https://bytebase.cc/docs/introduction/what-is-bytebase/

D-Smart, Oracle老前辈白老大他们搞的, 专注企业级市场, 将业界顶级DBA经验的产品化作品, 产品功能包括数据库监控、诊断、优化等.

  • https://www.modb.pro/db/567140

3、数据同步&迁移&备份恢复

NineData, 老领导出去创业做的产品, 产品涵盖了数据同步、迁移、备份、比对、devops、chatDBA等.

  • https://www.ninedata.cloud/home

DSG, 非常老牌的数据库同步迁移企业级产品, 支持各种数据库的异构和同构迁移, 用他们的话说, 没有dsg搞不定的迁移, 比goldengate还牛.

  • https://www.dsgdata.com/

通过信创并且开源的数据库:

PolarDB for PostgreSQL

  • https://github.com/ApsaraDB/PolarDB-for-PostgreSQL

以下PG系国产数据库也非常值得关注: HaloDB(基于PG兼容PostgreSQL、Oracle、MySQL. http://www.halodbtech.com/ )、IvorySQL(基于开源PG兼容PG、Oracle. https://www.ivorysql.org/zh-cn/ )、ProtonBase(云原生分布式数仓. https://protonbase.com/ ).

参考文档点击阅读原文获得


感谢关注我的github (https://github.com/digoal/blog) 及视频号:

Image

彩蛋2: 近期活动预告

Image

彩蛋3:  全国大学生数据库创新设计赛  点击报名