![在 Windows 服务器上运行的 Oracle 的数据库连接数通常最大是多少?](https://linux22.com/image/483585/%E5%9C%A8%20Windows%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E8%BF%90%E8%A1%8C%E7%9A%84%20Oracle%20%E7%9A%84%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%9E%E6%8E%A5%E6%95%B0%E9%80%9A%E5%B8%B8%E6%9C%80%E5%A4%A7%E6%98%AF%E5%A4%9A%E5%B0%91%EF%BC%9F.png)
我们正在维护一个为大量客户端提供服务的数据库服务器。每个客户端通常运行多个客户端应用程序。在峰值负载下,数据库服务器 (Oracle 9i) 的总连接数达到 800 个。Windows 2003 服务器开始耗尽内存。我们现在计划迁移到 64 位 Windows,以获得更高的内存容量。作为一名开发人员,我建议迁移到具有连接池的多层架构,我相信这是解决此问题的自然方法。但是,为了支持我的想法,我需要以下信息:
- Oracle 数据库允许的典型连接数到底是多少?
- 连接数过多会导致什么问题?内存消耗过多?或者打开了太多套接字?或者线程间上下文切换过多?
- 具体来说,Oracle Forms 应用程序如何才能扩展到数千个用户而不会遇到此问题? Oracle RAC 是否适用于这种情况?
我确信这个问题的答案取决于很多因素,比如所用硬件的具体规格。我期望得到一个粗略的估计或一些来自现实世界的经验。
答案1
为了处理数据库连接,需要一个单独的 Oracle 进程,这可能需要最多 2 MB 的内存。通常,Oracle 安装会根据可用内存和 CPU 配置限制并发连接数。
例如,假设数据库中有 50 个客户帐户,每个帐户最多有 100 个并发连接。如果每个帐户平均只使用 25% = 25 个连接,则总平均连接数将为 1250 个。这意味着 2500 MB 仅用于存储特定于连接的数据。上下文切换也需要处理器时间。
通过设置并发连接数限制,您可以确保交易顺利进行,并且某些非常活跃的客户帐户不会开始阻塞数据库服务器的资源。连接数受会话参数和您的许可限制。会话参数控制包括 Oracle 后台进程在内的连接总数。
使用 64 位 Windows 平台为服务器添加更多 RAM 是一个好主意,因为您不需要花费很多,甚至只需添加 16 GB 内存。
有关配置在实际工作负载场景中的表现的详细信息,请阅读Oracle E-Business Suite 标准基准. 通常它们拥有大量的连接。
答案2
据我所知,Windows 上的 Oracle 打开的是用户线程,而不是进程。(当用户连接崩溃时,这可不是什么好事,因为它会带走所有用户线程。)
这意味着您受到内存的限制;每个用户的线程和 PGA 会话开销为几 MB + 上下文和 SGA 取决于您正在做的事情。对于轻量级工作(== 用户一遍又一遍地执行相同的简单查询),您只需要计算会话数。