如何计算最佳连接总数并找到要使用的数据库实例类型?

问题描述

如何计算从我的服务到我的数据库端点的最佳总连接数?是否有基于每秒预期查询数和每个查询占用的 cpu 和 IO 的基本公式?

同样,是否有公式可以根据流量模式和查询特征(cpu、IO 消耗或查询延迟)计算要使用的最佳数据库实例类型/大小?

我将使用它在我的服务中创建连接池。我假设如果我的服务有 N 个主机,那么每个主机的连接池大小需要是最佳连接总数除以 N。

注意:实例类型是指类似于 AWS EC2 实例类型,它提供有关 vcpu 和内存 (RAM) 的信息

解决方法

在确定数据库计算机的大小时,关键的衡量标准是并发活动的数据库会话数。由于每个活动会话至少对应一个数据库进程,因此您必须提供足够的 CPU 能力和 I/O 容量来并发处理它们。

该数字的估计值为 average query duration in seconds * number of queries per second。您必须至少拥有那么多内核,并且您的 I/O 系统必须能够处理那么多并发 I/O 请求。

在确定连接池的维度时,您还必须考虑数据库在等待来自客户端的下一条语句时在事务中空闲的时间。

最大连接池大小为 number of concurrent queries the database can handle / (transaction busy ratio * average query duration in seconds * number of queries per second)transaction busy ratioactive time for a transaction / total time for a transaction - 因此,如果您的所有事务仅包含一个语句(这意味着没有时间等待事务中的下一个语句),则该比率将为 1。>

在实践中,很难估计或衡量理想的池大小,您必须运行负载测试来查看在不使数据库过载的情况下可以使池有多大。