我们正在维护一个为大量客户端提供服务的数据库服务器。每个客户端通常运行多个客户端应用程序。与数据库服务器 (Oracle 9i) 的连接总数在峰值负载时达到 800 个连接。windows 2003 服务器开始内存不足。我们现在计划迁移到 64 位 Windows 以获得更高的内存容量。作为一名开发人员,我建议转向使用连接池的多层架构,我认为这是解决这个问题的自然方法。但是,为了支持我的想法,我想要以下信息:
- Oracle 数据库允许的典型连接数到底是多少?
- 连接数过多时会出现什么问题?内存消耗过多?还是打开了太多的套接字?还是线程之间的上下文切换过多?
- 具体来说,Oracle Forms 应用程序如何扩展到数千名用户而不会遇到这个问题?Oracle RAC 是否应应用于此案例?
我确信这个问题的答案应该取决于很多因素,比如所使用硬件的确切规格。我期待一个粗略的估计或来自现实世界的一些经验。
为了处理数据库连接,需要一个单独的 Oracle 进程,这可能需要高达 2 MB 的内存。通常,Oracle 安装会根据可用内存和 CPU 配置限制并发连接数。
例如,假设您在数据库中有 50 个客户帐户,每个帐户最多有 100 个并发连接。如果每个帐户平均只使用 25% = 25 个连接,那么平均总数将是 1250 个连接。这意味着 2500 MB 仅用于存储连接特定的数据。上下文切换还需要处理器时间。
通过设置并发连接的限制,您可以确保您的交易顺利进行,并且一些非常活跃的客户帐户不会开始阻塞您的数据库服务器的资源。连接数受会话参数和您的许可限制。session 参数控制包括 Oracle 后台进程在内的连接总数。
使用 64 位 Windows 平台向服务器添加更多 RAM 是一个好主意,因为您不必花费太多,甚至添加 16 GB 内存。
有关配置如何在实际工作负载场景中执行的详细信息,请阅读Oracle E-Business Suite 标准基准。通常,它们具有大量连接。
Windows 上的 Oracle 打开用户线程,而不是进程,afaik。(当用户连接崩溃时,这并不好,因为它需要所有这些。)
这意味着您受到内存的限制;每个用户的线程和 PGA 的几 MB 会话开销 + 取决于您在做什么的上下文和 SGA。对于轻松的工作(== 用户一遍又一遍地执行相同的简单查询),您只需要计算会话数。