0

0

配置连接池

betcha

betcha

发布时间:2024-09-04 13:40:49

|

1107人浏览过

|

来源于DZone

原创

连接池是管理数据库连接的软件组件。这可以通过多种方式帮助提高资源利用率,帮助实现负载平衡或故障转移,并且可以大大减少事务时间。在这篇博文中,我们将了解什么是连接池以及如何配置它。

thumbnail.jpg

连接池是一个软件组件管理数据库连接。这可以通过多种方式帮助提高资源利用率,帮助实现负载平衡或故障转移,并且可以大大减少事务时间。在这篇博文中,我们将了解什么是连接池以及如何配置它。

什么是连接池以及它为何有用

打开与数据库的连接需要许多步骤。我们需要连接到服务器并执行初始握手,就加密和连接设置达成一致,然后在所有层(网络驱动程序、操作系统层、数据库层等)中保留新的连接资源。每个连接都会消耗内存,内存大小取决于数据库引擎。对于 postgresql,一个连接甚至可以使用 1.3mb 内存。打开连接也需要时间,因为我们需要协商新连接的设置。

如果我们不断为每个 SQL 查询打开新连接,可能会导致数据库服务器出现多个问题:

  • 打开连接需要时间和资源,因此我们的交易速度较慢

  • 我们可能会超出活动连接的限制(默认情况下可以设置为某个值)像一百个连接)

  • 数据库可能会消耗更多内存,这可能会对缓存命中率和可用于查询的可用内存产生负面影响

而不是打开每个 SQL 查询都有一个新连接,我们可以池化连接。我们可以配置连接池来保留连接数量并为所有客户端重用它们。这样我们的应用程序连接到池化器而不是直接连接数据库,然后池化器连接到数据库。这带来了多个优点:

  • 连接池使连接保持打开状态的时间更长,从而减少了数据库端打开和关闭连接的开销并减少了延迟。

  • 我们可以在连接之间甚至数据库之间实现负载平衡,从而提高性能。

  • 池化器可以维持稳定的连接数量,因此我们可以避免这个问题活动连接过多,会减少资源使用。

  • 池化器可以重定向主服务器和备用服务器之间的连接,以提供故障转移,从而提高稳定性和可扩展性。

  • 池化器可以将密码存储到数据库的中央位置,从而提高安全性。

  • 池化器可以缓存结果以提高查询性能。

连接池也有一些缺点:

  • 它是我们系统中可能成为故障点的另一个组件。

  • 由于应用程序和数据库之间的另一个网络跃点,网络延迟可能会略有增加。

  • 低效的连接池可能会成为瓶颈。

  • 我们需要调整和维护连接池,这增加了维护负担。

不同类型的连接池

有很多实现连接池的方法。在本节中,我们将了解各种实现细节。

外部或内部连接池

在典型情况下,我们从应用程序连接到数据库。我们现在可以将连接池放在两个位置之一:应用程序本身或应用程序和数据库之间的某个位置。

将连接池放在应用程序中(应用程序端连接池)可以非常容易因为许多 ORM 或数据库驱动程序都支持开箱即用。例如,JDBC 支持 c3p0,而 ODBC 支持开箱即用。这带来了很多好处。我们不需要安装和维护任何额外的组件,因为池化器位于应用程序内部。我们只需要部署应用程序的新版本,然后就可以准备好池化了。这也减少了网络延迟,因为我们没有任何额外的网络跃点(一切都位于我们的应用程序内部)。

不幸的是,应用程序端连接池有一些缺点。最大的一个是它仅针对一个应用程序进行配置。如果我们有很多应用程序(尤其是在分布式环境中),那么我们需要在很多地方配置池化器。更不用说我们仍然可能达到服务器端的连接计数限制,因为池化器彼此不了解。拥有许多连接池也会导致更高的资源使用率,并且通常性能较低。

我们还可以使用位于应用程序和数据库之间的外部连接池。这可以与任意数量的应用程序一起使用,并让我们能够精确控制连接限制。集中式连接池还可以更好地控制资源,让我们实现故障转移或负载分配。

外部连接池也有一些缺点。首先也是最重要的,它是我们需要随着时间的推移安装、配置、调整和维护的另一个组件。我们还需要重新配置每个应用程序以使用连接池(这应该像更改一些连接字符串并重新部署应用程序一样简单)。外部池化器还会增加一些网络延迟,因为它是应用程序和数据库之间的另一个网络组件。

外部连接池化器也可能成为故障点。如果池化器由于某种原因而关闭,应用程序将无法再连接到数据库。如果池化器速度缓慢或效率低下,则会影响所有使用它的应用程序。因此,池化器必须具有高质量,才不会降低整体性能。

池化类型

每个池化器需要决定如何将连接分配给客户端。通常有三种方法。

第一种是会话池。在这种方法中,连接在会话持续时间内分配给客户端(直到客户端断开连接或达到超时)。这是最简单的方法,但是,这有效地限制了客户端数量,因为通常每个客户端消耗一个连接。

下一个解决方案是事务池。在此方法中,池程序为每个事务分配连接,并且仅在事务持续时间内分配连接。如果客户端想要运行另一个事务,他们需要获得另一个连接(并且可能需要等待其他连接可用)。这允许池化器处理更多客户端,并且是推荐的方法。

最后一种方法是为每个 SQL 语句独立分配连接。理论上,这会带来最高的灵活性和连接利用率。但是,这会导致一项事务跨越多个连接。由于许多事务设置与连接相关,这可能会成为技术限制。

连接池解决方案

根据您使用的数据库类型,可能有一些内置的解决方案,或者您可能需要手动配置它们。让我们看一些示例。

内置解决方案

根据您的基础设施提供商,您也许能够使用内置或近内置解决方案:

  • Neon PostgreSQL 数据库有一个内置的 PgBouncer

    MTTSHOP包包免费商城系统
    MTTSHOP包包免费商城系统

    一款非常包包、衣服、鞋子类网站,页面干净清洁、一目了然,mttshop打造精致、简单、易用、免费的商城。 系统要求:IIS5.1以后,必须安装.net 3.5 安装步骤: 1、下载完成后,直接解压文件mttshop.rar 2、附加数据库:解压后的可以找一个叫db的文件夹,解压后直接附加就可以,支持SQL 2000、2005、2008 3、配置web.config文件,找到key=&qu

    下载
  • Supabase 有一个内置的 Supavisor

  • 适用于 PostgreSQL 的 Azure 数据库支持内置 PgBouncer

  • DigitalOcean 的 PostgreSQL 包括 PgBouncer

  • Azure 数据库可与 ProxySql

  • Azure 数据库可与 Heimdall 数据库代理一起使用

  • ADO.NET 支持内置连接池

  • Oracle 支持通用连接池对于 JDBC

  • Oracle 自治数据库支持数据库驻留连接池

外部解决方案

您可以使用许多外部解决方案使用:

  • Amazon RDS 代理

  • Pgpool

  • PgBouncer

  • 奥德赛

  • Heimdall 数据库代理

  • ProxySQL

  • pgcat

案例研究:配置 PgBouncer

在此示例中,我们将研究 PgBouncer。

我们首先按照文档中的方式安装它。

然后我们需要配置它。最重要的设置是:

  • pool_mode:如何处理连接;我们可以使用事务

  • max_client_conn:配置可以连接到连接池的客户端数量

  • default_pool_size:配置允许多少个服务器连接对于每个用户数据库

  • min_pool_size:要保留多少个备用连接

配置池化器后,我们可以使用pgbench验证其性能:

pgbench -c 10 -p -j 2 -t 1000 database_name

PgBouncer 可以轻松地将每秒事务数增加 60%,如基准测试所示:

  • 对 PostgreSQL 连接池进行基准测试:PgBouncer、PgCat和 Supavisor

  • 通过连接池提高数据库性能

  • 使用 PgBouncer 增强 PostgreSQL

总结

连接池可以提高性能并减少资源消耗。有许多内置解决方案可以轻松地与我们的数据库一起使用,无论我们将它们托管在哪里以及我们使用什么数据库引擎。我们需要记住,连接池是另一个故障点,需要小心处理。配置良好的连接池可以使每秒的事务数量增加近一倍,从而极大地提高性能。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

683

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

322

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

348

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1095

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

358

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

677

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

575

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

417

2024.04.29

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

19

2026.01.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
SQL 教程
SQL 教程

共61课时 | 3.5万人学习

Java 教程
Java 教程

共578课时 | 48.5万人学习

oracle知识库
oracle知识库

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号