两个Oracle数据库实例之间的主要性能差异

问题描述:

我正在使用Oracle数据库的两个实例,将它们分别称为onetwotwo运行在比one更好的硬件(硬盘,内存,CPU)上,并且two是根据Oracle版本(均为11g)在one之后的一个次要版本。两者都有完全相同的表table_name,其索引完全相同。我在两个实例上加载了500,000个相同的行到table_name。我再运行,在这两种情况下:两个Oracle数据库实例之间的主要性能差异

delete from table_name; 

这个命令需要30秒才能完成对one 40分钟才能完成的two。对两个表执行INSERT和UPDATE具有类似的性能差异。有没有人有什么建议可以对两个数据库之间的性能产生如此严重的影响?

+1

任何活动对于未来的读者,它看起来像这个问题是关系到Oracle的审计记录。有关日志记录进程和正在使用的磁盘在其中一个实例上未正确配置。 – jrdioko 2010-04-27 21:52:48

如果你可以监视诉WAIT_CLASS和事件列$ session的删除会话你会得到一个关于延迟原因的线索。一般来说,我希望一个完整的表DELETE被磁盘绑定(一个等待类指示I/O或可能的配置)。它必须从表中读取数据(因此它知道要删除的内容),更新数据块和索引块以删除为UNDO表空间和重做日志生成大量条目的条目。

在生产环境中,底层文件可能分布在多个磁盘(甚至是SSD)上。开发/测试环境可能让它们全都卡在一个设备上,并且磁盘上的大量磁头移动会减慢速度。我可以看到跳过一个SQL可能是十倍。你的情况比这还糟糕。

如果在表[并发的wait_class]上有并发活动(例如其他会话插入),您可能会获得锁定争用或会话都试图敲击索引。

我首先比较V $ PARAMETER ORDER BY NAME中的实例配置 - SELECT NAME,VALUE,并将结果假脱机为两个实例的文本文件,并使用一些文件比较工具来突出区别。应该调查由于数据库名称和文件位置而产生的差异以外的任何内容。极端情况可能是一个数据库没有归档日志记录,另一个数据库定义了5个归档目的地。

如果您没有访问数据库主机上的文件系统的权限,请查找某人并让他们从您开始会话时获取跟踪文件和tkprof结果,ALTER SESSION SET sql_trace = true,然后执行您的操作删除。这将会使任何递归SQL由于在桌子上的触发器(可能是你自己),审计等

请注意:我不是一个DBA ...

我有以下几点写在我办公窗口:

在紧急情况下,要求随叫随到DBA到:

  1. 检测计划
  2. 运行统计
  3. 冲洗共享缓冲池

号码2和/或3正常修复查询其工作在一个数据库中而不是其他或工作昨天而不是今天....

实例两个明显是错误的。我建议你看看这些所谓的问题进行解答:

特别是:

  • 你有没有索引的外键引用(原因# 1删除取looong时间 - 看看这个script from AskTom),
  • 你有没有是否在桌子上删除触发器?
  • 你对实例(如果这个表是不断更新的,你可能会被其它会话阻止)