大量插入和截断导致的Oracle性能问题(已附带AWR)

3
我正在使用Oracle来在应用服务器的两个节点之间同步事件(不要问为什么/是否这是最好的方法等,这是已知的)。为此,我使用一个"事件"表,其中一个节点("活动"节点)写入新事件,而另一个节点("被动"节点)从中读取。该表如下:事件UUID(UUID)||事件ID(long)||事件数据(多个不同类型的列)。事件ID是一个不断增加的数字(由应用程序控制,不是序列),表示在应用事件数据后内部模型的修订版本。事件UUID具有唯一约束。我在事件ID上建立了一个单一索引,以便于选择SQL-"Select...where Event_ID > XXX order by Event_ID",其中XXX是被动节点的内部修订号。偶尔我使用"truncate reuse storage"截断表格(实际上,我使用三个这样的表格按轮换顺序进行,因此我可以始终截断我要写入的那个表格,以便我的被动节点有时间"追赶")。
在插入和截断数小时后,一切正常,但是我开始从数据库中获得大量“噪音”,响应时间急剧下降。这可能会持续一两个小时(甚至更长时间),然后突然停止,响应时间恢复到正常水平。AWR报告指向截断语句,并且在一定程度上指向插入语句。我怀疑DBWR出了问题,但我无法确定。请注意,即使关闭了辅助节点(运行“SELECT”语句的节点),性能下降也会发生 - 因此它是纯插入/截断。注2:此问题在MSSQL上不会重现。
问题:为什么会发生这种情况?我该怎么做才能阻止它?是否有替代设计(越接近当前设计的替代方案越好)?
更新1:我可能误导了标题。这不是单个大规模插入,而是应用程序服务器生成事件时的插入滴水。
更新2:第一个期间(良好)和第二个期间(不良)的样本的AWR比较位于http://pastehtml.com/view/1eirn20.html

更新3:http://pastehtml.com/view/1eirn20.html处有新的AWR差异。

更新4:已解决。显然是存储问题(感谢ik_zelf!)。这表明 - 抽象并不真正抽象。最后,它只是一个磁化旋转盘。


@Rob:这不是批量插入,而是逐个插入。我会更新问题。 - Ran Biron
1
你能否发布AWR报告,其中包括性能较慢的时间间隔和性能较快的时间间隔? - Justin Cave
@Ran Biron:配置是什么样的?(归档日志,备用数据库,在运行备份时,是否有并发用户活动)? - user123664
@Justin - 我可能可以(必须问问我的老板 - 涉及敏感信息等等)- 但最早要等到周一。 - Ran Biron
@ik_zelf: 系统不是共享的 - 它是专门为测试而设计的。 - Ran Biron
显示剩余6条评论
1个回答

2
在awr报告中,明确指出IO时间在坏期间比第一期翻了一倍。检查存储使用情况。很可能存储是在系统之间共享的,并且 - 例如 - 其他系统正在备份并导致了一个糟糕的时期。检查所有连接的系统/备份的日志,并尝试将时间与测试结果联系起来。

显然(经过多次反复)存储是问题所在。感谢您的提示,确实很有帮助。 - Ran Biron
在许多情况下,SAN被认为是存储整合解决方案,但并非为性能而设计......很高兴它有所帮助。 - user123664

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接