【问题标题】:Speeding up integration tests that rely on an Oracle DB加速依赖 Oracle 数据库的集成测试
【发布时间】:2009-12-16 19:28:03
【问题描述】:

我们有一个专门用于运行单元测试的 Oracle 数据库服务器。有没有办法专门针对这种目的调整 Oracle?由于数据不断被丢弃(因为它只是测试数据)。我想知道是否有办法让 Oracle 数据库在内存中并在没有 TCP/IP 堆栈的情况下进行连接,也许可以加快这些测试。

有什么建议吗?

【问题讨论】:

  • 我开始怀疑内存数据库中的 TimesTen 是否是一个合适的解决方案。看起来它使用相同的 Oracle SQL 变体。
  • 您确定数据库性能是长时间运行测试的罪魁祸首吗?通常,找出数据库对于特定语句或语句类型运行缓慢的原因,然后调整该特定语句将有更好的改进机会。

标签: oracle continuous-integration integration-testing


【解决方案1】:

答案可能是肯定的,但在测试期间将数据库环境从生产配置更改为集成配置会带来测试会给出错误结果的风险。

【讨论】:

  • 我会说这是一个至关重要的考虑因素。如果结果不准确,则运行测试毫无意义。
【解决方案2】:

如果挂起是数据库清理/重置阶段,并且您拥有企业版,请查看 FLASHBACK DATABASE 作为(可能)将数据库重置到固定点的更快方法。

在最坏的情况下,您不需要浪费时间构建清理/重置脚本。

【讨论】:

    【解决方案3】:

    TCP/IP 堆栈不太可能增加您的开销。但是,您可以在与测试用例相同的服务器上运行 Oracle 实例,并通过 ORACLE_SID(我相信它使用操作系统级别的进程间通信)进行访问。

    不过,在检查对 Oracle 的更改之前,我会先看看您的持续集成服务器上正在运行哪些测试。如果您还没有这样做,这意味着将集成测试(需要后端)与单元测试(不需要)分开,并按不同的时间表运行它们。几乎没有理由为每次更改运行一整套集成测试。

    下一步:您是否使用任何类型的对象关系映射器来访问您的数据库?如果是,并且您不依赖任何特定的 Oracle 怪癖,您可以用内存数据库替换 Oracle(您没有说明您使用的是什么语言,所以这可能是也可能不是一个选项)。

    最后,考虑使用 Oracle 导入/导出工具为每次集成测试运行完全重建数据库。它可能比尝试删除您创建的任何行更快,并且绝对更稳定(这假设您的集成测试从预先填充的数据开始;如果不是,只需删除并重建架构)。

    【讨论】:

      【解决方案4】:

      对于您提到的场景,您可以对 Oracle 实例执行很多操作,例如使用正确的锁定策略/隔离级别、禁用各种撤消日志等。您应该查阅一本好的 Oracle 调优书那个(我喜欢 Mark Gurry 的那个,但我不确定它的最新程度)。

      还有一件事可能很重要:如果您不断地在数据库中添加和删除数据(我的意思是“完全清空数据库”),请确保您正确设置了每个表的存储参数。如果您有空间,请考虑为您的测试用例分配一个等于最大大小的初始范围。 (或者在数据库创建脚本中,或者定义一次,然后使用重用存储选项传输表。)然后当您运行测试用例时,数据库不必分配额外的存储空间。

      【讨论】:

        【解决方案5】:

        我遇到了类似的问题,我能够通过将重做日志、撤消和用户表空间移动到 RAM 磁盘来加速单元测试。有一个free version 的 ramdisk 软件可供您试用。 Commercial versions 定期备份文件也很便宜。
        在我的情况下,单元测试仅验证数据完整性,因此即使它不复制生产设置,这种策略也是低风险的。我们有单独的规模和性能测试策略。

        【讨论】:

          【解决方案6】:

          您可以将重建表索引作为测试运行的一部分。选择在运行之前或之后花时间重建索引。您将消耗相同的总时间,但如果在测试运行后重新构建它们,您会“感觉”更少。

             ALTER INDEX index_name REBUILD
          

          将重建索引而不删除并重新创建它们。

          【讨论】:

          • 重建索引与此有什么关系?
          • 因为他们在数据库中运行,他们不断地删除表中的所有数据并重新运行测试。重建索引有助于消除索引中的漏洞并尽可能快地保持表访问。
          • 看看 Tom Kyte 对此有何评论 - asktom.oracle.com/pls/asktom/…
          猜你喜欢
          • 1970-01-01
          • 2020-01-06
          • 1970-01-01
          • 1970-01-01
          • 2010-09-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多