首页 > 数据库 >PostgreSQL 软肋 “最大连接数” 到底是不是问题?

PostgreSQL 软肋 “最大连接数” 到底是不是问题?

时间:2024-09-03 17:23:45浏览次数:12  
标签:软肋 数据库 连接数 问题 MySQL PostgreSQL 连接池



PostgreSQL 软肋 “最大连接数” 到底是不是问题?_PostgreSQL

PostgreSQL 为什么接受大量连接到数据库需要连接池  (这是一篇2020年8月4日我写的文章,分析为什么,根本上也没有如某些diss postgresql 连接数不能太高问题非常严重的人所说的影响严重,实际上针对PostgreSQL 连接的问题,还真有一个可以说一下的,但鲜有人提到)

正文

————————————————————————————

最近在群里对于PostgreSQL的问题点就没有停止过,前两天PostgreSQL的老问题连接数不能过高的问题,又成为刺向PostgreSQL的一根芒刺。作为一个数据库渣男,大部分数据库都玩过了,的确从其他的数据库DBA的角度来看,PostgreSQL的确和其他的数据库在这里是不太一样,有些特殊的要求,注意我这里用的不太一样,不太一样不证明这就是一个缺陷,缺点,或者痛点。

其实从另一个角度上来说,我到觉得这是一件好事,我们来分析一下。从应用开发的角度来说,应用是可以横向扩展的,这在业内不是一个难题,无状态嘛,但在整体应用程序设计中,最重要的点就在数据库,数据库一直是应用程序设计中的一个瓶颈点,所以后来出现了分布式数据库,Tidb, OceanBase  等数据库产品,来从根本解决这个问题。

当然今天讨论的不是这个话题,咱们回到刚才的话题,PostgreSQL的连接数到底是不是他的弱点,我个人觉得,不是,我是从应用开发的角度来看这个问题的。

比如,MySQL可以支持6000的连接数,这个数是什么数,max_connections,最大连接数,这个数是active_sessions的,根据我们的工作经验,实际上大部分数据库的问题在active_sessions,而不是我们提到的max_connections。所以我们标定这个问题清晰了,解决问题就可以了。而不是抓住一个值,来去说明某个实际上并不重要的问题。终究咱们要通过实际情况和需求来去评判某个数据库的优良,而不是一个参数抓住就往死里按,这对解决实际问题是没有意义的。

那么核心的问题是active_sessions 的问题,这个问题对于PG,SQL SERVER, MySQL, Oracle, Polardb ,MongoDB 这都是一个概念,是否有充足的资源来去满足活跃的链接的访问,此时要比拼的就是 IOPS , CPU, Memory, 系统整体的性能,以及访问的方式是什么OLTP OR OLAP 等。

idle 连接数过多导致的问题,这不光是在PG,其他的数据库也存在类似的问题,只不过可能有人又要拿出来,进程和线程的模式来说事了。

在应用程序都在大量使用连接池的,JAVA自己的连接池,其中有一个目的与PostgreSQL的pgbouncer的功能是类似的,就是链接复用,只不过JAVA的连接池的功能没有pgbouncer在链接复用上的功能强而已。

从这里可以得出一些结论

1  从应用开发的角度来说,连接数高并不是一个好事,对于应用程序本身也是,所以应用程序本身有程序的连接池,来进行访问进程的复用。

2  大量idle的连接本身对于内存的开销尤其是数据库方面的开销是有负担的,超过内存的owner回导致OOM,这在任何数据库里面都一样,甚至有些数据库本身在这方面的内存管理能力不太好,导致内存溢出的问题。

3  讨论一个数据库可以进行的max_connections数据量多,并不是衡量一个数据库能力的高低的关键维度,甚至可能都不是一个维度。

4  PostgreSQL 本身有自己解决问题的方式,后期可能在PostgreSQL 快速迭代的情况下,这些问题可能会逐步解决,甚至和Oracle 类似有自己内部解决此类问题的方式。

综上所述,一个成熟的数据库管理人员,可以更加关注active_sesssion在不同的数据库中的表现,相信PostgreSQL 不会让您在这个位置失望。

最后说一个人家亲口和我说的事情,某云数据库架构师去某金融企业做回访,提到MySQL类数据库产品的一些新功能想介绍一下,这个金融系统的数据库负责人说,不太想听这个,能说说PostgreSQL类的产品吗,他比较想听。

Austindatabases 公众号,主要围绕数据库技术(PostgreSQL, MySQL, Mongodb, Redis, SqlServer,PolarDB, Oceanbase 等)和职业发展,国外数据库大会音译,国外大型IT信息类网站文章翻译,等,希望能和您共同发展。


PostgreSQL 软肋 “最大连接数” 到底是不是问题?_MySQL_02

PostgreSQL 软肋 “最大连接数” 到底是不是问题?_PostgreSQL_03

标签:软肋,数据库,连接数,问题,MySQL,PostgreSQL,连接池
From: https://blog.51cto.com/u_14150796/11909419

相关文章

  • PostgreSQL备忘录
    安装(Docker)拉取PostgreSQL镜像sudodockerpullpostgres运行PostgreSQL容器运行PostgreSQL容器,指定数据库名称、用户和密码:sudodockerrun--namemy_postgres-ePOSTGRES_USER=myuser-ePOSTGRES_PASSWORD=mypassword-p5432:5432-dpostgressudodockerps进入P......
  • PostgreSQL的安装与配置(包含多种可能遇到的报错或者无法安装问题)
    1.Windows安装1.官网下载安装包,EDB:Open-Source,EnterprisePostgresDatabaseManagement(enterprisedb.com) 2.按照提示步骤进行安装(文件路径很重要!!!)这是PostgreSQL的安装目录(自定义目录安装的一定要命名清楚,不要和后面的data混淆) 这个全选这个是存储数据的目录(不......
  • RAG在PostgreSQL上的实现:使用Azure Container Apps和OpenAI构建智能问答系统
    RAG在PostgreSQL上的实现:使用AzureContainerApps和OpenAI构建智能问答系统随着人工智能技术的快速发展,越来越多的企业和开发者开始探索如何将AI能力整合到现有的应用系统中。本文将介绍一种基于检索增强生成(RetrievalAugmentedGeneration,RAG)的方案,通过结合AzureCo......
  • PostgreSQL -- 使用 Mybatis 时对数据库的多个删除操作
     在Java中使用Mybatis与PostgreSQL数据库进行交互时,删除操作的语句根据不同的场景应用不同。 1.删除表内所有记录删除表内所有的记录。谨慎使用!<!--1.删除表内所有记录--><deleteid="deleteALl">deletefromtable_name;</delete>2......
  • 20240831-PostgreSQL小课持续更新
    PostgreSQL小课专栏介绍PostgreSQL小课目前已累积了近21万字。小课最新的大纲:目前已完成大概95%的进度:(venv312)➜mypostgresgit:(dev)shscripts/word_statistics_pg_style.shFilename|Chinese|English......
  • JDBC连接数据库
    什么是JDBCJDBC(JavaDatabaseConnectivity)是Java语言中用于连接和操作数据库的一组API。它允许Java程序通过标准的数据库连接方式,与不同种类的关系型数据库进行通信和交互。JDBC提供了一种统一的编程接口,使得开发人员可以使用相同的代码来访问不同的数据库。它提供了一组类......
  • ci3使用PDO连接数据库
    $db['default']=array('dsn'=>"mysql:host=localhost;dbname=test;charset=utf8",//设置数据库连接字符串'hostname'=>'localhost','username'=>'root','password......
  • postgresql下Schema和DataBase
    database—>schema—>table1.同一个实例下,不同database是不能相互访问的,即独立的。2.同一个数据库,不同模式下的表是可以相互访问,即可共享的3.不同模式下,表名可以是一样。也就是表在模式下是独立。##授权某个库下的某个模式下有创建表的权限grantcreateondatabasedb_na......
  • postgresql 断电后无法重启问题
    问题描述LOG:databasesystemwasinterrupted;lastknownupat2024-07-0405:03:31UTCFATAL:thedatabasesystemisstartingup解决办法PostgreSQL9.6及以下版本使用pg_resetxlog,高于9.6使用pg_resetwalps:这边数据版本为12.3步骤:先把数据库发布订阅停止......
  • Qt5.14.2 操作PostgreSQL 记录
    在Qt5.14.2中操作PostgreSQL数据库.#include<QSqlDatabase>#include<QSqlQuery>#include<QSqlError>#include<QDebug>//初始化数据库连接QSqlDatabasedb=QSqlDatabase::addDatabase("QPSQL");//qDebug()<<"aaaa"......