database - Mule 4 数据库池配置
问题描述
我想使用以下连接器为 mule 使用数据库池:
<db:mysql-config name="dbConfig" host="localhost" port="3306" user="root"
password="" database="esb" doc:name="MySQL Configuration">
<db:pooling-profile maxPoolSize="17" minPoolSize="13" acquireIncrement="1"/>
</db:mysql-config>
参考 - https://docs.mulesoft.com/mule-runtime/4.3/tuning-pooling-profiles
我的问题是,假设如果应用程序以 4000 个查询/秒的速度进入数据库,并且每个查询的周转时间为 0.4 秒。我的问题 maxPoolSize 应该设置什么?
第二个问题,根据 mule 文档,acquireIncrement属性使用是“确定在池耗尽时一次尝试获取多少个连接”。这是否意味着如果 maxPoolSize 用尽了一个新的连接被创建然后又被丢弃,这是公平的理解吗?
解决方案
如果一个查询需要 0.4 秒,那么理论上可以使用一个连接每秒执行 2.5 个查询。因此,对于每秒 4000 个查询,您至少需要 4000/2.5=1600 个连接。您应该添加更多内容以被峰值、更长的查询等覆盖。这实际上取决于您的应用程序的使用模式。您应该尝试测量负载测试中的使用情况或跟踪实际使用情况。为了保险起见,我猜不少于2000。
当当前没有可用的空闲连接时使用acquireIncrement,连接总数不超过maxPoolSize并且新连接的请求到达。由于您的应用程序预期的使用模式,您可能希望创建 3 个连接而不是仅 1 个。在任何情况下,总连接数永远不会超过 maxPoolSize。例如,使用您共享的配置,可能有 14 个活动连接正在使用中,并且新的查询到达。如果 acquireIncrement 为 2,则池将创建 2 个额外的连接,总共 16 个。
推荐阅读
- python - 如何使用单个矩阵的 NumPy 对字符串进行逐行比较
- python - 我想从我的熊猫数据框创建一个多嵌套的 json
- angular - 无法以角度形式禁用 matInput
- javascript - 如何从mysql检索数据到chart.js
- mysql - 无法使用 arduino 连接到数据库服务器以发送一些数据
- python - 生成数组数组需要太长时间
- excel - 如何使用密码保护和取消保护工作表?
- php - 如何在页面和自定义 posttypes 中向 Wordpress REST API 公开所有 ACF 字段
- spring-boot - 当我尝试与 qpid 代理进行集成测试时,我得到了 org.springframework.amqp.AmqpConnectException
- r - 如何绘制具有“n”列数的条形图并按另一列分组?