我们有一个 CF8 Web 应用程序,可以在两种模式下运行:数据库或静态文件。在高负载下,数据库模式的性能明显优于静态文件模式。我正在尝试找出原因。
首先介绍一下背景:
我们运行 Solaris Zones 和 Oracle;ColdFusion 8,32 位,带 JRun 4
在数据库模式下,所有数据均从运行 Oracle 10g 的外部数据库服务器获取。
在静态文件模式下,应用程序运行所需的所有数据都提前从数据库中生成,并放置在运行 CF 的 Web 服务器上,并通过 CFINCLUDE 调用。
在虚拟用户重复执行预定义操作的负载测试期间,在 DB 模式下我们能够运行 31600 个会话(在 CDATA 表中),而在静态文件中则为 25900 个会话。这在 60 分钟内完成。在 DB 模式下完成迭代(登录、执行操作、注销)的平均时间为 22 秒,在静态文件模式下为 33 秒。在 DB 模式下,最大 Java 堆使用量约为 800MB,在静态文件模式下约为 700 MB。
这就是为什么我认为静态文件会更好:
- 数据在同一台服务器上;唯一的操作是文件 I/O。文件之前已经生成。
- 数据库服务器和数据库服务器之间不需要额外的网络流量。
知道为什么会这样吗?我可以在哪里查看(或询问相应的管理员 - DB、OS、App)以了解为什么会这样?
谢谢!
知识管理
答案1
这很可能是因为您节省了访问磁盘的延迟。Oracle DBMS 会将所有内容保存在缓冲区缓存中,因此除了在开始时,您可能很少进行磁盘访问。您还必须比较磁盘子系统的相对速度。公司会花很多钱为 DB 服务器购买快速磁盘阵列,而不会花在应用程序服务器上。