我的一个客户已经将我们产品的数据库部署到一台已经有 3 个 Oracle 实例的 Solaris 机器上。所以,现在有 4 个 Oracle 实例在同一台机器上运行。现在我们遇到了性能问题。
我无法访问其他实例或机器,我拥有的所有工具都是 alert.log、AWR 和 ADDM。我知道有一些与多个实例有关的东西,但我无法证明这一点。
所以,我的问题是,你有没有遇到过类似的情况?我应该如何处理?如何确定与多个实例相关的性能问题的原因?
我的一个客户已经将我们产品的数据库部署到一台已经有 3 个 Oracle 实例的 Solaris 机器上。所以,现在有 4 个 Oracle 实例在同一台机器上运行。现在我们遇到了性能问题。
我无法访问其他实例或机器,我拥有的所有工具都是 alert.log、AWR 和 ADDM。我知道有一些与多个实例有关的东西,但我无法证明这一点。
所以,我的问题是,你有没有遇到过类似的情况?我应该如何处理?如何确定与多个实例相关的性能问题的原因?
Isaac,最好我们在一台服务器上运行一个实例,并将不同的应用程序实现为该单个数据库中的模式和服务。如果服务器有足够的内存,就不会有问题,如果应用程序都表现得像优秀的 Oracle 公民。一旦有一个应用程序不使用绑定变量,主机就会越来越痛苦。对于每隔几秒钟不断创建新连接而不是重新使用现有连接的应用程序也是如此。诸如自动提交之类的事情也无助于改善这种情况。您的应用程序的正常行为是什么?它会进行大量更新吗?它什么时候提交?每小时产生多少重做?您的应用程序是否使用绑定变量?在许多情况下,联机重做日志文件的位置至关重要。如果应用程序确实生成了大量重做(或与执行此操作的其他应用程序竞争),日志写入器将减慢并导致性能大幅下降,因为会话正在等待日志文件写入完成。为您的客户提供一个磁盘布局,其中重做位于专用的 raid-10 磁盘上,看看这有多大帮助。还要找出内存分配情况。可能需要公平地重新分配可用内存。
我希望这有帮助
在同一台服务器上运行多个实例是可能的,并且在某些情况下是必要的。oratab 专门设计用于处理管理多个实例。如果您有多个独立的应用程序,最好为每个应用程序都有一个实例。
拥有足够的内存至关重要。Oracle 在共享内存中构建 SGA。如果您没有足够的内存,SGA 或进程将开始换入和换出。这称为抖动,会导致显着的性能损失。
可以调整实例以使用较小的 SGA 运行。Oracle 提供了帮助调整 SGA 大小的工具。如果任何实例的 SGA 过大,它将惩罚所有实例。
内存的另一个重要用途是缓冲区空间。这充当二级缓存,可以消除重要的读取 I/O。
运行
sar
(假设基于 Unix 的 O/S)可以很好地诊断问题所在。可能的问题是交换或磁盘 I/O 饱和。添加 RAM 可能会解决这些问题中的任何一个。磁盘 I/O 饱和也可以通过将一些表空间移动到其他磁盘来处理。我通常配置 Oracle,以便 I/O 分布在尽可能多的磁盘上。
编辑:这些是一些可能需要单独实例的情况。
最关键的资源是 RAM。
每个正在运行的 Oracle 实例在刚启动且未加载时为其自己分配一些 RAM。
我们正在运行带有 10 个实例的 10g 和带有 8 个实例的 11g,但这些是开发服务器。重新启动操作系统后,某些 Oracle 服务不会自动启动,必须手动启动:Oradim -startup -sid xxx。
我们刚刚开始使用自动内存管理,但情况与 SQL Server 不同,在 SQL Server 中,您可以根据磁盘空间的大小添加数据库。
在你的情况下,一台机器上有更多实例,每个实例的SGA变得更小,可以缓存更少的预编译 sql,并且机器必须进行更多的 sql 编译,这会降低性能。
添加 RAM 可能对您的情况有所帮助。