Oracle单实例的最大并发测试

Oracle的最大并发数由PROCESSES和SESSIONS决定,归根结底由操作系统和硬件配置决定。

根据对Tomcat、Druid、Oracle三者的与并发相关的参数进行了解,结合经验和网上的部分说法后,得出如下数据:

  1. Tomcat的单机并发最大线程数为500到700。
  2. Druid数据库连接池的推荐配置最大并发数(maxActive)为20.
  3. Oralce的最大进程数(PROCESSES)为300,最大SESSIONS为300 * 1.5 + 22 = 477 (这个公式对应Oracle 11g版本)
  4. Nginx在windows上的最大并发数为1024,在linux为8192.(受限于文件系统的最大文件打开数)。

基于以上数据,进行推测:

数据库最大并发 = 300
数据库可以支持的连接池个数 = 477 / 20 = 23
23个连接池对应23个Tomcat,可以支撑的线程数:
23 * 500 = 11500个线程

也就是,数据库按照PROCESSES=300的配置来的话,可以压榨的极限是11500并发。这里补充一点,对于Spring框架的Web应用来说,Spring会用一个线程来处理一次用户请求(注意是一次请求,不是一次会话),处理完一次请求后,线程即回到等待状态,等待下一次请求调用。

所以11500个并发并不代变11500个用户,具体要看实际场景中一个用户的单位时间访问量。


下面来验证以上推测。

环境准备:
  • 服务器:

    • 4核8G5M带宽阿里云服务器 * 3

    • 4核4G5M带宽阿里云服务器 * 2

  • 测试客户端:

    • 4核8G笔记本
  • Tomcat线程池配置

    • maxThreads=500
    • accept=400
    • maxConnection=800

5个服务器上分散部署了共13个Tomcat和1个Nginx

首先,按照7500线程在70秒内全部发起请求,得到的结果是:前面十秒左右一切正常,10秒过后nginx开始大量请求无法响应(failed to response),原因是nginx所在的windows服务器限制了最大文件打开数量为1024,也就是限制了nginx的并发数为1024.

马上把nginx转移到linux上,其他不变。

此时,按照7500线程70秒内发起的结果如下:

线程数时间发出请求平均响应95%响应错误率吞吐量数据库平均cpu%数据库峰值cpu%
3750*254s749912721ms60147ms15.12%40.8/s60%100%
3750*254s749813753ms60358ms13.27%61.8/s66%100%
5750*283s1149015669ms60384ms15.97%56.4/s76%100%
5750*283s1148919229ms60376ms31.3%78.4/s50%100%
5750*283s1148919037ms60313ms36.3%67.56/s60%100%

说明:线程数乘2的原因是测试脚本包含两个请求,分别是登录请求和加载阅卷页面的请求。

根据压测过程中的监控,错误率里面85%来自登录请求的连接超时错误。正常情况下,这个系统的登录请求耗时1到1.5秒左右,并发场景下更严重。

由于这次部署的Tomcat实例数是13个,每个Tomcat的最大线程数是500,最大同时active的线程数就是7500,离预估的数据库最大承受值11500还差一点。凑齐20多个Tomcat的工作量太大,就不继续压榨Oracle了。基于已有的测试结果,基本可以验证上面的推测。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Oracle实例是指在一个物理服务器上运行多个独立的Oracle数据库实例。每个实例都有自己的系统进程和内存结构,相互之间独立运行。 多实例的优点之一是提供了资源隔离。不同的实例可以使用不同的硬件资源和操作系统进程,避免了实例过载导致的性能下降或系统崩溃的风险。每个实例独立运行,一个实例的问题不会影响其他实例的正常运行。 另一个优势是提高了数据库的可用性。一旦一个实例发生故障或需要维护,其他实例仍然可以继续提供服务,确保了系统的连续运行。同时,多实例也提供了负载均衡的功能,可以根据负载情况自动分配请求到不同的实例上,有效提高了数据库的性能和可扩展性。 此外,多实例还可以实现业务数据的隔离。每个实例可以独立管理不同的数据库,适用于多个业务系统或租户共享一个物理服务器的场景。通过配置实例参数和资源分配,可以灵活地进行数据库资源管理和权限控制。 然而,多实例也存在一些挑战和限制。首先,每个实例都需要占用一定的系统资源,包括内存、CPU和磁盘空间。因此,在资源有限的情况下,多实例可能会增加系统负担。其次,多实例的配置和管理相对复杂,需要合理规划和分配各个实例的资源。此外,多实例的通信和同步也需要一定的网络带宽和延迟,可能影响系统的响应速度。 综上所述,Oracle实例是一种灵活高效的数据库架构,可以提供资源隔离、可用性和负载均衡的功能,适用于高可用性、高并发和多租户的场景。然而,在实施多实例架构时需要根据具体情况进行仔细设计和管理,避免资源浪费和性能问题的发生。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值