database - 如何计算最佳连接总数并找到要使用的数据库实例类型?
问题描述
如何计算从我的服务到我的数据库端点的最佳总连接数?是否有基于每秒预期查询数以及每个查询占用的 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 ratio
是- 因此,如果您的active time for a transaction / total time for a transaction
所有事务仅包含一条语句(这意味着没有时间花在等待事务中的下一条语句),那么该比率将为 1。
在实践中,很难估计或测量理想的池大小,您必须运行负载测试以查看在不使数据库过载的情况下可以使池达到多大。
推荐阅读
- php - 有没有办法为 unix zip 命令设置输出位置?
- javascript - React中的Html解析器无法正确解析脚本
- ruby-on-rails - 获取模型中的 current_user id
- c# - 我的问题是关于泛型 c# 中的代码爆炸
- api - Prestashop 1.7 保存
- oracle - 如何在 adf 12c 中以编程方式在输入框中设置值
- java - 将不可修改列表中的元素添加到地图
- java - 从 Kotlin 调用需要 Function 参数的 Java 方法
- sql - MS SQL - 使用触发器将数据从一个表插入另一个表
- css - EDGE 浏览器 - 自定义输入类型 =“范围”值在第一次单击滑块轨道时不会改变