Write heavy Oracle应用程序的优化?

时间:2008-10-09 01:50:38

标签: database performance oracle database-design

对于主要写入(更新)Oracle数据库的应用程序,可以使用哪些有用的Oracle优化?

这里的一般使用模式不是web服务或日志记录,在大多数情况下,而是保持系统的复杂状态,因此只需要读取系统启动时,其更新和一路创造。因此,目前写入与读取的比率超过9比1,在这种情况下,数据库调整可以提高性能吗?

4 个答案:

答案 0 :(得分:5)

使用statspack(9i)或AWR(10g +)监控系统健康状况是识别瓶颈的最佳方法。

特别是:

  • 了解重做等待。重做日志对于保持高写入率至关重要
  • 使用绑定变量
  • 尽可能使用批量操作。
  • 注意索引争用,其中多个进程将记录插入到具有序列派生列索引的单个表中

答案 1 :(得分:2)

与大卫的回答一起:

  • 监视行迁移和行链活动,并在必要时更改表存储参数
  • 检查重做日志文件系统:禁用FS缓存(即使用直接I / O),禁用上次访问时间,将块大小更改为512B。或者甚至更好,迁移到ASM。
  • 阅读有关索引组织的表,看看是否可以在任何地方应用它们。
  • 验证是否使用了异步I / O.
  • 对于较大的SGA尺寸,请启用大页面和LOCK_SGA(特定于平台)
  • 尝试不同的DBWR设置(例如 fast_start_mttr_target dbwr_processes
  • 在硬件级别,确保你有一个像样的RAID-10控制器,启用了写缓存!获得大量15K RPM硬盘。

最后但并非最不重要:在进行任何修改之前定义可重复且逼真的性能测试用例。在这种调整中有很多命中和错过 - 每次测试执行一次只能进行一次更改。

答案 2 :(得分:1)

我不能推荐Oracle Enterprise Management Console(内置于Oracle)。它会让你确切知道你做错了什么,如何解决它!

您可能需要考虑删除您可能拥有的任何额外索引(索引?)。这可能会导致启动时出现轻微的开销,但将数据添加到索引表可能会大大降低其速度。

答案 3 :(得分:0)

根据应用程序和数据的特征,考虑使用Oracle外部表加载批量数据。让应用程序将数据写入文本文件,然后从外部表上的SELECT中使用INSERT INTO目标表=非常快。

存在一些限制,它可能不适合您的情况,但它可以在您使用它时提供巨大的性能。

我使用它以每天40,000个文件的速度加载近实时文本数据文件,每个文件大约2 MB,加载到8 TB(是的,TeraBytes)Oracle 10g数据库实例中。